## Микрообзор функционала 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) Нужно будет переделать т.к. он написан ОЧЕНЬ плохо.