LeechCraftсвободный кроссплатформенный модульный интернет-клиент, включающий в себя браузер, клиент для чтения лент новостей, BitTorrent-клиент, FTP-клиент и другие плагины.

LeechCraft написан на C++ с использованием библиотек Qt и Boost, в качестве системы сборки используется CMake.

АрхитектураПравить

 
Менеджер плагинов

LeechCraft манипулирует абстрактными сущностями. Ими, к примеру, являются:

  • ссылка на торрент-файл,
  • сам торрент-файл,
  • медиа-файл
  • описание поисковой системы в формате OpenSearch.

Это позволяет LeechCraft работать с заранее неизвестными ему объектами, работа с которыми становится возможной благодаря загруженным в данный момент модулям.

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

Сообщения делятся на две категории:

  • Запросы на делегацию сущности. Так, при необходимости плагин может запросить у какого-либо другого плагина выполнение задачи. Например, RSS/Atom-аггрегатор скачивает сами ленты новостей, делегируя ссылки на эти ленты какому-либо плагину, который может их обработать. При этом, сам плагин выбирается ядром.
 
Найденные при помощи других плагинов ссылки на внешние ресурсы в браузере
  • Уведомления о сущностях. Такое сообщение от предыдущего отличается тем, что плагин, его отправивший, не ждет никакой обратной реакции. Например, торрент-клиент после завершения скачивания торрента уведомляет другие плагины о появлении соответствующих файлов. При этом, другой плагин может их как-либо обработать. Например, медиа-плеер может автоматически добавить медиа-файлы в очередь воспроизведения.
 
Добавление Atom-ленты с последними правками из браузера

В качестве примера можно рассмотреть способ реализации Broadcatching, автоматического получения контента через RSS:

  1. При получении новых статей в новостной ленте аггрегатор при помощи регулярных выражений, предварительно введенных пользоавтелем, автоматически получает ссылки на контент и уведомляет о них ядро.
  2. Ядро опрашивает плагины на предмет обработки данной ссылки и выбирает сообщающий о готовности ее обработать.
  3. Соответствующий плагин скачивает контент и уведомляет ядро о его появлении.
  4. Встроенный медиа-плеер добавляет его в свою очередь воспроизведения.

Другим, более конкретным примером может быть типичный сценарий, в котором для упрощения опущены этапы взаимодействия с пользователем:

  1. Пользователь жмет на ссылку на торрент-файл в браузере. Браузер понимает, что не может отобразить торрент-файл, и уведомляет о ссылке на него.
  2. Плагин-реализация CSTP сообщает ядру, что может скачать эту ссылку. Ядро отдает ему эту сущность.
  3. После скачивания файла CSTP посылает уведомление о только что скачанном файле.
  4. Ядро опрашивает плагины на предмет обработки данного файла. BitTorrent-плагин распознает его и отвечает о возможности обработки.
  5. Ядро отдает ему соответствующую сущность.
  6. После скачивания содержимого торрент-файла клиент посылает уведомление о появлении соответствующих файлов.
  7. Аналогично сущность может быть передана медиа-плееру.

Взаимная интеграцияПравить

 
«Сводка» со сложным поисковым запросом

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

«Сводка»Править

Во вкладке «Сводка» отображаются все текущие задачи из плагинов-загрузчиков, как то клиент BitTorrent или реализации HTTP/FTP, а также другая информация. При клике на строку с задачей отображаются соответствующая информационная панель и панель инструментов.

Например, аггрегатор новостных лент по умолчанию показывает в «Сводке» каналы с непрочитанными новостями. Так же, через эту вкладку осуществляется поиск, как простой, по строке, маске или регулярному выражению среди показываемых задач, так и через установленные плагины-поисковики. Например, если пользователь добавил в OpenSearch-плагин описание какого-либо поискового движка, то взаимодействие с ним осуществляется именно через эту вкладку.

LeechCraft поддерживает сложные логические поисковые запросы, с объединениями (OR) и пересечениями (AND) результатов отдельных подзапросов. Понятие категорий запросов позволяет конкретизировать поиск. Например, существует встроенная категория «downloads» (сокращенно «d»), соответствующая стандартному содержимому «Сводки». Плагины могут предоставлять другие категории. Так, например, плагин SeekThru, обеспечивающий работу с OpenSearch-провайдерами, позволяет назначать список категорий каждому из добавленных провайдеров. Плагин HistoryHolder, отвечающий за хранение истории закачек, предоставляет категорию «history». Также возможен отсев по фиксированной строке, маске или полноценному регулярному выражению.

