![](https://habrastorage.org/getpro/habr/post_images/bd1/dff/07f/bd1dff07f5fb388d543b7da376d47a69.jpg)
Прошел месяц с момента выхода первой статьи.
20 ноября был выпущен ABCat v2.1.1a, в который вошло довольно много изменений:
- SQL CE + EF 6.0.1 заменены на SQLite.Net-PCL
- Логика приложения отвязана от особенностей хранения данных
- Существенно переработана система конфигурации
- Доработан плагин загрузки аудиокниг
- Доработан плагин редактирования списка автозамены
- Добавлено логирование ошибок
- Упрощение развёртывания приложения
- Множество изменений «под капотом»
Порядок установки и запуска
- Скачайте архив с релизом
- Распакуйте архив
- Запустите ABCat.exe
- При первом запуске появится окно конфигурации — настройте всё, что необходимо, нажмите «сохранить» в окне конфигурации
- Пользуйтесь
Смена БД и ORM
По результатам эксплуатации версии 2.0.1a выяснилось, что большинство проблем у пользователей возникают с SQL Compact Edition. Несмотря на то, что в релиз приложения были включены портабельные версии DLL, большинству пользователей все же требовалась установка движка SQL CE в систему. Кому-то даже пришлось удалять из системы SQL CE 4.0 и устанавливать SQL CE 4.0, чтобы запустить приложение.
![](https://habrastorage.org/getpro/habr/post_images/d81/b41/499/d81b414991bb1681eabd1271ffabaed5.png)
Некоторым вообще не удалось запуститься и никакие манипуляции с SQL CE не помогали.
Учитывая всё это, а также то, что сам SQL CE по факту можно считать умершим, было принято решение заменить его на другую встраиваемую БД – SQLite. В поисках способов завести Entity Framework 6.0.1 на SQLite я наткнулся на проект SQLite.Net-PCL. Это довольно примитивная по функционалу ORM, но его возможностей для ABCat оказалось вполне достаточно. Проведенные тесты производительности (без цифр – на глазок) оказались более чем впечатляющими. Даже на примитивных операциях типа добавления объектов в базу был получен прирост скорости, который измерялся не в процентах, а в разах. Я не знаю, чем именно был обусловлен такой прирост – заменой SQL CE на SQLite или EF на SQLite.Net-PCL. Скорее всего и тем и другим.
Большим сюрпризом стало уменьшение файла БД. Файл кешированных страниц, который по версии SQL CE весил 200+ Мб, похудел почти на 60 мегабайт.
У SQLite.Net-PCL нет трекинга изменений объектов, поддержки массовых операций, выборочного массового удаления объектов, многопоточного доступа к файлу БД и др. Эти вещи пришлось реализовывать самостоятельно.
Из отрицательных последствий перехода – потеря совместимости БД с предыдущим релизом ABCat. Инструменты для импорта старых настроек автозамены отсутствуют. Если у кого-нибудь в первой версии осталось много настроек – сообщите об этом – можно написать утилиту для конвертации. Смелые могут попробовать перекинуть данные из старой БД в новую вручную – логическая структура баз практически не изменилась.
Переезд DAL в плагин, отвязка основной логики от особенностей хранения данных
В процессе переезда на новую ORM я переосмыслил архитектуру приложения. Чтобы не завязывать основную логику приложения на особенности одной конкретной БД я вынес весь DAL в отдельный плагин. С этого момента можно добавлять плагины для поддержки других БД, не меняя логику остальных плагинов.
Конфигурация
Следующим масштабным изменением стала система настройки приложения. Перед выпуском прошлой версии я подумал, что хабравчане хоть и технически подкованный народ, но все-таки заставлять людей ковыряться в XML-файлах для настройки приложения будет негуманно. Потому я потратил тогда пару часов и слепил окно настройки системы. Оно работало по никому не понятной (даже мне) логике, обладало зачатками интеллекта и свободой воли. Многие жаловались на то, что такое окно – не самый лучший способ встретить нового пользователя системы.В новой версии я решил полностью переделать систему конфигурации.
ABCat построен на плагинах, поэтому с настройками все довольно непросто. Плагины могут исчезать и появляться, каждый из них имеет свои специфические параметры для настройки, поэтому одним файлом конфигурации тут не обойтись. В новой версии плагины получили индивидуальные настройки. За конфигурирование приложения по-прежнему отвечает единое окно, но теперь оно содержит несколько разделов, для каждого плагина отдельно. Система проверки корректности настроек также претерпела изменения и теперь правильно обрабатывает различные ситуации вроде отсутствия файлов и папок.
Новое окно конфигурации![](https://habrastorage.org/r/w1560/getpro/habr/post_images/f41/ff6/ac1/f41ff6ac1b72fe44ece3323d7b2ea1fa.png)
![](https://habrastorage.org/getpro/habr/post_images/f41/ff6/ac1/f41ff6ac1b72fe44ece3323d7b2ea1fa.png)
Загрузка аудиокниг
Стал умнее плагин загрузки аудиокниг. Ранее требовалось указать путь к uTorrent для того, чтобы иметь возможность запустить загрузку.
Теперь в настройках можно выбрать действие, которое будет выполнено над загруженным torrent-файлом:
- Просто показать в проводнике. Для тех, кто скармливает torrent-файлы NAS, и не использует клиенты на ПК.
- Выполнить системное действие. После загрузки torrent-файл будет просто запущен на исполнение и ОС автоматически выполнит действие, сопоставленное с этим типом файла
- Запустить загрузку в торрент-клиенте. Это как раз то действие, которое было единственно возможным в первой версии. Torrent-клиент будет запущен с параметрами командной строки и закачка начнется автоматически. Путь к torrent-клиенту указывать больше не нужно – ABCat загружает из реестра список установленных torrent-клиентов и нужно просто выбрать предпочитаемый клиент из комбобокса в окне настроек. Добавлена поддержка BitTorrent.
Повторная авторизация на rutracker происходит с использованием сохраненных cookie.
Вкратце о других изменениях
Для логирования ошибок был прикручен NLog.
Следующим изменением стал отказ от MahApps.Metro. Эта библиотека обеспечивала стилизацию внешнего вида приложения. Возможно разработчик в какой-то момент доработает её до нормального состояния, но на данный момент я столкнулся с множеством необъяснимых проблем, начиная от невозможности изменения цвета заголовка окна (как я ни пытался соблюдать инструкции – ничего не получалось), заканчивая отображением черных прямоугольников вместо всплывающих подсказок. Мне по большому счету требовалась лишь стилизация заголовка приложения (которое по умолчанию для WPF почему-то стилизуется под окно Windows 7), и эта задача была решена другим способом, без использования сторонних компонентов.
Кроме этого был переработан контрол редактирования списков автозамены. Просмотрщик и редактор были объединены в одно окно, появились кнопки для удаления элементов.
Быстрое удаление элементов в редакторе автозамены![](https://habrastorage.org/r/w1560/getpro/habr/post_images/269/b98/b72/269b98b729def494f0866b93247cec30.png)
![](https://habrastorage.org/getpro/habr/post_images/269/b98/b72/269b98b729def494f0866b93247cec30.png)
Быстрое удаление элементов в списке автозамены![](https://habrastorage.org/r/w1560/getpro/habr/post_images/434/263/bd3/434263bd316b03441fdbab7bfaf03f86.png)
![](https://habrastorage.org/getpro/habr/post_images/434/263/bd3/434263bd316b03441fdbab7bfaf03f86.png)
В списке записей появилось условное окрашивание строк. Записи, добавленные в список в последние 24 часа, окрашиваются зеленым, в последнюю неделю – желтым. Записи, не обновленные более 30 дней окрашиваются красным.
Добавлены ещё 2 варианта логики группировки записей.
Множество мелких изменений произошло под капотом, поэтому не буду на них подробно останавливаться.
Для запуска приложения больше не нужно качать никаких дополнительных файлов – в релизе уже есть стартовые базы данных.
Ссылки
Страница проекта на codeplex
Обо всех проблемах сообщайте сюда
Исходники
Благодарю всех, кто сообщал об ошибках, вносил предложения по доработкам и тестировал промежуточные версии.
Особые благодарности romantk, SlavasssR и ItGold.
Приложение по-прежнему не просит денег, донейтов, не показывает рекламу и не предлагает установить панель для браузера или «защитника» системы. Просьба с пониманием относиться к возможным ошибкам и недоработкам.
Перед скачиванием книги убедитесь в том, что автор релиза позаботился о соблюдении авторских прав на неё.
И не уходите с раздачи.