Удаление torrent-файлов из Transmission при удалении самих файлов внешними силами, например, через Plex

PlexПостепенно перевожу свою, разбросанную между локациями, мультимедийную среду в более автоматизированный вид. В качестве сервера мультимедии я использую Plex. Plex-сервер у меня установлен в двух локациях и каждый работает независимо от другого, но под одним и тем же эккаунтом (обычным, не Premium). Данные, а именно файлы, синхронизуются между серверами посредством Resilio. А вот с просмотрами дела обстоят не так просто. Для того, чтобы можно было начать смотреть, ну, например, фильм на даче, а потом продолжить его смотреть в городе на кухонном телевизоре, необходимо как-то сообщить другому Plex-северу, мол, там вот посмотрели только до этого момента и следует тут начать с него же. Провернуть этот фокус можно несколькими путями:

  1. Через платную подписку Plex. Тут и файлы будут синхронизироваться и прочие полезности. Но платить 5 баксов за простую синхронизацию кажется не самой разумной затеей.
  2. Через механизм Webhook-ов. Plex позиционирует этот механизм как способ вмешиваться в домашнюю автоматизацию, например, приглушать свет в помещении если начинается трансляция в Plex. Но вебхуки можно применять и для многих других целей, например, для синхронизации через многочисленные интернет-сервисы по синхронизации просмотра видео-контента. Я смог насчитать, особо не разыскивая, целых три подобных сервиса. Но. Но, вебхуки доступны только на платной подписке.

Хорошо, что мир не без добрых людей и Jacob Gillespie придумал наипростейший Python скрипт с лаконичным названием Plex-Sync, выполняющий операцию по синхронизации между библиотеками Plex-серверов. Настройка скрипта примитивная, дальше он добавляется в планировщик и «плексы» синхронизируются по просмотренному. И теперь можно начать просмотр в одном месте, а закончиться его уже другом. Удобно.

Удобно, но не совсем. Plex удобно использовать в качестве медиа-сервера для скачиваемого посредством Torrent контента. Хочу сразу заметить, что Torrent != пиратский контент, поэтому никакой крамолы. На моих серверах за скачку отвечает Transmission. Старый как окаменелые отходы саблезубых млекопитающих, тем не менее, он работает отлично. Но при большом количестве torrent-закачек начинаешь путать, какой контент ты только что посмотрел через Plex и какой файл в Transmission следует удалить, дабы не занималось более место.

Через Plex можно удалять файлы и это настолько здорово, что может показаться, что наступила золотая эра, но подобная функция по удалению есть далеко, далеко не в каждом проигрывателе. Тем не менее, удобно удаляя файлы в Plex, необходимо что-то делать с Torrent-файлами в Transmission. Ведь они там копятся и с течением времени есть риск полного захламления Torrent-клиента. На выручку очумелым ручкам пришел OlegON изобразивший Bash скрипт на удаление скаченных torrent-ов в Transmission.

Немного модифицировав скрипт под цели удаления torrent-файлов при удалении скаченных файлов я получил нечто следующее:

#!/bin/bash
TCMD="transmission-remote 192.168.0.19:9091 --auth=user:pass"
LIST=`$TCMD -l | grep -Eo '^ *([0-9]+)'`
for TORRENTID in $LIST
do
  VERIFY=`$TCMD -t $TORRENTID -v`
  FAILED=`$TCMD -t $TORRENTID -i | grep "Error: No data found!"`
  if [ "$FAILED" != "" ]
    then
      $TCMD -t $TORRENTID -i | grep "Name: " | sed -e "s/  Name: //"
      echo "FILE IS DELETED"
      $TCMD -t $TORRENTID -rad
      echo "Torrent-FILE IS DELETED"
  fi
done

В основе скрипта лежит transmission-remote, сервис, обеспечивающий подключение к Transmission через методы вызова удаленного вызова (RPC, если кто не понял). Соответственно этот RPC должен быть включен в настройках Transmission, заданы пользователь для доступа и пароль (собственно, они указываются во второй строчке скрипта). Хотя, если у вас нет никакой аутентификации или же авторизация происходит посредством разрешенных IP-адресов, то можно обойтись и без login/password.

Третьей строчкой идет получение списка идентификаторов активных torrent-ов в Transmission (параметр -l). Затем происходит проверка, верификация, каждого из активных torrent-ов (команда -v). Верификация означает полную проверку и перехеширование скаченного добра и может занимать существенное время, особенно на слабых машинах. Поэтому скрипт не стоит запускать слишком часто, а лучше запускать его раз в сутки, глубокой ночью.

После верификации, torrent-ы, в которых отсутствуют файлы (мы их удалили в Plex) помечаются как сбойные и при следующем вызове transmission-remote в скрипте (уже с командой -i) на экран будет выводиться в том числе и строчка с сообщением об этой ошибке. Вот именно эта строчка и ловится. И если она поймана, то происходит удаление torrent-а (тут возможно два варианта, с командой -r, тогда удаляется только torrent-файл или с -rad, тогда удаляется все, что было скачано в рамках обработки это конкретного torrent-а. Я предпочитаю -rad, так как далеко не всегда в раздачах бывают только просто файлы, иногда туда добавляется дополнительный контент, например, субтитры или фильмы о фильмах. И они из Plex не удаляются.

Не забываем про установку атрибута x для обозначения исполняемого файла (скрипта), а при указании скрипта в cron-е, лучше сразу прописать полный путь до Bash.

Полезные ссылки:

  1. Plex
  2. Plex-Sync
  3. Оригинальный скрипт от OlegON

Опубликовано автором в следующих категориях:
Soft

Добавить комментарий