суббота, 3 января 2009 г.

Flush - еще один GTK-based BitTorrent клиент

Вступление

Единственный BitTorrent клиент под Linux, который пришелся мне по душе - это KTorrent. Не скажу, что он меня полностью устраивал, но при его использовании я не испытывал особых неудобств.

Хотя некоторого функционала мне в нем все же не хватало. Что-то я реализовал скриптами, что-то продолжал делать руками... Вообщем нужного мне уровня автоматизма, которого я пытаюсь добиться со всеми приложениями, которые использую более или менее регулярно, и которые время от времени требуют выполнения каких-либо рутинных операций, мне достичь не удалось.

На самом деле мне не так уж и много надо. Мне не нужен огромный комбайн, который умеет, например, читать RSS, поддерживать надстройки в виде плагинов и т. п.

Попробую объяснить, что мне нужно от BitTorrent клиента, и зачем мне это нужно...

Вот, к примеру, на некоторых трекерах стоит ограничение на максимальное количество торрентов, которые вы раздаете. При превышении лимита вам грозят баном или прочими видами ограничений. Даже если банить вас никто не собирается, то все равно правила нарушать не стоит хотя бы из соображений взаимного уважения, но вручную отслеживать количество раздаваемых торрентов - довольно утомительное занятие. Почему бы не возложить эту работу на BitTorrent клиент?

Далее. Если уж говорить обо мне, то у меня все устроено следующим образом: есть старый диск на 160 Гб, на котором у меня хранятся зеркала репозиториев и скачанные торренты, т. е. наиболее часто изменяемые данные. Не смотря на то, что скачивание торрентов из локальной сети требует очень активной работы с диском, система не тормозит, т. к. находится на другом диске + если из-за сильного износа скачиванием и раздачей торрентов диск выйдет из строя, то никакие ценные данные не потеряются - только торренты и зеркала репозиториев, которые всегда можно скачать заново.

Так вот. Опять-таки правило хорошего тона при использовании peer-to-peer сетей гласит: скачал файл - не уходи с раздачи, дай скачать другим. Тут я предпочитаю следующую схему: при открытии BitTorrent клиентом *.torrent файла, файлы торрента скачиваются на тот самый старый диск. По завершении скачивания всех файлов они копируются в специальную директорию типа "Посмотреть в свободное время", в которой они будут лежать бесконечно долгое время, пока я их не посмотрю и не удалю. Раздача же торрента продолжается с моего старого диска, работа с которым, напомню еще раз, практически не замедляет работу системы. Как только время раздачи торрента превысит, к примеру, неделю, его раздача прекращается и он удаляется с диска.

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

Ну и, конечно же, необходима возможность контролировать максимальную скорость скачивания/отдачи в зависимости от времени суток, т. к., к примеру, у моего провайдера ночью скорость скачивания и отдачи увеличивается в 2 раза. Самый удобный, на мой взгляд, способ такого контроля - запуск при помощи cron'а какой-нибудь программы, которая будет передавать указанные опции командной строки уже запущенной копии.

Кроме этого, хотелось бы, чтобы клиент был написан на GTK, т. к. KTorrent - это единственное Qt приложение, которое я использую в повседневной работе - зачем же в таком случае постоянно держать в памяти различные Qt/KDE библиотеки?

На работе, в силу ее специфики, я программирую только на C, поэтому получать опыт программирования на других языках и изучать далекие от специфики работы технологии с целью повышения квалификации приходится дома. :) В итоге, как и в случае с PyVSB, неудовлетворенность имеющимися средствами и желание попрограммировать на C++ параллельно с чтением "Язык программирования C++" Б. Страуструпа сподвигли меня на написание собственного торрент клиента.


Знакомьтесь, Flush

Основные возможности:
  • Контролирование уже запущенной копии через интерфейс командной строки, а именно:
    • Запуск/остановка торрентов.
    • Изменение максимальной скорости скачивания/раздачи.
    • Изменение максимального количества соединений.
  • Запуск нескольких копий с различными конфигурационными файлами.
  • Автоматическое копирование скачанных торрентов в указанную директорию.
  • Автоматическое удаление старых торрентов.

Flush использует библиотеку libtorrent от Rasterbar Software.


Скриншоты:






Отговорки, отказ от ответственности и прочее

Как уже было сказано выше, Flush писался исключительно для того, чтобы "написать что-нибудь на C++", поэтому возгласы типа "зачем еще один велосипед?" не имеют смысла.

Версия первая, а значит, возможно, не совсем стабильная. Но, т. к. я им пользуюсь уже достаточно длительное время, то можно считать, что предварительное тестирование он уже прошел. Да, некоторых возможностей, которые могут иногда пригодиться, в нем нет, есть небольшие недостатки, которые мне известны, но до их исправления руки пока не дошли - в конце концов на то версия и 0.1, чтобы быть далеко не идеальной. Просто захотелось выложить по-раньше на всеобщее обозрение, т. к. в таком случае, возможно, мне посчастливится услышать осмысленную критику. Возможно, кто-то даже не поленится залезть в код и дать советы, как лучше реализовать ту или иную функцию. К примеру, текущая реализация работы с DBus меня не устраивает - если вдруг кто-то решит запустить новую сессию DBus, то станет возможным запуск нескольких копий с одним конфигом, и сломается передача параметров уже запущенной копии. Как это сделать более правильно - пока не знаю, особо над этим еще не задумывался, т. к. считаю, что для первой версии это вполне рабочая схема. Единственное что удручает - так это практически полное отсутствие документации по DBus, а изучать его по комментариям в исходных текстах, честно говоря, просто жалко время.

libtorrent-rasterbar-0.14 я пока не поддерживаю - в ней довольно сильно изменился API по сравнению с 0.13, и внести изменения в код я пока не успел.

Да, и самое главное: никакой гарантии, что Flush будет активно поддерживаться и развиваться я не даю. :)


Где скачать?

Естественно, эту статью я написал не просто так. Если мне потребовался такой BitTorrent клиент, то наверняка он также придется по душе и кому-то другому, чему я буду очень рад. Несмотря на существующие недостатки и недоработки, я Flush'ем вполне доволен и KTorrent'ом больше не пользуюсь.