Общие тегиПравить

 
Выбор тегов в «Закладках» в браузере

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

 
Диалог настроек

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

Общий диалог настроекПравить

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

Разделяемый кеш и база cookiesПравить

Плагины имеют доступ к глобальному кешу веб-страниц и базе cookies, что позволяет улучшить взаимодействие плагинов. Так, например, плагин, скачивающий файл, может использовать cookie, полученный браузером от сайта с этим файлом.

МодулиПравить

AggregatorПравить

 
Aggregator

Клиент для чтения лент новостей в форматах RSS, Atom и RDF.

Основные возможности:

  • Поддержка лент новостей в форматах RSS 2.0, RSS 0.93, RDF, Atom 0.3, Atom 1.0.
  • Поддержка формата OPML, часто используемого для обмена списками лент новостей.
  • Поддержка подкастов и возможность автоматического скачивания вложений.
    При наличии плагина-медиаплеера возможно проигрывание подкастов средствами LeechCraft без их скачивания.
  • Возможность доставать регулярными выражениями из статей произвольные строки и добавлять их как сущности в ядро.
  • Группировка каналов по тегам вместо папок и поддержка общей для LeechCraft базы тегов.
  • Фильтр отображаемых новостей по категориям, заданным автором ленты, а также по строке, маске и регулярному выражению.
  • Отображение новостей из нескольких лент одновременно.
  • Отображение всех показываемых новостей в «ленточном» виде.
  • Возможность устанавливать для каждой ленты собственные интервалы обновления, количество хранимых статей и срок их хранения.
  • Хранение новостей во встроенной БД SQLite либо в более мощной, но требующей дополнительных действий от пользователя PostgreSQL.
  • Использование веб-браузера при его доступности для отображения содержимого статей. При отсутствии браузера используется встроенный простой механизм отображения.
  • Вместе с веб-браузером — возможность автоматического обнаружения лент новостей на сайтах.

BitTorrentПравить

 
Панель управления торрент-сессией
 
Диалог добавления торрента
 
Панель управления торрентом
 
Управление файлами
 
Список пиров

Клиент для P2P-сети BitTorrent.

Некоторые возможности:

  • Глобальное и специфичное для каждого торрента ограничение скорости.
  • Возможность ограничения количества соединений.
  • Возможность выбора файлов для скачивания, а также установки приоритета каждого файла.
  • Возможность переименования файлов и директорий, а также изменения структуры директорий.
  • Поддержка последовательной загрузки.
  • Поддержка быстрого возобновления, позволяющего избежать долгой проверки данных при старте программы. Данные для быстрого возобновления также включают в себя список пиров, их параметры и прочую информацию, помогающую начать эффективную загрузку как можно быстрее.
  • Поддержка очереди торрентов. В частности, торренты проверяются последовательно, а не все сразу.
  • Возможность ограничить число одновременно скачивающихся и отдающихся торрентов. При этом, отдающиеся торренты будут периодически останавливаться и давать возможность другим отдающимся торрентам раздаваться в зависимости от общего количества отданного, времени сидирования и других параметров.
  • Поддержка тегов для торрентов.
  • Поддержка DHT.
  • Поддержка протокола расширений.
  • Расширение PeX, получение списка пиров от другого пира.
  • Расширение lt_trackers, расширение для обмена трекерами между пирами.
  • Поддержка HTTP-сидов, согласно спецификациям BEP 17 и BEP 19.
  • Поддержка обнаружения локальных пиров (в одной локальной сети с пользователем).
  • Поддержка торрентов с несколькими трекерами, как следуя спецификации, так и в стиле µTorrent. В первом случае обращения происходят последовательно к каждому трекеру, во втором — ко всем сразу.
  • Поддержка scrape-запросов к трекерам.
  • Возможность работать с UDP-трекерами.
  • Поддержка no_peer_id=1 для облегчения нагрузки на трекеры.
  • Поддержка compact=1.
  • Поддержка частных торрентов.
  • Поддержка IPv6.
  • Использование отдельного потока для обращения к диску для избежания блокировок сетевого или пользовательского интерфейса из-за обращений к диску.
  • Поддержка файлов больше 2 гигабайт на файловых системах с такой возможностью.
  • Возможность продолжать закачку торрента, скачанного любым другим клиентом.
  • Поддержка sparse-файлов.
  • Сид-режим, в котором изначально предполагается, что все файлы торрента корректны, и каждая часть торрента проверяется при обращении к ней.
  • Поддержка HTTP/SOCKS прокси-серверов.
  • Поддержка сжатия при связи с трекером
  • Возможность автоматически назначать порты на роутерах, поддерживающих NAT-PMP и UPnP.
  • Возможность сконфигурировать почти каждую настройку протокола.
  • Наличие нескольких предустановленных схем настроек — схема по умолчанию, схема для минимального использования памяти и схема для наиболее быстродействующего сида.

