Несколько месяцев назад я
писал о выходе первой (0.1) версии своего BitTorrent клиента. С тех пор Flush дорос до версии 0.4. Т. к. первую версию, скорее всего, поставить решится далеко не каждый, да и в ней могло не быть каких-либо функций, отсутствие которых помешало бы использовать Flush, я решил, что настало время еще раз напомнить о существовании данного BitTorrent клиента. Я использую его с первой версии и сделал таким, каким, как я считаю, должен быть BitTorrent клиент. Если ваши предпочтения совпадают с моими, то, возможно, он вам придется по душе.
Причины, которые заставили меня написать собственный BitTorrent клиент, я изложил
здесь, так что повторяться не буду. Думаю, лучше всего будет привести список изменений по сравнению с Flush 0.1 и скриншоты, которые зачастую могут сказать гораздо больше, чем любой Changelog. :)
Основные изменения (с полным списком изменений можно ознакомиться, почитав Changelog):
- Создание собственных торрентов;
- Переименование как самого торрента, так и его файлов при добавлении;
- Поддержка не-UTF-8 локалей (Т. к. libtorrent поддерживает только локаль UTF-8, то в первых версиях клиент мог корректно работать только ней. В более поздних версиях мне удалось «обмануть» libtorrent и заставить его работать с другими локалями.);
- Вкладка «Детали», отображающая информацию о выбранном в данный момент торренте.
- Вкладка «Опции», в которой можно изменить список трекеров торрента и включить режим последовательного скачивания (в данном режиме скачивание частей торрента происходит не вразнобой, а последовательно, начиная с первых байтов и заканчивая последними).
- Включение/отключение DHT и восстановление при запуске прошлой DHT сессии.
- Включение/отключение LSD, Peer exchange, UPnP, NAT-PMP и Smart ban.
- Возможность задания приоритета на скачивание каждого файла торрента.
- Пакет с исходными текстами теперь поставляется в двух версиях: обычной и bundle. Bundle отличается от обычной тем, что включает в себя библиотеки libconfig и libtorrent для статической линковки. Это сделано для упрощения компиляции на тех дистрибутивах, которые не содержат данных библиотек.
- Статистика по текущей сессии и за все время.
- Возможность задания команды, которая будет использоваться для открытия файлов торрента.
Скриншоты:
Как и раньше, исходники и deb пакеты для Ubuntu-8.10-i386 и Ubuntu-8.10-x86-64 можно скачать здесь:
http://sourceforge.net/projects/flush/.
комментарии (115)
habrahabr.ru/blogs/ubuntu/50540/
habrahabr.ru/blogs/ubuntu/50631/
habrahabr.ru/blogs/ubuntu/50716/
habrahabr.ru/blogs/ubuntu/51427/
может потом попробую и етот)
у меня deluge с ntfs радела раздавать не хочет вовсе. «checking 0%...»
а как етот клиент в такой ситуации?
Тестировал множество клиентов, остановился на Deluge (http://deluge-torrent.org/ ), пока устраивает все кроме достаточно большой прожорливости к ресурсам (думаю из-за PyGTK
Не компилируется.
Вообщем сделал на скорую руку патч, после применения которого у меня все скомпилировалось с glibmm-2.16.4. Патч можно взять здесь — ifolder.ru/11312835. Для его применения необходимо выполнить команду
patch -p0 < flush-0.4.patch
в директории, в которую вы распаковали архив с исходными текстами (после распаковки архива в ней должна была появится директория flush-0.4).
P.S.: Пока что я проверил компиляцию только с glibmm-2.16.4. Надеюсь, с той версией gtkmm, которая установлена у вас, проблем не будет. Как только появится свободное время, попробую также скомпилировать и с той версией gtkmm, которая установлена у вас (в Debian Lenny).
По поводу Glade… Честно говоря, никогда не был сторонником различного рода «формошлёпства», будь то Glade или MSVC. На мой взгляд, «размазывание» кода по *.cpp и глейдовским *.xml файлам только все усложняет. Я конечно понимаю, что использование Glade дает возможность юзабилистам помогать в разработке приложения, совершенно не зная языка программирования, но вот только стоит ли ради этого повсеместно использовать Glade? К примеру, убирать те же "-1" все равно придется программисту. Юзабилист может разве что помочь нарисовать шаблон, но лично мне было бы проще один раз перегнать этот шаблон в код, чем каждый раз при программировании лезть в Glade, чтобы посмотреть, какие элементы имеет окно, как они называются, и прыгать по различным меню, ища, какие свойства установлены у каждого виджета — в коде же все это сразу же бросается в глаза, т. к. программист специально выделяет (отступами, комментариями) и объединяет в блоки код так, чтобы его потом было удобно читать.
Это из той же серии, что и создание документации в Doxygen: документация должна создаваться не отдельно от продукта, а вместе с ним и находиться в самом коде, т. к. код, в отличие от всего остального, всегда находится в актуальном состоянии.
Естественно, все вышесказанное — ИМХО.
Интерфейс легче сделать и через 2 года поменяйть в длейде чем понимать как оно всё собирается опять.
Но как хотите конечно. ХИГ — ето не правила, ето просто посдказки для тех кто хочет сделать хорошый, легко понимаемый и использованый интерфейс.
весь разметочный мусор и декоративные описания элементов остаются в .glade файле, а в самой программе достаточно вытянуть только то что необходимо для связывания элементов и событий. или даже достаточно просто связать события, а сами элементы в код не вытягивать.
ну и соответсвенно скомпилив однажды программу, можно заниматься спокойно тюнингом внешнего вида интерфейса без излишней перекомпиляции.
Так что не надо про рисовалки.
теперь буду ставить и пробовать :)
P.S.: Предвидя вопрос «Почему пакет, содержащий libconfig, называется libconfigduo?», отвечаю: в репозитории Ubuntu уже существует пакет libconfig, который содержит совсем другую библиотеку. Тот libconfig, который использую я, обычно при сборке пакетов именуют как libconfigduo, поэтому я назвал его именно так.
Насчет фильтров (скачанные, качающиеся и т. п.) тоже согласен — надо будет добавить.
По теме: заинтересовался, буду пробовать.
установилось.
установка ограничения отдачи из трея не плохо бы
настройку бы связанную с шифрованием трафика бы иметь еще.
Эээ… Так есть же — «Set upload rate limit».
> настройку бы связанную с шифрованием трафика бы иметь еще.
Мне вот просто интересно, а зачем? :) Может быть, я что-то не понимаю, но:
1) Если вы опасаетесь того, что вас осудят за скачивание какого-либо нелицензионного контента с трекера, то шифрование здесь не поможет. Если вас захотят уличить в раздаче подобного контента, то достаточно просто с вас что-либо скачать — тут уж шифрование ничем не поможет, т. к. клиент с радостью отдаст все, что у него попросят.
2) Шифрование имеет смысл разве что в том случае, когда провайдер режет BitTorrent траффик. У нас в России, вроде, до этого пока не дошло… Или я отстал от жизни?
>Эээ… Так есть же — «Set upload rate limit».
оказывается есть, но было бы замечательно видить эту самую цифру когда наводишь на иконку в трее, также можно показывать тамже состояние закачек.
у utorrent сделанно отображение в заголовке окна кстати удобно
скорее сейчас нужно приложить особые усилия чтобы сделать неубирающиеся панели, т.к. все закручено на готовые и удобные классы
Хотя исходники тоже могут пригодится — наверняка там можно найти какие-нибудь интересные идеи.
на этом сходство заканчивается.
P. s. Кстати, может действительно стоит связаться с разработчиками дистрибутива Ubuntu? По-моему, очень приятно, когда твоё приложение включают в ОС. Успехов.
Кто же спорит, конечно приятно. :) Надо будет действительно попробовать, хотя, чувствую я, это тот еще квест. :) К примеру, недавно совершенно случайно обнаружил, что версии < 0.4 с точки зрения лицензионной чистоты были некорректны: libtorrent-rasterbar зависит от OpenSSL, у которой лицензия не совместима с GPL в результате чего пользователи не имели права собирать Flush без специального на то разрешения в copyright с моей стороны. :)
Кстати, по поводу больших кнопок. Раз уж вы, как и я, не разделяете общей любви к ним, возможно вам пригодится следующий совет:
Чтобы кнопки были по-меньше можете создать собственную тему оформления на основе стандартной, но уменьшив размеры этих самых кнопок. Я, к примеру сделал это, создав файл ~/.themes/My/gtk-2.0/gtkrc со следующим содержимым:и задал в качестве темы оформления тему My.
Либо, можно воспользоваться какой-нибудь специальной компактной темой, например, Human Compact.
За советы спасибо. ;)
1) Автор не однократно упоминал о том, что у него очень мало времени на разработку, так что лучше подавать большой публике целостную, законченую программу, тогда будет на пару порядков меньше надоедающих запросов о новых фичах и исправлениях багов. Особенно они надоедают, когда нет физической возможности их исправить.
2) На собственном интузиазме может и не выдержать, зато на собственных потребностях довольно таки можно. Программисту проще исправить багу в собственной программе, чем ежедневно её терпеть.
Частенько бывало что она пыталась заново перезакачать мои раздачи, забывала прогресс скачивания торрентов и качала по новой. В какой то версии она вообще разбушевалась, что мне пришлось обратно откатиться, а потом и вообще перейти на жабу.
ЗЫ. Хотелось бы тоже научиться писать программы под GTK, вот только не знаю с чего начать. :(
libtorrent-based rtorrent создаёт также и некачаемые «пустые» файлы. а ваш клиент?
create_torrent_dialog.cpp: In member function ‘void::Progress_dialog::operator()()’:
create_torrent_dialog.cpp:363: error: invalid use of ‘class boost::system::system_error’
create_torrent_dialog.cpp:410: error: invalid use of ‘class boost::system::system_error’
Посмотрел, что там изменилось, вроде бы достаточно изменить на strerror(e.code().value()). Для совместимости конечно придется с препроцессором извращаться и проверять версию буста.
terminate called after throwing an instance of 'libconfig::SettingTypeException'
what(): SettingTypeException
Аварийный останов
Debian Lenny, версия bundled
на
P.S.: в ближайшее время залью весь проект на SourceForge'вский SVN, чтобы больше не приходилось вот таким вот образом исправлять ошибки. =)
s42.radikal.ru/i098/0903/fb/980e11cd2313.png
pastebin.com/m62e48fb
Тогда можно бы сделать в aur flush-{git,svn,csv} и регулярно обновлять и смотреть — пофиксили ли баги или нет.
У вас Xorg создает сессионную шину DBus?
1. Просто необходима опция брать автоматический торренты с определённой папки.
2. Веб также нужен НО разделён на 2 подгруппы Админов и Смертных (без возможности управления торрентами а только их просмотр состояния) (такой опции нет не у одного торент клиента что будет очень хорошо и популярно).
3. Чёрные списки.
4. Те кто не поддерживает шифрование — с них не качать.
Вот пожалуй что для меня важно :)
def window1_window_state_event_cb(self, w, d=None):if (d.changed_mask & gtk.gdk.WINDOW_STATE_ICONIFIED) and (d.new_window_state & gtk.gdk.WINDOW_STATE_ICONIFIED):
self.visibility_toggle()
Я вот так у себя делаю. Python, но так должно работать и для любых других языков
Я вот сейчас попробовал реализовать сворачивание в трей и..., честно говоря, ниасилил. :) Тестировал я на Gnome и на IceWM. Во первых, WINDOW_STATE_ICONIFIED генерируется не только тогда, когда пользователь сворачивает окно, но и тогда, когда он переключается с одного рабочего стола на другой. Понять по данному флагу, что именно произошло (переключение рабочего стола или свертка окна), видимо, не возможно. Причем после переключения обратно на этот же стол Gnome не генерирует никаких сигналов, а IceWM снимает с окна WINDOW_STATE_ICONIFIED + когда я получаю от IceWM сигнал с WINDOW_STATE_ICONIFIED при сворачивании пользователем окна, сделать window->hide() не достаточно, т. к. при этом окно остается на панели задач и приходится перед window->hide() вызывать window->deiconify(), которая опять-таки не гарантирует, что IceWM ее послушается и плюс ко всему порождает очередную порцию сигналов «window-state-event». Да, и при переключении обратно на рабочий стол, на котором находится программа, IceWM в комбинации с window->show() генерирует такие последовательности сигналов, которые просто не поддаются моему пониманию. =)
P.s. достаточно сложно уследить за всем, когда лист переваливает за 100 в моем случае стремится к 1000 ))
torrents.ru/forum/viewtopic.php?t=28999
На данный момент ни Transmission, ни rtorrent, ни Flush не способны решить данную проблему. ktorrent в окне закачки показывает имена правильно, но на диске все равно оказывается то же самое.
Было бы здорово если бы Flush при открытии торрента позволял задать исходную кодировку имен файлов.
Большое Вам спасибо за клиент!
А сложно сделать такую фичу?
А нельзя ли проблему решить на уровне переконвертации этого файла торрента локально?
Когда очередной релиз планируете?