Files
Prisma/README.md
T

195 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lunaris
Lunaris — локальное Flutter-приложение для просмотра booru/gelbooru/rule34-подобных источников в Pinterest-стиле.
Приложение не использует отдельный 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 сборки.
## Скачать
Готовые сборки лежат в Gitea Releases:
[Lunaris v1.1.0](https://gitea.rardogsynapse.online/RarDog/RuleGelApp/releases/tag/v1.1.0)
- `Lunaris-v1.1.0.apk` — APK для Android.
- `LunarisSetup-v1.1.0.exe` — установщик для Windows.
- `LunarisPortable-v1.1.0.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
## Архитектура
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.
- `lib/backend/di` — Riverpod providers для backend/core.
- `lib/app` — приложение, роутер, тема и responsive helpers.
- `lib/shared/widgets` — общие UI-компоненты.
- `lib/features` — экраны и контроллеры фич.
## Экраны
- `/` — главный 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`
Realbooru оставлен в списке провайдеров, но выключен по умолчанию, потому что его публичный API сейчас нестабилен.
Поддерживаемые `apiType`:
- `gelbooru`
- `rule34`
- `realbooru`
- `danbooru`
- `moebooru`
- `e621`
Один упавший провайдер не ломает общий feed: ошибки сохраняются в diagnostics, остальные провайдеры продолжают отдавать посты.
## Как добавить провайдера
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<List<Post>> searchPosts({
required List<String> tags,
required int page,
int limit = 50,
String? rating,
});
Future<Post?> getPost(String id);
Future<ProviderHealth> checkHealth();
}
```
## Локальная база
Isar хранит:
- configs провайдеров;
- health status и diagnostics;
- cached metadata постов;
- избранное;
- коллекции и связи collection-post;
- историю поиска;
- историю просмотренных постов;
- app settings.
Кэш хранит только metadata. Оригинальные медиафайлы не скачиваются автоматически.
## Сборка и запуск
Установить зависимости:
```bash
flutter pub get
```
Запустить:
```bash
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 настройки работают локально.
## Тесты
```bash
flutter analyze
flutter test
```
Покрыты backend-сервисы, provider parsing, smart blacklist, viewed history, settings migration и tag chip input.