ChatterПравить

IRC-клиент.

  • Поддерживает вкладки.
  • Поддерживает навигацию по irc:// ссылкам.

CSTPПравить

Простой плагин, реализующий HTTP-протокол и служащий для поддержки других плагинов, таких как Aggregator или SeekThru.

DBusManagerПравить

Плагин, обеспечивающий взаимодействие LeechCraft с внешним миром посредством D-Bus. В настоящее время используется для показа уведомлений через систему визуальных уведомлений KDE при наличии такой возможности.

Существует только в *NIX-версии.

DeadLyricsПравить

Клиент для сервиса поиска текстов песен LyricWiki.org. Обращается к сервису через его API. Поддерживает локальное кеширование полученных текстов. Является обработчиком категории lyrics (ca:lyrics либо category:lyrics в «Сводке»).

History HolderПравить

Плагин обеспечивает сохранение истории задач. Поддерживает теги. Является обработчиком категории history (ca:history либо category:history в «Сводке»).

LCFTPПравить

Плагин для передачи файлов через FTP, а также предоставляющий двухпанельный FTP-клиент.

Основные функции:

  • Поддержка вкладок.
  • Возможность зеркалирования структуры директорий.
  • Очередь задач, возможность задавать максимальное общее количество задач и максимальное количество задач на хост.
  • Поддержка SSL.
 
Проигрывание аудиопотока из подкаста

LMPПравить

LeechCraft Media Player — обеспечивает предпросмотр и проигрывание аудио- и видеофайлов. Использует Phonon для проигрывания и, таким образом, обеспечивается поддержка всех кодеков, которые способен обработать выбранный бекенд — GStreamer либо Xine.

Поддерживает очереди воспроизведения и проигрывание потоков через Интернет. Так, с соответствующим плагином для лент новостей возможно автоматическое проигрывание подкастов.

Существует только в *NIX-версии.

NetworkMonitorПравить

Плагин показывает активные HTTP-запросы и позволяет получить информацию об их заголовках.

 
Poshuku
 
Веб-отладчик, элементы
 
Веб-отладчик, ресурсы

PoshukuПравить

Плагин, реализующий веб-браузер.

Некоторые особенности и возможности:

  • Использование движка WebKit для рендеринга и, как следствие, поддержка современных стандартов на соответствующем уровне.
  • Поддержка множества вкладок.
  • Возможность бесконечной отмены закрытия страниц.
  • Возможность интеграции в другие плагины. Например, Aggregator использует Poshuku, чтобы отображать тексты новостей, а SeekThru — чтобы показывать результаты поиска в HTML-формате.
  • Поддержка autodiscovery-ссылок на внешние ресурсы. Так, например, при наличии Aggregator автоматически обнаруживаются ссылки на ленты новостей, а при наличии SeekThru — ссылки на OpenSearch-описания.
  • Группировка закладок по тегам вместо папок и поддержка общей для LeechCraft базы тегов.
  • Возможность фильтрации истории как по строке или маске, так и по регулярному выражению.
  • Адресная строка с интеллектуальным автодополнением, предлагающим наиболее вероятные варианты, основываясь на частоте посещений и распределении дат посещений.
  • Хранение закладок и истории во встроенной БД SQLite либо в более мощной, но требующей дополнительных действий от пользователя PostgreSQL.
  • Возможность искать выделенные слова в установленных поисковых системах. Можно выбирать, в каких именно системах будет происходить каждый конкретный поиск.
  • Поддержка XBel.
  • Возможность создания скриншотов страниц во всю длину.
  • Неограниченная по размеру база cookies.
  • Cookies-менеджер, позволяющий редактировать и удалять cookies.
  • Возможность просматривать и на лету изменять DOM-дерево и атрибуты элементов.
  • Возможность отладки и профилирования JavaScript.
  • Детальная статистика по процессу загрузки веб-страницы — сводка по потреблению трафика и времени различными ее элементами.
  • Поддержка собственных плагинов.