Исходники и deb пакеты для Ubuntu-8.10-i386 и Ubuntu-8.10-x86-64 можно скачать здесь:
http://sourceforge.net/projects/flush/

149 комментариев:

axet комментирует...

Я должен вас огорчить. Это все уже реализовано в deluge

soffokl комментирует...

Хотелось бы увидеть функцию фильтрации по ip-адресам. :)

Анонимный комментирует...

То что вкладка называется "демон" (в настройках) означает что клиент использует клиент-серверную модель, где вся работа выполняется демоном (сервером), а УИ - только клиент, т.е. можно запустить демона на одной машине, а управлять с другой?

Конищев Дмитрий комментирует...

> Я должен вас огорчить.
> Это все уже реализовано в deluge

Хм... Когда я только начинал разрабатывать Flush, то каких-то функций там точно не было. Разве он уже умеет удалять старые торренты по признакам "слишком много раздач", "слишком долго раздаются"? А скачанные данные (файлы) торрента при этом удаляет?

Да нет, вы меня не огорчили. Как было сказано выше, я писал его просто для того, чтобы что-нибудь написать на C++. Недостатки существующих клиентов - только повод. Если бы все это было уже реализовано, то просто написал бы что-нибудь другое. :)

Конищев Дмитрий комментирует...

> Хотелось бы увидеть функцию фильтрации по ip-адресам. :)

Возможно, когда-нибудь появится, но не обещаю. :)

Конищев Дмитрий комментирует...

Анонимный, не совсем. В данный момент GUI и демон связаны друг с другом через proxy-класс и могут работать только внутри одного процесса. В будущем же, при большом желании, можно внутри этого proxy-класса поставить DBus или сокеты и запускать GUI и демон в отдельных процессах или на отдельных машинах.

axet комментирует...

Разве он уже умеет удалять старые торренты по признакам "слишком много раздач", "слишком долго раздаются"? А скачанные данные (файлы) торрента при этом удаляет?

Как я себе это понимаю - да.

Анонимный комментирует...

Не подскажете как сделать treeview в полоску? сам нагуглить не смог.

Анонимный комментирует...

Первое впечатление очень приятное, спасибо.

А как насчет поддержки прокси и возможности полного отключения DHT ?
Очень хотелось быть иметь функцию ПОЛНОЙ работы через прокси (socks для peer-2-peer и http для всего остального) и гарантии нехождения пакетов напрямую, а также полного отключения DHT для ratio-based-трекеров.

Конищев Дмитрий комментирует...

Не подскажете как сделать treeview в полоску? сам нагуглить не смог.

gtk_tree_view_set_rules_hint()

Анонимный комментирует...

огромное спасибо за ссылку!

salseeg комментирует...

vuze умеет работать с локалкой и инетом, но он на яве
для себя rtorrent для инета и transmission для локалки

Конищев Дмитрий комментирует...

> А как насчет поддержки прокси и возможности полного отключения DHT ?
Отключить DHT - не проблема.

> Очень хотелось быть иметь функцию ПОЛНОЙ работы через прокси (socks для peer-2-peer и http для всего остального) и гарантии нехождения пакетов напрямую...
Я сейчас бегло пробежался глазами по документации к libtorrent - на первый взгляд, с прокси работать она умеет, так что особых сложностей здесь тоже возникнуть не должно.

> ...а также полного отключения DHT для ratio-based-трекеров.
А вот насчет этого не знаю. Не уверен, что можно реализовать выборочное отключение DHT средствами libtorrent. Делать же форк libtorrent или включаться в его разработку у меня, честно говоря, пока особого желания нет, и хотелось бы пока остаться в рамках текущих возможностей libtorrent.

P.S.: Только поймите меня правильно - я не могу сейчас обещать, что реализую какие-то возможности, т. к. все это делается в свободное время, которого всегда не хватает. К тому же все свободное время тратить на Flush я тоже не собираюсь - мне много чего еще хочется успеть и много чему научиться, но выслушать пожелания я всегда готов. :)

Анонимный комментирует...

а как у него с локалью KOI8-R? или это привязано к libtorrent?

Конищев Дмитрий комментирует...

Анонимный, с локалью, отличной от UTF-8 пока туговато. :( libtorrent упорно создает файлы с именами в UTF-8. Пока что этим вопросом вплотную не занимался, т. к. сейчас мало у кого не UTF-8.

А deluge у вас нормально работает? Если да, то, скорее всего, это вполне решаемая проблема, т. к. deluge тоже использует libtorrent-rasterbar. Спрашиваю потому, что у меня deluge падает, если попытаться запустить ее с локалью, отличной от UTF-8.

h4tr3d комментирует...

Развязать ядро и GUI нужно... имхо, куда удобнее запустить демон при старте системы, а потом клиентом контроллировать что там происходит. Бывает свет рубают (упса нет), попросить по телефону домашних включить комп не проблема, но говорить заходить учетную запись что бы заходить и запускать программу скачивания... неочень.

Анонимный комментирует...

Какие нужны библиотеки?

GTK+
libtorrent с http://www.rasterbar.com/products/libtorrent/
libconfig с http://www.hyperrealm.com/libconfig/libconfig.html
Что ещё?

Какие нужны версии?

Stedy комментирует...

На мой взгляд, многих пользователей, которые с радостью перешли бы на ваш клиент, отпугивает тот факт, что вы не гарантируете дальнейшего развития проекта.

Конищев Дмитрий комментирует...

> Какие нужны библиотеки?

libboost 1.34-1.37
libconfig-1.3
libgtkmm-2.4
libtorrent-rasterbar 0.13

В ближайшее время постараюсь добавить поддержку libtorrent-rasterbar 0.14.

Stedy, согласен. Но я уж лучше не буду обещать и буду развивать, чем пообещаю и по какой-либо причине потом откажусь от него.

Целью данной статьи было проинформировать заинтересованных людей, что есть такая софтина. Если она их устраивает уже сейчас, то они смогут начать пользоваться ей и отсылать мне багрепорты. Если кого-то Flush пока не устраивает, но заинтересовал, то ему ничего не стоит, к примеру, подписаться на http://sourceforge.net/ по RSS или E-mail на новости проекта и подождать, пока во Flush появится весь необходимый ему функционал.

Wizard комментирует...

Спасибо, нужно будет попробовать.

Конищев Дмитрий комментирует...

Добавил поддержку libtorrent-rasterbar 0.14.1. Теперь пакеты собраны именно с этой версией.

Maxkon комментирует...

KTorrent лично мне нравится тем, что он умеет качать торренты из новостных лент. А Flush могёт?

Конищев Дмитрий комментирует...

Maxkon, нет, не могёт. :) Пока что добавляю в него тот функционал, который считаю наиболее нужным, и для которого требуется по-меньше времени на реализацию, чтобы клиент как можно быстрее приобрел необходимый минимум функций, который требуется пользователям вроде меня. Лично мне автоматическое скачивание торрентов по RSS совсем не нужно, т. к. я пользуюсь только закрытыми трекерами, поэтому пока что подобного функционала ждать не стоит.

