Описание проекта

ABCat - Audio Books Catalog. С помощью этого приложения можно искать и загружать аудиокниги.

Для пользователей

Системные требования:

  • Windows Vista+ (Необходимы для поддержки .Net Framework 4.5)
  • .Net Framework 4.5
  • Доступ в интернет (при обновлении каталога и загрузке контента)
  • Свободное место на диске: 300Mb+ (для хранения БД)
  • CPU: Любой более-менее современный.
  • RAM: Приложение использует 150-200 MB Ram.

Установка приложения не требуется. Достаточно скопировать файлы на диск и запустить ABCat.exe. При первом запуске потребуется указать пути для хранения БД, загрузки контента, путь к uTorrent, срок актуальности записей каталога и группы каталога (актуальные записи не загружаются при обновлении каталога).

Для разработчиков

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

Приложение построено с использованием:

  • .Net Framework 4.5
  • WPF
  • SQLite.Net-PCL
  • Excced WPF Toolkit.3.5.50211.1
  • HtmlAgilityPack
  • NLog
  • Другие компоненты

Необходимые компоненты либо установлены через NuGet, либо находятся в папке DLLs в корне проекта.

Системы управления плагинами пока нет - выбор того или иного плагина осуществляется добавлением/удалением файлов из папки plug-ins в корневой папке приложения.
Все библиотеки плагинов должны иметь имя файла ABCat.Plugins.<Имя плагина>.dll или ABCat.Plugins.<Имя плагина>.exe, все остальные библиотеки и исполняемые файлы из папки plug-ins игнорируются.

Структура решения (в порядке возрастания зависимостей):

  • ABCat.Shared
    Общая для всех проектов библиотека. Базовые утилиты, типы данны и т.д.

  • ABCat.Core
    Ядро приложения. Содержит контекст приложения, интерфейсы плагинов, настройки и др.
  • ABCat
    GUI, модели для работы GUI, и т.д. Windows Application

Структура хранилища каталога:

  • AudioBooks.sqlite
    Основная БД хранилища. Записи каталога, группировка записей, метаданные.
  • BinaryData.sqlite
    Хранилище бинарных данных. Используется для кешированных Html, загруженных при обновлении каталога. Может использоваться для повторного парсинга записей без обращения на сайт источника. Имеет наибольший размер и может быть удалён в любой момент - при отсутствии страницы в кеше она будет повторно загружена с сайта.
  • ProcessingSettings.sqlite
    Настройки парсеров (списки автозамены для нормализации каталога)
  • UserData.sqlite
    Пользовательские данные каталога (информация о загрузке записей, скрытии записей на UI). Пользовательские данные отделены от основной БД для упрощения обмена базами между пользователями - при замене Catalog.sdf пользователь не теряет своих личных данных.

Плагины. Плагином может быть библиотека на .Net Framework 4.5, содержащая классы, помеченные специальным атрибутом ABCat.Core.Plugins.PluginCreatorAttribute и реализующие один или несколько интерфейсов приложения. В конструктор класса передается экземпляр контекста приложения со всей необходимой информацией для инициализации и работы плагина.

Структура плагинов:

  • DataProviders
    Плагины, реализующие DAL. Приложение работает с данными только через интерфейсы (IAudioBook, IAudioBookGroup и др.), а плагины DAL реализуют хранение реальных данных. Сейчас реализован плагин для хранения данных с помощью SQLite.Net-PCL.
  • Site
    Плагины для операций с источниками контента, наполнения БД
    • ISiteParserPlugin
      Плагин для наполнения каталога. Обеспечивает загрузку записей из какого-либо источника, загрузку метаданных для записей, наполнение каталога. В ABCat.Plugins.Core имеется абстрактный класс SiteParserBase, обеспечивающий базовую логику асинхронности. При создании плагинов рекомендуется наследоваться от этого класса.
    • IRecordTargetDownloaderPlugin
      Плагин для загрузки контента, связанного с записью каталога. В ABCat.Plugins.Core имеется абстрактный класс RecordTargetDownloaderBase, обеспечивающий базовую логику асинхронности. При создании плагинов рекомендуется наследоваться от этого класса.
  • Catalog
    Плагины для операций с каталогом контекта
    • IFilteringLogicPlugin
      Интерфейс для плагинов, обеспечивающих фильтрацию записей на UI. Класс должен представлять открытые поля для ввода параметров фильтрации, методы обновления кешей фильтра и методы фильтрации.
    • IGrouppingLogicPlugin
      Интерфейс для плагинов, обеспечивающих группировку записей на UI.
    • INormalizationLogicPlugin
      Интерфейс для плагинов, обеспечивающих логику нормализации данных в каталоге. Нормализация - это процесс нахождения различных вариантов представления одного и того же значения атрибута записи каталога (например "Стивен Кинг" == "Кинг Стивен" == "Кинг Стивн"), и их приведения к единому виду. Плагин может иметь собственную логику формирования списков автозамены (например синтаксический анализ), или пользоваться базой списков автозамены (ProcessingSettings.sdf)
  • UI
    Плагины для пользовательского интерфейса
    • IBrowserWindowPlugin
      Плагин, отображающий окно браузера и показывающий содержимое страницы, связанной с записью каталога
    • IRecordsListPlugin
      Пользовательский контрол, отображающий набор записей каталога. Обеспечивает необходимые методы навигации по записям, выделению записей и т.д.
    • INormalizationSettingsEditorPlugin
      Пользовательский контрол для наполнения списков автозамены и других параметров нормализатора

Базовая версия проекта содержит необходимый набор стандартных плагинов, обеспечивающих работы с каталогом аудиокниг сайта Rutracker.org
Плагины могут иметь ссылку на проекты ABCat.Shared и ABCat.Core

Last edited Nov 18, 2013 at 7:34 AM by alxcp, version 7