Poshuku CleanWebПравить

Фильтр рекламы, совместимый с блок-листами расширения AdBlock для Firefox.

  • Поддержка обнаружения ссылок на блок-листы и подписки на них.
  • Возможность автоматического обновления через настраиваемые интервалы времени.

Poshuku FileSchemeПравить

Обеспечивает поддержку навигации по локальным ресурсам при помощи file://-ссылок и загрузку документов по таким ссылкам.

 
Настройка Poshuku FUA

Poshuku FUAПравить

Poshuku Fake User Agent позволяет устанавливать для каких-либо доменов ложное значение поля User-Agent.

  • Наличие нескольких популярных предустановленных значений поля User-Agent.
  • Возможность пользователю при желании ввести собственное значение поля.
  • Возможность задавать домены в виде регулярных выражений.
  • Поддержка автоматической подстановки текущей платформы, языка, версии WebKit, версии приложения и других параметров в строку идентификации.
 
Настройка SeekThru

SeekThruПравить

OpenSearch-клиент.

  • Поддерживает автоматическое обнаружение OpenSearch-описаний на сайтах.
  • Позволяет назначать добавленным поисковым механизмам список тегов, по которым они будут в дальнейшем использоваться (опция ca: либо category: в «Сводке»).
  • Возможность опроса нескольких поисковых систем одновременно.
  • Интеграция с веб-браузером — возможность искать выделенную фразу в выбранных поисковых системах.
  • Поддерживает результаты в форматах RSS/Atom и позволяет подписаться на них при наличии соответствующего плагина, например, Aggregator.
  • Поддерживает отображение результатов в формате HTML при наличии плагина-браузера, например, Poshuku.

ИсторияПравить

2006 годПравить

Проект был начат как небольшой менеджер закачек весной 2006 года. Почти весь год шло планирование проекта, и концу года имелся только один работающий модуль — реализация HTTP-протокола. Только в конце года была выпущена первая публичная сборка.

2007 годПравить

При дальнейшей разработке LeechCraft стало понятно, что в процессе первоначального проектирования было допущено несколько существенных ошибок, поэтому летом 2007 года он был переписан практически с нуля.

В конце 2007 года появляется первый полнофункциональный крупный плагин, обеспечивающий функционал LeechCraft и существующий и по сей день — BitTorrent, и выходит LeechCraft 0.1.0.

2008 годПравить

Весной 2008 года появляется второй крупный плагин — Aggregator, клиент для чтения лент новостей, и выпускается LeechCraft версии 0.2.0.

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

Осенью 2008 года появляется третий крупный плагин, составляющий основу LeechCraft — веб-браузер Poshuku.

2009 годПравить

В 2009 году проект продолжает набирать популярность, к нему присоединяются другие разработчики и помощники. Выполняется локализация на украинский, немецкий, арабский языки, добавляется плагин Chatter — первый плагин, созданный сторонним разработчиком. Летом 2009 года проект становится все более известным[1]. После выхода версии 0.3.0 19 августа 2009 года проект получает одобрение аудитории сайта Хабрахабр[2].

КритикаПравить

Критике подверглись следующие моменты в идее LeechCraft:

  • Несоответствия программы канонам UNIX-way,[3][4] согласно которым программа должна была бы быть разделена на множество более маленьких подпрограмм, выполняющих каждый свою специализированную задачу и взаимодействующих через системные механизмы IPC.
  • Создание нового приложения вместо улучшения ужé существующих.[5]

ПримечанияПравить

СсылкиПравить