Kirikaza комментирует...

Я перепробовал различные Torrent-клиенты с GUI: как громадины Azureus и Deluge, так и более легковесные вроде Lince.
В итоге остановился на transmission, в котором вообще нет GUI. Висит себе демон и никому не мешает. Интерфейс к нему в виде командной строки и через Web. Получается очень удобно! А вам было бы, наверное, весьма интересно изучить варианты взаимодействия программ. =)

Конищев Дмитрий комментирует...

Kirikaza, это вы о DBus? Да, согласен, далеко не лучшее решение. Все никак не дойдут руки до "UNIX: взаимодействие процессов" Стивенса - никак не могу найти ее в печатном виде. Может быть, вы посоветуете что-нибудь другое? :)

Анонимный комментирует...

Было бы неплохо чтобы программа могла работать со случайными портами, а не с указанными пользователем

Анонимный комментирует...

Клиент хороший, буду пробовать...

Хочу поддержать запрос на появление IP фильтра, потому как в Наших краях (Нижний Новгород) разделение на внешнюю сеть и региональный пиринг пока ещё очень актуально...

Анонимный комментирует...

RSS
Странно, ведь именно закрытые трекеры и практикуют директлинковые-рссленты. Единожды настроив правила, вы будете получать новые эпизоды любимых сереалов, вообще не заходя на эти трекеры)

Denis комментирует...
Этот комментарий был удален автором.
Denis комментирует...

хотелось бы:
- что бы торенты можно было объеденять в группы или хотя бы по цветам а еще было бы не плохо добавить таймер
вот я постоянно качаю для друзей и знакомых фильмы тощо затем когда я все это залил на флешку или диск мне такой облом искать из списка то что мне уже не нужно а так бы я бы видел или по цвету или по группе или оно бы само грохалось это возможно ? :)
(хотя бы в настройках такая возможность была это было бы замечательно)

Анонимный комментирует...

Спасибо за клиент и проделанную работу! Функционала, конечно, маловато, но имхо это вопрос времени...
Скажите, можно ли присоединиться к разработке? Опыт программирования есть.

Конищев Дмитрий комментирует...

> Скажите, можно ли присоединиться к разработке? Опыт программирования есть.
Если вы готовы писать понятный, легкий в сопровождении и расширении код, то почему бы и нет - буду рад помощи. Пишите на email - договоримся.

Malefic комментирует...

Отличная софтина, Дмитрий!
Очень не хватает ограничений скоростей для конкретного торрента!

Sergey комментирует...

Скажите , Дмитрий а с libtorrent-rasterbar 0.14.4 будет работать?

Конищев Дмитрий комментирует...

> Скажите , Дмитрий а с libtorrent-rasterbar 0.14.4 будет работать?
Да, будет.

Анонимный комментирует...

Здравствуйте Конищев Дмитрий, мне понравился Flush своей лёгкостью и функциональностью, но очень не хватает функции отключения компьютера при завершении загрузок (как в utorrent под Windows). Возможно ли это реализовать в будущих версиях Flush?

raven128 комментирует...

с некоторого неидентифицируемого момента flush перестал запускаться. при вызове через консоль показывает следующее:
(flush:12399): libglade-WARNING **: unknown property `orientation' for class `gtkmm__GtkVBox'

(flush:12399): libglade-WARNING **: unknown property `orientation' for class `gtkmm__GtkVBox'
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
Aborted

ОС Ubuntu 8.10 x64

Анонимный комментирует...

я новичек и не понял как запустить эту красоту в графическом режиме. Хочется взглянуть своими двоими.

Конищев Дмитрий комментирует...

Анонимный, а в чем именно проблема и какой у вас дистрибутив?

Анонимный комментирует...

в ubuntu 9.04 собрался flush-0.7.1 но после запуска не появляется окна. Нужно ли вводить дополнительные параметры --display

Конищев Дмитрий комментирует...

Никаких ошибок не выдает? А какой у вас менеджер окон? Он поддерживает трей? По умолчанию Flush запускается свернутым в трей.

Анонимный комментирует...

Хотелось бы возможность смены идентификации клиента. Из опробованных клиентов под linux меня устроил только Deluge, но он не переименовывает скачиваемые файлы :( Ваш клиент понравился, всё что мне нужно в нём присутствует, но на одном закрытом трекере он не внесён в список разрешённых, а хотелось бы качать именно им... Администрации написал с просьбой включить клиент в список разрешённых, но пока тишина.

Анонимный комментирует...

Немного покопавшись в исходниках захардкодил идентификатор другого клиента и теперь могу пользоваться Flush'ем, но всё же хотелось бы видеть опцию смены идентификатора в программе, а не патчить исходники каждый раз при выходе очередной версии.

Dozer комментирует...

Поставил. Программка понравилась.

Конищев Дмитрий комментирует...

Анонимный, хорошо, сделаю. Кстати, не подскажете список идентификаторов, которые принимает любой трекер (никогда с такой проблемой не сталкивался)?

Flaresun (Анонимный) комментирует...

Из Ваших исходников
libtorrent/src/identify_client.cpp
148 строка
За буковками обычно следует номер версии и какие-то произвольные символы (отличаются между сессиями).
Ну самые распространённые (разрешённые) клиенты это, наверное, uTorrent и Azureus, версии текущие.

Антон комментирует...

фича подмены идентефикатора клиента будет означать то, что на всех уважающих себя приватных трекерах flush будет всегда среди запрещинных до скончания веков, ибо это идеологически неправильная вещь.

анониму я бы предложил все-таки подождать ответа администрации нужного ему трекера.

Конищев Дмитрий комментирует...

Антон, спасибо за замечание. В таком случае, наверное, действительно лучше не реализовывать подобный функционал.

Flaresun комментирует...

Антон, flush будет в запрещённых, если в нём будут какие-нибудь фичи для отсылки неверных данных по скачанному/отданному трафику, либо обнаружится какой-нибудь досадный баг, а идентификатор к этой информации отношения не имеет. Тем более, если он будет слать идентификатор другого клиента, то что будут блокировать на трекере, все существующие клиенты? :)

Анонимный комментирует...

Спасибо за прогу, в ubuntu попробовал несколько разных торрент клиентов, но ни один из них не хотел раздавать уже скачанное, а Flush подхватил сразу, при всех тех же начальных условиях.

Только не добавилась иконка программы в главное меню, но это мелочи.

Отдельно спасибо за возможность выбирать необходимые файлы в дереве загружаемых файлов.

Константин.
Версия 0.7.2

sne комментирует...

Огромное спасибо Вам за замечательный torrent клиент Flush. Это лучший клиент под GTK, спасибо. Очень не хватает web интерфейса, впрочем спасает возможность управления им из командной строки :)
Еще раз спасибо, за замечательную программу.

Анонимный комментирует...

Ubuntu 9.04
Flush 0.8
Не срабатывает ограничение скорости скачивания из контекстного меню в трее.
Если поставить закачки на паузу, а потом стартануть, тогда ограничение вступает в силу.

И, как мне кажется, программа неверно рассчитывает предполагаемое время скачивания. Есть параметр скорость скачивания, а есть скорость скачивания данных. Второй меньше. Если считать по нему, то время получается более близкое к реальному, а если по первому, то к тому что программа рассчитывает.

Спасибо еще раз за программу. Константин.

Конищев Дмитрий комментирует...

> Не срабатывает ограничение скорости скачивания из контекстного меню в трее.
Если поставить закачки на паузу, а потом стартануть, тогда ограничение вступает в силу.

Тут вопросы к libtorrent-rasterbar. Попробуйте написать багрепорт автору библиотеки. Сейчас попробовал - у меня все работает, поэтому сам багрепорт написать не могу.

> И, как мне кажется, программа неверно рассчитывает предполагаемое время скачивания. Есть параметр скорость скачивания, а есть скорость скачивания данных. Второй меньше. Если считать по нему, то время получается более близкое к реальному, а если по первому, то к тому что программа рассчитывает.
Только что проверил - время скачивания расчитывается на основе скорости скачивания данных.

Дозер комментирует...

