Refactor settings management in PLib video library manager. Replace dialog-based settings with a single-panel overlay for improved user experience. Update MainWindow and SettingsView to support new settings panel, and adjust ViewModels accordingly. Enhance README.md to reflect these changes.

This commit is contained in:
Leonid Pershin
2026-08-08 12:40:53 +03:00
parent 186dd900e1
commit 835937357e
12 changed files with 441 additions and 216 deletions
+7 -3
View File
@@ -9,8 +9,9 @@
- Метаданные (длительность, разрешение, кодек) через ffprobe.
- Постеры кадром из видео через ffmpeg, с кэшем на диске.
- Виртуализированная сетка карточек, ленивая загрузка превью, поиск и сортировка.
- Окно настроек: папки библиотеки (с удалением), параметры превью и сканирования, тема,
очистка кэша превью. Всё пишется в `settings.json` и подхватывается без перезапуска.
- Настройки — выдвижной панелью в том же окне: папки библиотеки (с удалением), параметры
превью и сканирования, тема, очистка кэша. Всё пишется в `settings.json` и подхватывается
без перезапуска.
- Светлая, тёмная и системная темы; выбор запоминается.
- Клик или Enter по карточке — открыть в системном плеере, правая кнопка — контекстное меню.
@@ -62,7 +63,10 @@ dotnet test
декодированием в нужную ширину. Память зависит от размера окна, а не от размера библиотеки.
- **Scope на операцию.** `DbContext` живёт ровно одну операцию — ViewModel берёт
`IServiceScopeFactory` и создаёт scope на каждый вызов.
- **Настройки — рабочая копия.** Диалог правит снимок `AppSettings` и записывает его целиком
- **Одно окно.** Настройки — панель поверх сетки, а не второе окно: библиотека остаётся
видна, в alt-tab ничего не добавляется, и приложение остаётся переносимым на
`ISingleViewApplicationLifetime`, где `ShowDialog` попросту не существует.
- **Настройки — рабочая копия.** Панель правит снимок `AppSettings` и записывает его целиком
только по «Сохранить», так что отмена не оставляет следов. Пересканирование запускается
только если изменилось то, что влияет на состав библиотеки, — смена темы или ширины кадра
его не вызывает.