7.5 KiB
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.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:
gelboorurule34realboorudanboorumoeboorue621
Один упавший провайдер не ломает общий feed: ошибки сохраняются в diagnostics, остальные провайдеры продолжают отдавать посты.
Как добавить провайдера
- Добавить mapper в
lib/backend/mappers, если формат ответа отличается. - Реализовать
ContentProviderвlib/backend/providers. - Зарегистрировать новый
apiTypeвProviderFactory. - Добавить config через
ProviderManagerили UI Providers.
Интерфейс провайдера:
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. Оригинальные медиафайлы не скачиваются автоматически.
Сборка и запуск
Установить зависимости:
flutter pub get
Запустить:
flutter run -d windows
flutter run -d android
Собрать релиз:
flutter build windows
flutter build apk
Собрать Windows installer:
& "$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 настройки работают локально.
Тесты
flutter analyze
flutter test
Покрыты backend-сервисы, provider parsing, smart blacklist, viewed history, settings migration и tag chip input.