LeechCraft

Материал из свободной русской энциклопедии «Традиция»
Перейти к навигации Перейти к поиску

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]

Примечания[править | править код]

Ссылки[править | править код]