diff --git a/README.md b/README.md index 30b0172..34d32fe 100644 --- a/README.md +++ b/README.md @@ -1,194 +1,117 @@ -# Lunaris +# Lunaris -Lunaris — локальное Flutter-приложение для просмотра booru/gelbooru/rule34-подобных источников в Pinterest-стиле. +Lunaris - локальное Flutter-приложение для просмотра booru/gelbooru/rule34-подобных источников РІ Pinterest-стиле. -Приложение не использует отдельный backend-сервер. Вся логика работает внутри Flutter: API-провайдеры, metadata-кэш, избранное, коллекции, история, настройки, диагностика и фильтры. +Приложение РЅРµ использует отдельный backend-сервер. Р’СЃСЏ логика живет внутри Flutter: API-провайдеры, РєСЌС€ metadata, избранное, коллекции, история просмотров, настройки, диагностика, фильтры Рё обновления. -## Возможности +## Возможности -- Masonry feed с несколькими провайдерами и перемешанной выдачей All providers. -- Поиск по тегам через chip-input: ввёл тег, нажал пробел или Enter, тег стал отдельным элементом. -- Подсказки тегов из provider API. -- Избранное, коллекции и история просмотренных постов. -- Smart blacklist/whitelist с правилами по тегам, рейтингу, провайдеру, типу файла и score. -- Детальный просмотр фото, GIF, видео и SWF на Windows. -- Видео-плеер с fullscreen, repeat, mute, half-volume и сохранением выбранных настроек. -- Управление провайдерами, health-check и provider diagnostics. -- Экспорт и импорт настроек. -- Автопроверка обновлений через Gitea releases. -- Android и Windows сборки. +- Masonry feed СЃ несколькими провайдерами Рё перемешанной выдачей All providers. +- РџРѕРёСЃРє тегов через chip-input: ввел тег, нажал пробел или Enter, тег стал отдельным элементом. +- Подсказки тегов РёР· API активных провайдеров. +- Избранное, коллекции Рё отдельная вкладка Viewed. +- Smart blacklist/whitelist РїРѕ тегам, группам тегов, рейтингу, провайдеру, типу файла Рё score. +- Details viewer для фото, GIF, видео Рё SWF РЅР° Windows. +- Видео-плеер СЃ fullscreen, repeat, mute, half-volume Рё сохранением выбранных настроек. +- Отдельная вкладка Artists для Kemono/Coomer: РїРѕРёСЃРє авторов Рё просмотр РёС… работ без смешивания СЃ обычным booru feed. +- Управление провайдерами, health-check Рё provider diagnostics. +- Р­РєСЃРїРѕСЂС‚ Рё РёРјРїРѕСЂС‚ настроек JSON. +- Автопроверка обновлений через Gitea Releases, скачивание Рё открытие APK/Windows installer РїСЂСЏРјРѕ РёР· приложения. -## Скачать +## Скачать -Готовые сборки лежат в Gitea Releases: +Готовые СЃР±РѕСЂРєРё лежат РІ Gitea Releases: -[Lunaris v1.1.0](https://gitea.rardogsynapse.online/RarDog/RuleGelApp/releases/tag/v1.1.0) +[Lunaris v1.1.2 Experimental](https://gitea.rardogsynapse.online/RarDog/RuleGelApp/releases/tag/v1.1.2-experimental) -- `Lunaris-v1.1.0.apk` — APK для Android. -- `LunarisSetup-v1.1.0.exe` — установщик для Windows. -- `LunarisPortable-v1.1.0.zip` — portable-версия для Windows. +- `Lunaris-v1.1.2-experimental.apk` - APK для Android. +- `LunarisSetup-v1.1.2-experimental.exe` - установщик для Windows. +- `LunarisPortable-v1.1.2-experimental.zip` - portable-версия для Windows. -## Стек +## Стек -- Flutter и Dart -- Riverpod -- go_router -- Dio -- Isar -- cached_network_image -- flutter_staggered_grid_view -- media_kit -- webview_windows для SWF/Ruffle на Windows -- connectivity_plus +- Flutter, Dart, Riverpod, go_router +- Dio, Isar, connectivity_plus +- cached_network_image, flutter_staggered_grid_view +- media_kit для видео +- webview_windows + Ruffle fallback для SWF РЅР° Windows -## Архитектура +## Архитектура -Lunaris — Flutter-монолит. UI не дублирует backend-логику, а вызывает локальные сервисы через Riverpod. +Lunaris - Flutter-монолит. UI РЅРµ дублирует backend-логику, Р° вызывает локальные сервисы через Riverpod. -Основные слои: +- `lib/core` - HTTP, база, РєСЌС€, ошибки, Result Рё утилиты. +- `lib/backend/models` - доменные модели. +- `lib/backend/providers` - API-провайдеры Рё ProviderManager. +- `lib/backend/repositories` - доступ Рє локальному Isar-хранилищу. +- `lib/backend/services` - Feed/Search/Favorites/Collections/Settings/Diagnostics/Downloads/Updates. +- `lib/backend/di` - Riverpod providers для backend/core. +- `lib/app` - приложение, роутер, тема Рё responsive helpers. +- `lib/shared/widgets` - общие UI-компоненты. +- `lib/features` - экраны Рё контроллеры фич. -- `lib/core` — HTTP, база, кэш, ошибки, Result-тип и утилиты. -- `lib/backend/models` — доменные модели. -- `lib/backend/providers` — API-провайдеры и ProviderManager. -- `lib/backend/repositories` — доступ к локальному Isar-хранилищу. -- `lib/backend/services` — Feed/Search/Favorites/Collections/Settings/Diagnostics. -- `lib/backend/di` — Riverpod providers для backend/core. -- `lib/app` — приложение, роутер, тема и responsive helpers. -- `lib/shared/widgets` — общие UI-компоненты. -- `lib/features` — экраны и контроллеры фич. +## Экраны -## Экраны +- `/` - главный feed. +- `/search` - РїРѕРёСЃРє Рё recent searches. +- `/post/:providerId/:postId` - details viewer. +- `/favorites` - избранное. +- `/viewed` - история просмотренных постов. +- `/collections` - коллекции. +- `/artists` - РїРѕРёСЃРє авторов Kemono/Coomer. +- `/artists/:providerId/:service/:artistId` - работы автора. +- `/providers` - управление провайдерами. +- `/providers/check` - диагностика провайдеров. +- `/settings` - настройки. -- `/` — главный feed. -- `/search` — поиск и recent searches. -- `/post/:providerId/:postId` — детальный просмотр поста. -- `/favorites` — избранное. -- `/viewed` — история просмотренных постов. -- `/collections` — коллекции. -- `/collections/:collectionId` — посты внутри коллекции. -- `/providers` — управление провайдерами. -- `/providers/new` — добавление/редактирование провайдера. -- `/providers/check` — проверка провайдеров и diagnostics. -- `/settings` — настройки. +## Провайдеры РїРѕ умолчанию -## Провайдеры по умолчанию +- Gelbooru - `https://gelbooru.com` +- Rule34 - `https://api.rule34.xxx` +- Safebooru - `https://safebooru.org` +- Konachan - `https://konachan.com` +- Yande.re - `https://yande.re` +- e621 - `https://e621.net` +- e926 - `https://e926.net` +- Xbooru - `https://xbooru.com` +- CosBooru - `https://cos.lycore.co` +- Kemono - `https://kemono.su` (только Artists) +- Coomer - `https://coomer.su` (только Artists, выключен РїРѕ умолчанию) -- Gelbooru — `https://gelbooru.com` -- Rule34 — `https://api.rule34.xxx` -- Safebooru — `https://safebooru.org` -- Konachan — `https://konachan.com` -- Yande.re — `https://yande.re` -- e621 — `https://e621.net` -- e926 — `https://e926.net` -- Xbooru — `https://xbooru.com` -- CosBooru — `https://cos.lycore.co` +Realbooru оставлен РІ СЃРїРёСЃРєРµ, РЅРѕ выключен РїРѕ умолчанию, потому что его публичный API сейчас нестабилен. -Realbooru оставлен в списке провайдеров, но выключен по умолчанию, потому что его публичный API сейчас нестабилен. +Поддерживаемые `apiType`: `gelbooru`, `rule34`, `realbooru`, `danbooru`, `moebooru`, `e621`, `kemono`, `coomer`. -Поддерживаемые `apiType`: +РћРґРёРЅ упавший провайдер РЅРµ ломает общий feed: ошибка сохраняется РІ diagnostics, остальные источники продолжают отдавать посты. -- `gelbooru` -- `rule34` -- `realbooru` -- `danbooru` -- `moebooru` -- `e621` +## Как добавить провайдера -Один упавший провайдер не ломает общий feed: ошибки сохраняются в diagnostics, остальные провайдеры продолжают отдавать посты. +1. Добавить mapper РІ `lib/backend/mappers`, если формат ответа отличается. +2. Реализовать `ContentProvider` или artist-only `ArtistProvider` РІ `lib/backend/providers`. +3. Зарегистрировать новый `apiType` РІ `ProviderFactory`. +4. Добавить config через Providers UI или seed РІ `ProviderRepository`. -## Как добавить провайдера - -1. Добавить mapper в `lib/backend/mappers`, если формат ответа отличается. -2. Реализовать `ContentProvider` в `lib/backend/providers`. -3. Зарегистрировать новый `apiType` в `ProviderFactory`. -4. Добавить config через `ProviderManager` или UI Providers. - -Интерфейс провайдера: - -```dart -abstract class ContentProvider { - String get id; - String get name; - String get baseUrl; - - Future> searchPosts({ - required List tags, - required int page, - int limit = 50, - String? rating, - }); - - Future getPost(String id); - Future checkHealth(); -} -``` - -## Локальная база - -Isar хранит: - -- configs провайдеров; -- health status и diagnostics; -- cached metadata постов; -- избранное; -- коллекции и связи collection-post; -- историю поиска; -- историю просмотренных постов; -- app settings. - -Кэш хранит только metadata. Оригинальные медиафайлы не скачиваются автоматически. - -## Сборка и запуск - -Установить зависимости: +## Запуск Рё СЃР±РѕСЂРєР° ```bash flutter pub get -``` - -Запустить: - -```bash +flutter analyze +flutter test flutter run -d windows -flutter run -d android -``` - -Собрать релиз: - -```bash flutter build windows flutter build apk ``` -Собрать Windows installer: - -```powershell -& "$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe" installer\Lunaris.iss -``` - -## Важные заметки - -- На Windows для Flutter plugins может понадобиться Developer Mode. -- Android-сборка требует Android SDK и принятые `flutter doctor --android-licenses`. -- Linux build нужно собирать на Linux-хосте. -- Если путь проекта содержит апостроф, Flutter Windows/test tooling может ломаться. Для сборки можно использовать копию проекта в пути без спецсимволов. -- SWF работает только на Windows через Ruffle/WebView. На Android он намеренно отключён. -- Для SWF на Windows может понадобиться Microsoft WebView2 Runtime. - -## Безопасность - -- Lunaris использует публичные API и metadata. -- Приложение не обходит ограничения сайтов. -- Оригинальные файлы скачиваются только вручную по действию пользователя. -- Dio использует нормальный User-Agent. -- Retry/backoff ограничены. -- NSFW/blur/filter настройки работают локально. - -## Тесты +Windows installer собирается через Inno Setup: ```bash -flutter analyze -flutter test +ISCC installer/Lunaris.iss ``` -Покрыты backend-сервисы, provider parsing, smart blacklist, viewed history, settings migration и tag chip input. +## Безопасность + +- Feed работает СЃ preview/sample metadata Рё РЅРµ скачивает full files автоматически. +- Скачивание фото/видео/SWF выполняется только РїРѕ СЏРІРЅРѕРјСѓ действию пользователя. +- Приложение уважает rate limits Рё использует retry/backoff. +- API keys/user data хранятся локально Рё попадают РІ export JSON только РїРѕ действию пользователя. + diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 11fe35b..55a5b1f 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -42,3 +42,7 @@ android { flutter { source = "../.." } + +dependencies { + implementation("androidx.core:core-ktx:1.13.1") +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index aef4844..daf8498 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ + + + +