## Микрообзор функционала Dict2Flashcards
Лучше посмотреть [страничку на гитхабе](https://github.com/Blackdeer1524/Dict2Flashcards).
Да, демка отличается от текущей версии, но основной функционал один и тот же.

## Навигация по кололе 
![](img/2023-04-20-23-31-47.png)

Приложение является "визуализацией" коллекиции Deck. Deck - это по сути вектор 
карточек (класс Card). Кнопки со стрелками - навигация по колоде. ">" 
пропустить карточку, "<" откатиться к предыдущей карточке 
(и убрать карточку из добавленных если она была добавлена на предыдущем шаге). 
">>>" - пропустить все оставшиеся карточки в колоде. Bury - отложить 
карточку в отдельный файл.

Внутри у нас 2 колоды: колода, с которой мы взаимодействуем (Deck) и в которую 
идут сохраненные карточки (SaveDeck). 

## Плагины
У нас будут плагины, отвечающие за:
 * за сохранение колоды;
 * за снабжение информации
   * предоставление определений к словам
     * Локальные словари (json)
     * Внешние словари   (парсеры HTML страниц, API, и т.д. )
   * предоставление предложений по слову
     * Внешние словари   (парсеры HTML страниц, API, и т.д. )
   * предоставление ссылок изображений
     * Внешние  (парсеры HTML страниц, API, и т.д. )
   * предоставление ссылок на аулио
     * Локальные (директория с аудио)
     * Внешние   (парсеры HTML страниц, API, и т.д. )

Каждый плагин должен реализовывать соответствующий интерфейс.

* Замечание: плагины предоставления аудио, изображений и предложений являются
генераторами т.е. они предоставляют свои данные по пакетам. Как это реализовать
через сервер - пока не знаю.

С плагинами мы будет общаться через запросы к серверу плагинов:

![](img/2023-04-20-23-33-23.png)
Кнопки `</>` отвечают за конфигурацию плагинов

Кнопки прямо левее `</>`: кнопка выбора текущего плагина

Плагины снабжения можно **комбинировать в цепи**. Цепи нужны для одновременного
поиска по словарям / парсить несколько искочников за раз. **Цепи так же можно 
комбинировать в цепи**. Реализация комбинации цепей в цепи довольно сложна 
так как нужно управлять графом зависимостей цепей друг от друга (по этому 
цепи цепей мы оставим до самого конца, если на это будет время):

### Сложности с графом зависимостей
![](img/2023-04-20-23-33-02.png)
* при изменении одной цепи нужно изменить все зависимые цепи
  * при изменении D должны измениться B, C, A и E. (A меняется так как поменялась
  цепь B)
* нельзя допускать циклов

Существует задать условия прекращения поиска по цепи. Под условием прекращения
подразумевается следующее:
* Первый непустой результат поиска;
* Все непустые результаты поиска в цепи.

Пример окна настройки вложенной цепи:
Цепь "cambset" зависит от цепи "bi-mono cambridge"

![](img/2023-04-20-23-34-25.png)

## Интерфейс добавления изображений
Существует возможность добавление к карточкам изображений
![](img/2023-04-20-23-34-42.png)

## Браузер добавленных карточек (текущая сессия) 
![](img/2023-04-20-23-35-02.png)
Основная проблема, связанная с браузером, это синхронизация плагинов снабжения
в окне браузера в основным окном. То есть если мы поменяли текущий плагин снабжения
предложений в браузере, это дожно так же отразиться в основном окне.

## Язык запросов
Реализован язык запросов который позволяет искать карточки по колоде. 
[см. стандарт](https://github.com/Blackdeer1524/Dict2Flashcards#query-language-documentation)

Нужно будет переделать т.к. он написан ОЧЕНЬ плохо.