Замечательная программка. Но вот что-то я не нашел возможности задавать количество одновременно скачиваемых торентов :(

MusicMan комментирует...

Как уже заметили выше, очень не хватает веб-интерфейса для удаленного добавления торрентов. А так клиент очень даже не плох! Респект и увага афтару!

ansdim комментирует...

Давно искал нечто подобное. К сожалению запустить не смог.
OS Gentoo; flush-0.8;
$ flush
W: Создание сессии Flush завершилось неудачей. Не удалось получить адрес DBus сессии.
# /etc/init.d/dbus status
* status: started
$ dbus-launch
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-CcwaOHJWbI,guid=ef35c084d45d262395a310cc4b07e804
DBUS_SESSION_BUS_PID=8645
$ locate dbus-launch
/usr/bin/dbus-launch

ansdim комментирует...

Иногда ошибка выглядит так

$ flush
W: [Ошибка DBus.] Failed to execute dbus-launch to autolaunch D-Bus session

Возможно не хватает файла
/etc/dbus-1/system.d/flush.conf

Конищев Дмитрий комментирует...

ansdim, вот здесь была похожая проблема. Возможно, решение подойдет и вам.

ansdim комментирует...

Спасибо за быстрый ответ. Сейчас запускаю flush через flush-start
===================================
#!/bin/bash
# Avoid relying on autolaunch to #improvise D-Bus sessions for each process
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
eval `dbus-launch --sh-syntax --exit-with-session`
fi
/usr/bin/flush
=======================================
Написал ebuild для инсталяции flush под gentoo.
http://bugs.gentoo.org/show_bug.cgi?id=294016

Анонимный комментирует...

Спасибо огромное за чудесную программу. Я надеюсь в будущих версиях будет реализована поддержка очереди. И "Url источника" ничего не показывает. В остальном всё супер.

Конищев Дмитрий комментирует...

Анонимный, "Url источника" показывает только в том случае, если в торренте содержится эта информация. Не все сайты записывают ее в torrent-файл.

Дозер комментирует...

Дмитрий. Будет-ли в новых версиях возможность задавать количество одновременно скачиваемых торентов, а также поддержка очереди?

ansdim комментирует...

'И "Url источника" ничего не показывает.'
Подтверждаю: на некоторых торентах Url источника не показывается. Примеры:
http://kinozal.tv/
Url источника может быть в различных полях. Если эта информация в поле 49 - URL будет показан коректно. Если в поле 39 - прблема. Vuze показывает информацию в любом случае. Надеюсь в следующей версии будет исправлено.

Конищев Дмитрий комментирует...

> Дмитрий. Будет-ли в новых версиях возможность задавать количество одновременно скачиваемых торентов, а также поддержка очереди?
Дозер, пока что не думал об этом, т. к. мне оно как-то и не нужно вовсе. Посмотрим, может быть и сделаю.

> ... Подтверждаю: на некоторых торентах Url источника не показывается. Примеры: http://kinozal.tv/ ...
ansdim, скачал сейчас торрент с кинозала - он помещает URL в поле comment. В спецификации про это поле сказано: "(optional) free-form textual comments of the author (string)". Т. е., в принципе, там может быть все что угодно вплоть до URL домашней странички BitTorrent-клиента, которым данный торрент создавался, так что это довольно спорный вопрос, стоит ли отображать URL из этого поля.

Дозер комментирует...

очень надеюсь что реализуете. Так как функция полезна, особенно тем у кого канал не очень широк. К примеру я качаю несколько фильмов. В настройках ставлю одновременную скачку не более одного торента и у всех торентов есть порядковый номер и они качаются в соответствии с этим номером. тоесть по очереди. очень удобно. А в данный момент приходится ставить торенты на паузу и постоянно мониторить скачался ли текущий торент что-бы запустить следующий :(
Раньше использовал uTorrent. но гонять его под вайном не гуд

Дмитрий комментирует...

Очень не хватает возможности ограничения скоростей скачивания и раздачи отдельного торрента, а также возможности добавления пиров вручную.

Если это возможно, добавьте пожалуйста.

P.S.: Ну а очередь закачки и вправду очень полезная штука, жаль что ее пока нет :)

ansdim комментирует...

"скачал сейчас торрент с кинозала - он помещает URL в поле comment. В спецификации про это поле сказано: "(optional) free-form textual comments of the author (string)". Т. е., в принципе, там может быть все что угодно вплоть до URL домашней странички BitTorrent-клиента, которым данный торрент создавался, так что это довольно спорный вопрос, стоит ли отображать URL из этого поля."
Аргументы за отображение URL из поля comment:
1 vuze поступает именно так
2 кроме кинозала есть другие трекеры, которые поступают именно так
3 можно проверить поле URL в случае его отсутствия отобразить поле comment

Конищев Дмитрий комментирует...

ansdim, ОК. Я уже вообщем-то это сделал (сейчас в ветке next, а впоследствии перейдет в версию 0.9).

jk комментирует...

Клиент очень понравился, легковесность на лицо, хотелось бы увидеть функцию хранилища. переноса после закачки в другую директорию.

Дозер комментирует...

так ведь есть такое.

Gadel комментирует...

Уважаемый Дмитрий, у меня к Вам небольшая просьба. не могли бы вы добавить в свой торрент клиент такую функцию как добавление торрента без перепроверки при наличии указанных файлов? Часто создаю весомые раздачи и хотелось бы не ждать лишний раз тем более точно знаю, что файлы из моей раздачи не повреждены и никаких проблем с раздачей не предвидится. Также хотелось бы увидеть такую функцию, как перепроверка данных после скачивания.
Заранее спасибо!
з.ы. + вебморда к этому клиенту в виде плагина/модуля была бы очень кстати.

Конищев Дмитрий комментирует...

Gadel, такую возможность я добавить не могу, т. к. libtorrent, которую использует Flush, не позволяет это сделать, а лезть в ее исходники я не могу, т. к. Flush должен работать с той версией libtorrent, которая установлена в дистрибутиве. По поводу проверки данных после скачивания - достаточно щелкнуть правой кнопкой по торренту и активизировать пункт меню "Recheck".

Анонимный комментирует...

Опыт работы в linux небольшой, но уже успел попробовать практически все BitTorrent`ы (кроме rtorrent). Flush — очень понравился. На удивление быстрый, нетребовательный к ресурсам, плюс весьма красивый на мой вкус интерфейс. Пока не разобрался с ограничением по общей скорости отдельных трекеров раздачи/скачивания. Надеюсь на продолжение этого проекта. Поставил Flush0.8 как основной рабочий торрент клиент. Дмитрию за эту программу большое спасибо!

Анонимный комментирует...

Спасибо Вам большое за Вашу работу, долго искал реально работающий клиент на C/C++ без привязок к "Питонам" и прочему зверью.

Анонимный комментирует...

Дмитрий, в виду событий с torrents.ru появились 2 вопроса: есть ли возможность быстро поменять адрес трекера в нескольких торентах? После ручной замены адреса трекера при перезапуске flush он сбрасывает эти настройки. Это правильно?

Конищев Дмитрий комментирует...

> есть ли возможность быстро поменять адрес трекера в нескольких торентах?
Да, нужно в файлах ~/.flush/torrents/*/torrent.conf заменить в строке "trackers = ..." трекеры на те, которые вам нужно.

> После ручной замены адреса трекера при перезапуске flush он сбрасывает эти настройки. Это правильно?
Нет не правильно, но эта ошибка уже давно исправлена в Git. Новую версию ради нее я пока что не стал делать.

Анонимный комментирует...

Дмитрий, спасибо за полезную программу!
А очередь закачек уже есть?

Борис комментирует...

Дмитрий, приветствую Вас! Выскажу пожелание: очень бы хотелось, чтобы в будущем Flush умел (опционально) создавать резервную копию *.torrent, наподобие vuze: *.torrent & *.torrent.bak,(к примеру), а так-же, при удалении торрента с раздачи не удалять его с диска (flush, при добавлении нового torrent-а, автоматом кладёт его в ~/.flush/torrents/* - хотелось-бы иметь возможность выбора места сохранения .torrent-файлов, а не только закачиваемых данных: по примеру vuze. Может, пожелание покажется странным, но, по-моему, это очень удобная функция: не нужно держать n-ое кол-во торрентов в окне, на раздаче, без этих "возобновить-приостановить": надо - выставил, нет - убрал из окна долой, но .torrent не потерялся. Это лишь мой опыт "общения" с клиентами, держу все данные на отдельном разделе, к примеру /media/multimedia/torrents/*.torrent и /media/multimedia/cinema - собственно, эти фичи vuze и заставляют использовать его в качестве основного, несмотря на его монструозность и избыточность для многих, и для меня в том числе. Спасибо! Успехов!

Анонимный комментирует...

Большое Спасибо за Flush.
Единственно, никак не могу настроить ip-фильтрацию.Модуль нашел, ввел диапазоны разрешенных для нашей сети ip. они у меня в количестве трех штук:
---------------------------
0.0.0.0-10.3.0.0
10.4.0.0-10.10.10.0
10.10.10.0-255.255.255.255
---------------------------
Но смотрю - flush все равно качает из внешки. Не могли бы помочь.
Большое Спасибо, заранее!

Конищев Дмитрий комментирует...

По-внимательнее прочитайте, как работает модуль. Чтобы он фильтровал IP-адреса так, как вы хотите, первым правилом должно быть правило, запрещающее все IP-адреса в диапазоне 0.0.0.0-255.255.255.255, а уже затем ваши разрешающие правила.

Анонимный комментирует...

Ух ты!
Огромное Спасибо за такой быстрый ответ!
Идею вроде уловил, но все-таки не доконца. Пробовал поэкспериментировать - получилось только все забанить. А вот конкретный диапазон разрешить, а остальные забанить - не получается, увы. Не могли бы подсказать, что ввести, чтобы у меня был разрешен диапазон только от 10.3.0.0-10.4.0.0, а весь остальной диапазон - был запрещен?
Спасибо за помощь.

Конищев Дмитрий комментирует...

Как-то так. Только необходимо сказать, что libtorrent настраивает эти фильтры для пиров - если у вас, к примеру, трекер не локальный, то анонсы на него все равно будут идти, но с внешними пирами соединений не будет.

Анонимный комментирует...

приветствую вас Дмитрий. При попытке установить ./configure выдал мне
configure: error: Could not link against !
выше по тексту было:
checking for CFPreferencesCopyAppValue... no
checking for CFLocaleCopyCurrent... no

а в логе было:
conftest.cpp:11:42: error: CoreFoundation/CFPreferences.h: No such file or directory

conftest.cpp:11:37: error: CoreFoundation/CFLocale.h: No such file or directory

Ну это то, на что я обратил внимание, может там еще что было...

Дебиан Ленни с Гномиком. Кор ту дуо. и386.
В чем предположительно может быть трабл?
Спасибо.

Конищев Дмитрий комментирует...

Анонимный, судя по предоставленной вами информации, это проблема с Boost'овскими скриптами для autotools. Flush'у нужны пакеты libboost-filesystem-dev, libboost-signals-dev и libboost-thread-dev. Попробуйте поставить их - возможно, после этого данные скрипты будут работать нормально.

miig комментирует...

Решил поставить FLUSH.
Получил следующую ошибку:
checking for libconfig... configure: error: Package requirements (libconfig++ >= 1.3) were not met:

No package 'libconfig++' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables libconfig_CFLAGS
and libconfig_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Хотя перед этим как раз libconfig установил.

Конищев Дмитрий комментирует...

miig, видимо, вы поставили только libconfig, а libconfig++ - нет. А вообще, можете скачать bundle-версию - в нее включены и libconfig и libtorrent.

miig комментирует...

Попробовал бингл версию. Та же ошибка.
./configure -prefix=/usr --disable-bundle-package --enable-system-libconfig

PS. Ладно поищу в инетах libconfig++.

miig комментирует...

Понял свои ошибки. Наконец смог поставить.
$ ./configure --prefix=/usr --enable-system-libtorrent
$ make
# sudo make install

Правда, он почему-то не запускается.
Пробоую в консоли:
$ flush

И никакого эффекта, не сообщений не запуска flush.

miig комментирует...

Забыл добавить
у меня стоит - libtorrent-rasterbar-0.15.

miig комментирует...

Попробовал даже удалить стоящий у меня libtorrent и поставить полность ваш flush бингл.

$ ./configure --prefix=/usr
$ make
$ sudo make install

Тот же самый эффект. Flush Не запускается.

miig комментирует...

Извиняюсь, за столь частые коментарии. Это последнее.
Хотел лишь сказать, что всё заработало. Большое спасибо за столь отличную программу.

miig комментирует...

После нетбука решил поставить flush и на стационар с генту:
К сожалению сборка прервалась во время make на ошибке: http://paste.org.ru/?myzlah

krf3 комментирует...

Дмитрий, спасибо за замечательный продукт. Юзаю начиная с 0.4 версии.

Вопрос:
если ли возможность реализовать фичу выключения компа после докачки.
Ну или, как альтернатива, создать файл-идентификатор в папке ~/flush/ при завершении всех закачек.

Конищев Дмитрий комментирует...

krf3, возможность есть. Времени нет. :( К сожалению, просто не могу сейчас выделять время на развитие Flush. Поддреживать стараюсь, но развивать - нет. Если у вас есть навыки программирования, то можете отфоркаться на github и реализовать данный функционал, а я его тогда уже вмерджу в основную ветку.

Анонимный комментирует...

Наверное глупый вопрос, но я что-то не могу отыскать как перенести место закачки торента в другую папку :( Как это делается в Flush?

Конищев Дмитрий комментирует...

Анонимный, на данный момент никак. Или, если очень надо, можно руками.

Анонимный комментирует...

Поддержка прокси в недалёкой перспективе не планируется?

Конищев Дмитрий комментирует...

Нет, не планируется. Разве что кто-то реализует ее и сделает pull request на github.

Анонимный комментирует...

aptosid, Gnome 2.30.2 Flush 0.9.9
Использую пока Deluge не нравится в ней что не отображает в ошибках слетевшие раздачи.В "подробностях" лазать надоело.
Поставил сегодня 4 загрузки работает нормально. Что будет с 300 раздачами посмотрим. Не очень удобно что каждый файл торрента пишется в свой каталог с непонятным названием. Можно добавить пункт "Активные" Но это все не актуально. Для меня главное чтоб в сотню каталогов (на разные диски) загружались файлы и раздавались.Сортирую в начале загрузки.
Спасибо. Удачи.

go8765 комментирует...

скажите пожалуйста - в чём разница между пунктами левого меню: раздача и отдача; а так же приём и приём данных; роздано и роздано данных ? спасибо :)

go8765 комментирует...

и ещё... если вас не затруднит - напишете к ниму справку (желательно полную и с картинками) (или вики, или faq хотябы).
p.s. спасибо за программу :) (как по мне - она если не лучшая - то одна из лучших точно.)

Конищев Дмитрий комментирует...

Раздача - торренты, которые раздаются, но никто пока что у вас их не качает. Отдача - торренты, которые раздаются, и с которых кто-то качает.

"прием данных" - прием данных самого торрента
"прием" - общая скорость приема данных
"прием" = "прием данных" + "прием overhead-данных (данные BitTorrent протокола и т. п.)"

go8765 комментирует...

подскажите - как в flush запихнуть ipfilter - но так что-бы сразу все адреса - а не вручную ?

Конищев Дмитрий комментирует...

На данный момент разве что только путем записи их в ~/.flush/daemon.conf.

go8765 комментирует...

шифрования - я так понимаю - пока тоже нету ?

Конищев Дмитрий комментирует...

Да, шифрования пока что нет.

gildedgod комментирует...

Простой, и, одновременно сложный вопрос - вот накидал я в список 100500 торрентов, хочу чтобы оно потихоньку качалось себе, по 3 файла за раз. Как это сделать? Flush норовит качать одновременно все файлы в спике, не зависимо от их числа. При этом нигде нет настройки "максимальное количество скачиваемых торрентов за раз"....

Конищев Дмитрий комментирует...

Пока что никак - очередей в Flush в данный момент нет.

go8765 комментирует...

поскажите, почему при включённом ip filter забивается внешний канал ?
диапазон вроде верно указан...

Конищев Дмитрий комментирует...

go8765, а по-подробнее? У меня все работает номально. Какие диапазоны и как вы указали? Может быть, все-таки не правильно? Если правильно, попробуйте посмотреть сниффером, куда лезет Flush - если на запрещенные адреса, то это повод обратиться к разработчику libtorrent-rasterbar.

go8765 комментирует...

я к сожалению не умею пользоваться снифером (впрочем, на выходных я немного почитаю про это и может удасться сделать - то что вы сказали). диапазон указан верно по-моему http://alkad.org/viewtopic.php?f=178&p=25856#p25856

Конищев Дмитрий комментирует...

Вы сделали все наоборот. Поменяйте везде значение block на противоположное, и тогда будет правильно.

go8765 комментирует...

http://storage4.static.itmages.ru/i/11/0417/h_1302996615_a204bf492b.png
это разве неправильно настроееный фильтр (если я вас правильно понял)?

Конищев Дмитрий комментирует...

Ну, судя по вашему первому сообщению, вы хотели запретить весь внешний трафик и разрешить только локальный. В правилах, указанных вами, вы, наоборот, запрещаете весь локальный (к примеру, 10.*.*.*) трафик, и разрешаете внешний. Или я просто неправильно вас понял - чего именно вы хотите добиться.

Анонимный комментирует...

Flush 0.9.10 в Linux Mint 11 перестал запускаться после обновления libtorrent-rasterbar 0.15.6+svn.r5675-0ubuntu2~natty

Конищев Дмитрий комментирует...

Что говорит?

Анонимный комментирует...

(flush:25908): GLib-WARNING **: /build/buildd/glib2.0-2.28.6/./glib/goption.c:2132: ignoring no-arg, optional-arg or filename flags (8) on option of type 0

(flush:25908): GLib-WARNING **: /build/buildd/glib2.0-2.28.6/./glib/goption.c:2132: ignoring no-arg, optional-arg or filename flags (16) on option of type 4

(flush:25908): GLib-WARNING **: /build/buildd/glib2.0-2.28.6/./glib/goption.c:2132: ignoring no-arg, optional-arg or filename flags (8) on option of type 0
flush: symbol lookup error: flush: undefined symbol: _ZN10libtorrent7sessionC1ERKNS_11fingerprintEii

Конищев Дмитрий комментирует...

А откуда к вам приехал этот пакет? Он явно не из Ubuntu. Причем, судя по тому выводу, с которым падает программа, там какой-то странный libtorrent, у которого поменялся ABI, но при этом soname у библиотеки не изменился - такое впечатление, что это просто nightly-сборка.

P.S.: можете попробовать пересобрать Flush с этой версией libtorrent - должно помочь, если конечно они еще и API не поменяли...

Анонимный комментирует...

Этот пакет приехал с launchpad (hydr0g3n), при установке qBittorrent. Откатился на предыдущую версию libtorrent, теперь flush работает. Дмитрий, спасибо Вам за отличную программу! Вот только жаль, что не хватает времени, как вы писали, на дальнейшее развитие. Надеюсь на Вашу поддержку проекта.

Анонимный комментирует...

А можно ли реализовать отдельную папку для недокачанных файлов торрента? Поясню зачем. У меня, например, при 4 гигах памяти половина отдана под tmpfs. В ней aMule и Transmission создают свои папки и качают туда файлы. После того как файл целиком закачан, он переносится (самим клиентом) в соответствующую папку в папке Video на винт и уже раздается оттуда. При такой схеме торрент-клиент может при скачивании сколько угодно насиловать диск операциями выделения места/записи, так как недокачанные файлы раположены в памяти.

Конищев Дмитрий комментирует...

На данный момент я приостановил развитие проекта. Поддерживать - поддерживаю, но на развитие времени совсем нет. Если сделаете - с удовольствием приму ваш коммит. Но реализовать в ближайшее время точно не смогу. :( Извините.

Анонимный комментирует...

По вопросу с недокачанными файлами понятно. Тогда возник еще вопрос - какая стратегия используется при выделении свободного места под файлы при начале скачивания. Некоторые клиенты стараются выделить место сразу под весь файл на диске и писать довольно большими блоками (накапливая данные в памяти), чтобы снизить нагрузку на винт. Глянул в файлы конфигов - там об этом ни слова. Может быть librasterbar (или что за это отвечает) имеет свои конфиги?

Конищев Дмитрий комментирует...

В Flush используются "дырявые" файлы. Конфигов у libtorrent-rasterbar нет - можно задавать только на уровне исходного кода.

Анонимный комментирует...

Прошу прощения, что снова пишу сюда, а не в багтрекер/фичреквест. Продолжаю составлять мнение о программе. Обнаружил, что в информации о торренте поле "URL источника" содержит ссылку на профиль релизера, хотя логичнее было бы делать ссылку на страничку самого торрента. В данном же случае непонятно, как качать сериалы и другие обновляемые торренты, если из программы невозможно перейти на страницу торрента и скачать обновившийся торрент-файл.

Конищев Дмитрий комментирует...

Данный URL я беру из специального поля в torrent-файле. Содержимое этого поля полностью на совести torrent-трекера. Многие действительно записывают туда URL страницы, с которой был скачан торрент, некоторые, как в вашем случае - менее полезную информацию.

Анонимный комментирует...

Автору программы.
С интенсивного развития опенсурсного проекта одновременно начинается его самоубийство. Не вздумайте реализовывать всё то, о чём вас просят пользователи, иначе ваша программа превратится в монстрообразное говно занимающее много места на харде, тянущее много зависимостей. Всё о чём просят пользователи пусть пишут сами, или если вы собираетесь реализовывать, то делайте это отдельными модулями, только не пихайте это всё в основной пакет.

Анонимный комментирует...

uUbuntu 10.04
Поставил Flush из реппо
при запске выдает ошибку
error while loading shared libraries: libtorrent-rasterbar.so.5: cannot open shared object file: No such file or directory
Что делать ???

Ruslan Lagashkin комментирует...

Хорошая программа.
Как уже говорили, не хватает веб-интерфейса.

SolarRay комментирует...

Привет!
В окне файлы, перестали отображаться каталоги, файлы показываются одной кучей без разбиввки.
Это случилось,толи после какого то обновления, толи после того, как что то удалил.
Подскажи какая библиотека/версия используется для этого?(отображения каталогов)
flush: 0.9.12
ArchLinux 64
Kernel: 3.6.8
Window Manager: LXDE
libtorrent-rasterbar: 0.16.5

Dmitry Konishchev комментирует...

Используется GTK. Возможно, в ArchLinux кто-то перевел Flush на GTK 3. Я когда-то начал копать в эту сторону, но до конца не довел - https://github.com/KonishchevDmitry/flush/tree/gtk-3.0 В данный момент я проект не поддреживаю - к сожалению, совершенно нет на это времени.

WebGraf комментирует...

К сожалению flush не умеет раздавать свои торренты. Создал торрент, добавил, а он файл не видит и не стает на раздачу. В то время как добавив в другой клиент торрент проверка успешно выполняется и раздача запускается.

Из-за этого огромного бага использовать данный, вроде как неплохой софт, не могу.

Dmitry Konishchev комментирует...

WebGraf, а вы уверены, что вы указали Flush качать данный торрент именно в ту директорию, где находится ваш файл?

WebGraf комментирует...

Да. И что странно, добавляю в flush торрент созданный не мною, но если файл (фильм у меня на пк) проверку выполняет.

WebGraf комментирует...

Наличие файла в каталоге
http://i53.fastpic.ru/big/2013/0123/88/18c4db54b73ee09a4e8b0e41a4291088.png
добавление
http://i53.fastpic.ru/big/2013/0123/ba/1c1b86fa683c7b4efe6956215f1ec9ba.png
после проверки
http://i53.fastpic.ru/big/2013/0123/4a/df03c7fdddd068f3cec6462273d0424a.png

По последнему изначально стоит 0%. Вчера я тестировал и запустил раздачу сам себе из другого клиента. Flush скачал 3%.
Сегодня снова скопировал оригинальный avi-файл перед выполнением всех действий чтобы убедится что файл полный.

WebGraf комментирует...

Откуда эти 3%, где они записаны?
И почему именно с моими торрентами так, а чужие добавляю без проблем.

Вот кстати в логе нашел
A_Haunted_House_CamRip__[kinoreliz.net]__.avi url seed () failed: unsupported URL protocol.

WebGraf комментирует...

Как я понял клиент не скачивает просто в указанную папку. Вероятно он только перемещает после.

WebGraf комментирует...

Совершенно запутался.
1. удалить торрент + данные - удалило только торрент
2. при добавлении торрента (моего), если файл был уже скачал через flush все ок.
3. если файл не был скачан ранее через flush но имеется на пк, клиент отказывается его видеть.

WebGraf комментирует...

Разобрался. find -name рулит!
Я был прав. Все файлы пишутся в директорию /home/user
И видимо только после копируются в указанную. Но зачем.

WebGraf комментирует...

Ощущение что клиенту прав не хватает.
Вариант 1.
файл перемещаю в /home/webgraf
Добавляю торрент, указав /home/user и после скопировать в /media/films/2013
Идет проверка и пишет неудалось скопировать из /home/webgraf в /home/webgraf, файл существует.

Вариант 2.
файл перемещаю в /home/webgraf
Добавляю торрент, указав /home/webgraf
После добавления в опциях выбираю скопировать в /media/films/2013
Идет проверка, файл копируется удачно.
Раздача идет из /home/webgraf. Файл из /home/webgraf удалить нельзя.

Мои права:
ls -l /home | grep webgraf
drwxr-xr-x 51 webgraf webgraf 4096 Янв 23 22:34 webgraf
ls -l /media/films | grep 2013
drwxrwxr-x 2 webgraf webgraf 4096 Янв 23 22:34 2013
ls -l /media | grep films
drwxr-xr-x 17 webgraf webgraf 4096 Янв 23 02:04 films

WebGraf комментирует...

Нашел как руками указать путь. Вопрос снят

Flash комментирует...

клиент запущен и работает, при добавлении нового торрент файла открывается вторая копия програмы и.т.д. как можно реализовать что бы всё происходило только в уже запущенном flush

Dmitry Konishchev комментирует...

Flash, убедитесь, что вы запускаете каждую копию Flush в пределах одной и той же пользовательской сессии D-Bus.

Flash комментирует...

как это можно реализовать непосредственно в системе "запускать Flush в пределах одной пользовательской сессии D-Bus"

Dmitry Konishchev комментирует...

Запускать их из под одной сессии X-ов, которые устанавливают одну и ту же переменную DBUS_SESSION_BUS_ADDRESS. У вас точно не патченная версия Flush? Видел у кого-то в GitHub-е версию, которая ломает во Flush работу с D-Bus.

Flash комментирует...

у меня Centos 6.3, flush с репозитория russianfedora. env | grep DBUS_SESSION_BUS_ADDRESS выдаёт DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-vm3ahIHHVx,guid=711b938569178c7274bc1d740000005e
запуск dbus-launch flush без ошибок.

Dmitry Konishchev комментирует...

Да, так и есть - вот тут его сломали https://github.com/RussianFedora/flush/blob/master/flush-dbus2.patch

And комментирует...

Почему то после переноса /home на отдельный раздел, Flush отказывается качать в указанную папку(пробовал разные, на разных разделах), а качает только в ~/ т.е. в домашний каталог.
Система archlinux 64

Андрей Нешта комментирует...

Очень неплохая программка, спасибо автору. Единственное, чего мне не хватает - это возможности самому распределять торренты по группам и задавать этим группам приоритет. Скажите, Дмитрий, есть ли возможность реализовать эти вещи?

Dmitry Konishchev комментирует...

Андрей, я прекратил развитие Flush уже несколько лет назад, поэтому если новые возможности и появятся, то только силами таких как вы. ;)