Пошаговые руководства, шпаргалки, полезные ссылки...
БлогФорумАвторы
Полезные Online-сервисы
Перечень Бесплатного ПО
Подписка на RSS-канал
Рассмотрим пример использования «Действия папки» для автоматизации отправки .torrent файлов на удалённый сервер transmission. В рассматриваемом примере transmission установлен на роутере ASUS с кастомной прошивкой от Merlin.
Подсмотрев пример в этом блоге, создал автоматизацию действия папки по старинке в Automator.app и используя shell-script.
Текст скрипта:
#!/bin/zsh for file in "$@" do if [[ "$(basename ${file##*.})" == "torrent" ]] then #Authentication HOST=My-Router.local PORT=9092 USER=torruser PASS=torrpassword #Encoding torrent file METAINFO=$(base64 -i $file) # set true if you want every torrent to be paused initially #PAUSED="true" PAUSED="false" #Push SESSID=$(curl --silent --anyauth --user $USER:$PASS "http://$HOST:$PORT/transmission/rpc" | sed 's/.*<code>//g;s/<\/code>.*//g') curl --silent --anyauth --user $USER:$PASS --header "$SESSID" "http://$HOST:$PORT/transmission/rpc" -d "{\"method\":\"torrent-add\",\"arguments\":{\"paused\":${PAUSED},\"metainfo\":\"${METAINFO}\"}}" # Remove .torrent file rm $file -f fi done
Однако день спустя, наткнулся на реализацию на AppleScript, которая мне показалась интереснее, поэтому начал изучение вопроса с начала.
В итоге получился рабочий вариант, который не зависит от устаревающего Automator, также добавлена обработка ошибок и уведомления. Сохраняем скрипт в каталоге ~/Library/Workflows/Applications/Folder Actions/
~/Library/Workflows/Applications/Folder Actions/
--Обрабатываемый тип файлов property FileExt : "torrent" on adding folder items to this_folder after receiving added_items repeat with torrentFile in added_items tell application "Finder" if the name extension of the torrentFile is in the FileExt then (* Параметры переменных подключения к серверу Пользователь, пароль, порт настраиваются в /opt/etc/transmission/settings.json на стороне сервера *) set transmissionuser to "torruser" set transmissionpass to "torrpassword" set transmissionhost to "My-Router.local" set transmissionport to "9092" set transmissionauth to transmissionuser & ":" & transmissionpass set transmissionurl to "http://" & transmissionhost & ":" & transmissionport set rpcurl to transmissionurl & "/transmission/rpc" --Проверяем доступность сервера try do shell script "nc -z " & transmissionhost & space & transmissionport try set metainfo to do shell script "base64 -i " & quoted form of (POSIX path of (torrentFile)) set sessionid to do shell script "curl --silent " & rpcurl & " --anyauth --user " & transmissionauth & ¬ " | sed 's/.*<code>//g;s/<\\/code>.*//g'" set json to "{\"method\": \"torrent-add\", \"arguments\":{\"metainfo\":\"" & metainfo & "\" }}" set answer to do shell script "curl --silent --anyauth --user " & transmissionauth & space & rpcurl & " --header " & ¬ quoted form of (sessionid) & " -d " & quoted form of (json) & " | sed 's/.*result\\\":\\\"//g;s/\\\"}//g'" if answer = "success" then -- Показ уведомления об успешной отправке display notification (name of torrentFile as text) with title "Transmission-RPC" subtitle "Успешно отправлен на закачку" --Удаление обработанного .torrent файла --delete torrentFile -- удаление в корзину do shell script "rm -f " & quoted form of (POSIX path of (torrentFile)) else -- Сообщение об ошибке отправки .torrent файла, исчезает через 10 сек set errMsg to do shell script "echo " & quoted form of (answer) & " | sed 's/.*<p>//g;s/<\\/p>.*//g'" display dialog "Ошибка отправки файла: " & (name of torrentFile) & ". Ответ сервера: " & errMsg with title "Transmission-RPC" buttons {"OK"} default button 1 with icon stop giving up after 10 end if end try on error -- Сообщение об ошибке связи с сервером, исчезает через 10 сек display dialog "Сервер transmission " & transmissionhost & " недоступен" with title ¬ "Transmission-RPC" buttons {"OK"} default button 1 with icon stop giving up after 10 end try end if end tell end repeat end adding folder items to
Для установки скрипта вызываем контекстное меню на каталоге:
Так же «Настройка действий папки» можно вызвать через spotlight.
В обработку скрипта попадают все файлы и каталоги, которые будут добавляться в настроенный каталог, если расширение файла или файлов .torrent, то они будут отправлены в transmission для последующей загрузки.
Также существует решение, реализованное с помощью «Быстрые Команды», которое позволяет вручную отправлять .torrent файлы на удалённый сервер на iOS и iPadOS.
Проверено на следующих конфигурациях:
Автор первичной редакции: Виталий Якоб Время публикации: 03.02.2022 10:39