Хочу немного поделится тем, как я сделал
Но сперва немного оффтопа про выбор торрент-клиента. Может кому пригодится мой опыт. Всю жизнь пользовался мю-торрентом, но пару лет назад он начал меня разочаровывать. Постоянные обновления, замирание во время загрузки (скидывал скорость на 0, не завершив загрузку, и не продолжал качать до перезапуска, либо продолжал по прошествии минут 5), и самое напряжное - не докачивал файлы (показывал 100%, но когда удаляешь/добавляешь заново торрент - после сканирования это оказывалось, к примеру 94%). Итак, решил я сменить клиент. В первую очередь выбор пал на тот, которому я доверял больше, но пользовался меньше - ktorrent (из kde). Но под виндой с ним оказались небольшие проблемы. 1) Он тянул половину kde-компонентов из пакета kde for windows (плохо, если требуется быстрая установка). 2) Он то-ли зависал, то ли вылетал, не помню. В итоге пошел смотреть какие еще есть клиенты для винды. Сразу глаз пал на qBitTorrent. Сделан на Qt (так же как и ktorrent), весит мало, один цельный пакет, максимально простой интерфейс без всяких наворотов, дополнений, и т.д. - то что надо одним словом.Wave писал(а):...на виндовом сервере как такую же плюшку ...
Торрент клиент имеет веб-интерфейс. Я об этом знал, но как то пользовался торрентом на ноуте, по привычке. Недавно решил таки установить на сервер. Ну и как следствие - т.к. каждый раз порт дописывать к адресу неудобно - захотелось прицепить его к MD. Первым делом включаем этот самый веб-интерфейс. У клиента есть хороший мануал по api.
Но чтобы новичкам (как я) особо не капаться - вот готовые решения.
Первым делом создаем объект (скажем torrent).
Решаем, какие функции хотим контролировать из меню. Я приведу примеры со своими пунктами.
1) Запуск/остановка загрузки.
Для этого добавляем пункт меню radiobox с надписями Загрузка и Пауза, связываем со свойством, скажем, state, и добавляем код на выполнение
Код: Выделить всё
if (getGlobal('torrent.state') == 'Загрузка') {
getURL('http://localhost:8083/command/resumeAll',0);
sleep(2);
} else {
getURL('http://localhost:8083/command/pauseAll',0);
sleep(2);
}
Код: Выделить всё
getURL('http://localhost:8083/command/toggleAlternativeSpeedLimits',0);
создаем метод check, с кодом
Код: Выделить всё
$content=getURL('http://localhost:8083/query/torrents?filter=all', 0);
$data=json_decode($content);
$ttt=0;
sg('torrent.list', '');
foreach ($data as $key => $value) {
setGlobal('torrent.list', gg('torrent.list').'<br>'.$value->name);
$ttt=$ttt+1;
}
sg('torrent.all', $ttt);
$content=getURL('http://localhost:8083/query/torrents?filter=downloading', 0);
$data=json_decode($content);
$ttt=0;
foreach ($data as $key => $value) {
// setGlobal('torrent.test', gg('torrent.test').'<br>'.$value->name);
$ttt=$ttt+1;
}
sg('torrent.dw', $ttt);
Добавляем html-блок в меню.
Код: Выделить всё
Всего торрентов: %torrent.all% <br>
Загружается: %torrent.dw%
<br>
<details>
<summary>Список</summary>%torrent.list%
</details>
Можно еще запрашивать статус ограничения скорости, и перезаписывать свойство speedlim - для всегда актуального статуса выключателя, но я не стал заморачиваться.
Как вы понимаете, интерфейс больше нацелен на мобильное меню. Для компьютера можно добавить домашнюю страницу (как у меня на скрине).
4) Ну и еще небольшая фишечка. В клиенте есть функция "выполнить команду по окончании загрузки" а в метод torrents_end вписываем что то вроде
Код: Выделить всё
if (getGlobal('torrent.voice')) {
say('Загрузка торрента '.$params['t_name'].' завершена');
}
Как результат получаем вот такие оповещения 5) У клиента так же, как и у описанного тем стартером, есть папка для отслеживания изменений (при появлении там торрента - загружает автоматически). Думаю скрипты для скачивания самих торрент файлов с трекеров такие же, как и для линукса. Просто скачиваете в указанную папку, а в загрузку ставится автоматически. Я этого делать не стал, т.к. качаю с разнообразных трэкеров. Только лишь указал папку. PS: Конечно все указанные коды можно прописать в методах, и вызывать их, но я пока не увидел необходимости. Если все будет прописано в методах, их можно легко вызывать из шаблонов.
-----------------------------
Спасибо всем за внимание и помощь.