feat: полный ребрендинг интерфейса, User-Agent и системных служб в Prisma (v3.4.1)
Build and Release / Build Windows x64 (push) Has been cancelled

This commit is contained in:
2026-09-05 11:02:09 +03:00
parent 583f60e706
commit 8ff2efd84c
27 changed files with 1763 additions and 1744 deletions
+1 -1
View File
@@ -10,7 +10,7 @@
</p> </p>
<p align="center"> <p align="center">
<a href="https://github.com/RarDog/Prisma/releases"><img src="https://img.shields.io/badge/Version-3.4.0-8A2BE2?style=for-the-badge&logo=semver&logoColor=white" alt="Version 3.4.0" /></a> <a href="https://github.com/RarDog/Prisma/releases"><img src="https://img.shields.io/badge/Version-3.4.1-8A2BE2?style=for-the-badge&logo=semver&logoColor=white" alt="Version 3.4.1" /></a>
<img src="https://img.shields.io/badge/Flutter-3.47+-02569B?style=for-the-badge&logo=flutter&logoColor=white" alt="Flutter" /> <img src="https://img.shields.io/badge/Flutter-3.47+-02569B?style=for-the-badge&logo=flutter&logoColor=white" alt="Flutter" />
<img src="https://img.shields.io/badge/Platform-Android%20%7C%20Linux%20%7C%20Windows-00C853?style=for-the-badge" alt="Platforms" /> <img src="https://img.shields.io/badge/Platform-Android%20%7C%20Linux%20%7C%20Windows-00C853?style=for-the-badge" alt="Platforms" />
<a href="https://github.com/RarDog/Prisma/wiki"><img src="https://img.shields.io/badge/Wiki-Documentation-FF6F00?style=for-the-badge&logo=gitbook&logoColor=white" alt="Wiki" /></a> <a href="https://github.com/RarDog/Prisma/wiki"><img src="https://img.shields.io/badge/Wiki-Documentation-FF6F00?style=for-the-badge&logo=gitbook&logoColor=white" alt="Wiki" /></a>
@@ -1,4 +1,4 @@
#define MyAppName "Lunaris" #define MyAppName "Prisma"
#define MyAppVersion "2.0.1" #define MyAppVersion "2.0.1"
#define MyAppPublisher "RarDog" #define MyAppPublisher "RarDog"
#define MyAppExeName "gel_rule_app.exe" #define MyAppExeName "gel_rule_app.exe"
@@ -13,7 +13,7 @@ DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes DisableProgramGroupPage=yes
PrivilegesRequired=lowest PrivilegesRequired=lowest
OutputDir=..\dist OutputDir=..\dist
OutputBaseFilename=LunarisSetup OutputBaseFilename=PrismaSetup
SetupIconFile=..\windows\runner\resources\app_icon.ico SetupIconFile=..\windows\runner\resources\app_icon.ico
Compression=lzma2 Compression=lzma2
SolidCompression=yes SolidCompression=yes
+1 -1
View File
@@ -97,7 +97,7 @@ class _AppOverlayState extends ConsumerState<_AppOverlay> {
await showDialog<void>( await showDialog<void>(
context: context, context: context,
builder: (context) => AlertDialog( builder: (context) => AlertDialog(
title: Text('${strings.appUpdateAvailable}: Lunaris ${info.version}'), title: Text('${strings.appUpdateAvailable}: Prisma ${info.version}'),
content: ConstrainedBox( content: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 520), constraints: const BoxConstraints(maxWidth: 520),
child: SingleChildScrollView( child: SingleChildScrollView(
+2 -2
View File
@@ -1,3 +1,3 @@
const appDisplayVersion = '3.4.0'; const appDisplayVersion = '3.4.1';
const appBuildNumber = 74; const appBuildNumber = 75;
const appReleaseChannel = 'Stable'; const appReleaseChannel = 'Stable';
+71 -59
View File
@@ -1,5 +1,14 @@
const lunarisChangelog = [ const prismaChangelog = [
LunarisChange( PrismaChange(
version: '3.4.1',
title: 'Полный ребрендинг интерфейса: заголовок ленты, окно «О приложении» и системные службы',
bullets: [
'Полное обновление названия в интерфейсе: заголовок в шапке ленты заменен на Prisma, обновлен логотип и карточка в диалоге «О приложении».',
'Окна обновлений и чейнджлогов: все диалоги проверки обновлений, чейнджлога и бета-версий теперь используют имя Prisma.',
'Системные службы и User-Agent: сетевой стек, экспорт резервных копий и кэш тегов переведены на Prisma с автоматической миграцией сохраненных данных.',
],
),
PrismaChange(
version: '3.4.0', version: '3.4.0',
title: 'Ребрендинг в Prisma: новое имя, комфортная прокрутка анонсов и обновленные репозитории', title: 'Ребрендинг в Prisma: новое имя, комфортная прокрутка анонсов и обновленные репозитории',
bullets: [ bullets: [
@@ -8,7 +17,7 @@ const lunarisChangelog = [
'Синхронизация репозиториев: репозитории на GitHub и Gitea переведены на Prisma, ссылки внутри приложения и служба автообновления переключены на новые адреса.', 'Синхронизация репозиториев: репозитории на GitHub и Gitea переведены на Prisma, ссылки внутри приложения и служба автообновления переключены на новые адреса.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.3.1', version: '3.3.1',
title: 'Улучшенное разделение текстовых постов и облачных зеркал', title: 'Улучшенное разделение текстовых постов и облачных зеркал',
bullets: [ bullets: [
@@ -17,7 +26,7 @@ const lunarisChangelog = [
'Чистый и нативный вид карточек: если у медиапоста есть только ссылки или только описание, отображается аккуратная монолитная секция с соответствующим заголовком и иконкой без лишних переключателей.', 'Чистый и нативный вид карточек: если у медиапоста есть только ссылки или только описание, отображается аккуратная монолитная секция с соответствующим заголовком и иконкой без лишних переключателей.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.3.0', version: '3.3.0',
title: 'Редизайн личных сообщений и рассылок артиста, нативная поддержка текстовых публикаций', title: 'Редизайн личных сообщений и рассылок артиста, нативная поддержка текстовых публикаций',
bullets: [ bullets: [
@@ -28,7 +37,7 @@ const lunarisChangelog = [
'Поддержка анонсов в Kemono и Coomer: API анонсов и персональных сообщений теперь полноценно работает для всех поддерживаемых провайдеров.', 'Поддержка анонсов в Kemono и Coomer: API анонсов и персональных сообщений теперь полноценно работает для всех поддерживаемых провайдеров.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.2.0', version: '3.2.0',
title: 'Стабильный полноэкранный режим: сохранение воспроизведения, устранение вылетов плеера и чистый интерфейс', title: 'Стабильный полноэкранный режим: сохранение воспроизведения, устранение вылетов плеера и чистый интерфейс',
bullets: [ bullets: [
@@ -38,7 +47,7 @@ const lunarisChangelog = [
'Быстрое скрытие и показ контролов: касание свободной области видео плавно переключает видимость панели управления, а при нажатии на кнопки таймер автоскрытия автоматически обновляется.', 'Быстрое скрытие и показ контролов: касание свободной области видео плавно переключает видимость панели управления, а при нажатии на кнопки таймер автоскрытия автоматически обновляется.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.9', version: '3.1.9',
title: 'Полноэкранный плеер 2.0: мгновенный переход без задержек, жесты яркости и скраббинг с превью', title: 'Полноэкранный плеер 2.0: мгновенный переход без задержек, жесты яркости и скраббинг с превью',
bullets: [ bullets: [
@@ -48,7 +57,7 @@ const lunarisChangelog = [
'Сброс яркости: при выходе из полноэкранного режима системный уровень яркости экрана аккуратно восстанавливается.', 'Сброс яркости: при выходе из полноэкранного режима системный уровень яркости экрана аккуратно восстанавливается.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.8', version: '3.1.8',
title: 'Безупречный полноэкранный плеер: устранение остановки при развертывании и отзывчивые кнопки управления', title: 'Безупречный полноэкранный плеер: устранение остановки при развертывании и отзывчивые кнопки управления',
bullets: [ bullets: [
@@ -58,7 +67,7 @@ const lunarisChangelog = [
'Синхронизация состояния при сворачивании: плеер точно запоминает состояние паузы/воспроизведения при выходе из полноэкранного режима обратно в пост.', 'Синхронизация состояния при сворачивании: плеер точно запоминает состояние паузы/воспроизведения при выходе из полноэкранного режима обратно в пост.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.7', version: '3.1.7',
title: 'Устранение критического сбоя при открытии видеопоста (SIGSEGV в libmpv)', title: 'Устранение критического сбоя при открытии видеопоста (SIGSEGV в libmpv)',
bullets: [ bullets: [
@@ -67,7 +76,7 @@ const lunarisChangelog = [
'Надежный фоллбэк при редких ошибках кодека: при несовместимости аппаратного декодера плеер бесшовно переключается на программный FFmpeg-декодер без риска краша.', 'Надежный фоллбэк при редких ошибках кодека: при несовместимости аппаратного декодера плеер бесшовно переключается на программный FFmpeg-декодер без риска краша.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.6', version: '3.1.6',
title: 'Надежный полноэкранный плеер, сохранение провайдеров в поиске, громкость и устранение ошибки кодека', title: 'Надежный полноэкранный плеер, сохранение провайдеров в поиске, громкость и устранение ошибки кодека',
bullets: [ bullets: [
@@ -77,7 +86,7 @@ const lunarisChangelog = [
'Автоматический fallback для ошибки Could not open codec: видеоплеер получил безопасные профили декодирования и автопереключение на программный лавк-декодер (FFmpeg software fallback) при редких сбоях аппаратного ускорения.', 'Автоматический fallback для ошибки Could not open codec: видеоплеер получил безопасные профили декодирования и автопереключение на программный лавк-декодер (FFmpeg software fallback) при редких сбоях аппаратного ускорения.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.5', version: '3.1.5',
title: 'Сохранение громкости видео, исправление полноэкранного плеера, фильтрации и удобства комментариев', title: 'Сохранение громкости видео, исправление полноэкранного плеера, фильтрации и удобства комментариев',
bullets: [ bullets: [
@@ -88,7 +97,7 @@ const lunarisChangelog = [
'Удобный доступ к комментариям в посте: увеличен отступ снизу в деталях поста и расширена зона клика блока комментариев, позволяя комфортно прокрутить их выше системных жестов навигации.', 'Удобный доступ к комментариям в посте: увеличен отступ снизу в деталях поста и расширена зона клика блока комментариев, позволяя комфортно прокрутить их выше системных жестов навигации.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.4', version: '3.1.4',
title: 'Оптимизация видеоплеера — адаптивная высота и идеальное прилегание полосы воспроизведения', title: 'Оптимизация видеоплеера — адаптивная высота и идеальное прилегание полосы воспроизведения',
bullets: [ bullets: [
@@ -97,7 +106,7 @@ const lunarisChangelog = [
'Компактные элементы управления: выровнены буферный трек и слайдер прокрутки, оптимизирован градиент затенения для максимальной видимости и удобства управления.', 'Компактные элементы управления: выровнены буферный трек и слайдер прокрутки, оптимизирован градиент затенения для максимальной видимости и удобства управления.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.3', version: '3.1.3',
title: 'iPhone Liquid Glass — Источники, Проверка сети и Навигация назад по вкладкам', title: 'iPhone Liquid Glass — Источники, Проверка сети и Навигация назад по вкладкам',
bullets: [ bullets: [
@@ -107,7 +116,7 @@ const lunarisChangelog = [
'Liquid Glass редизайн проверки состояния источников (Provider Check): карточка общих метрик сети (онлайн/офлайн, средний пинг), раскрывающиеся аккордеоны детальной диагностики, живые светодиодные LED-индикаторы статуса и кнопка одновременной проверки всех провайдеров.', 'Liquid Glass редизайн проверки состояния источников (Provider Check): карточка общих метрик сети (онлайн/офлайн, средний пинг), раскрывающиеся аккордеоны детальной диагностики, живые светодиодные LED-индикаторы статуса и кнопка одновременной проверки всех провайдеров.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.2', version: '3.1.2',
title: 'Оптимизация производительности: устранение лагов при скролле к тегам', title: 'Оптимизация производительности: устранение лагов при скролле к тегам',
bullets: [ bullets: [
@@ -117,7 +126,7 @@ const lunarisChangelog = [
'Интеллектуальный лимит начального отображения: оптимизировано первоначальное количество отображаемых тегов в огромных категориях с удобной кнопкой быстрого раскрытия.', 'Интеллектуальный лимит начального отображения: оптимизировано первоначальное количество отображаемых тегов в огромных категориях с удобной кнопкой быстрого раскрытия.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.1', version: '3.1.1',
title: 'Деление тегов по стилю e621/Gelbooru/Rule34 и исправление поиска тегов со скобками', title: 'Деление тегов по стилю e621/Gelbooru/Rule34 и исправление поиска тегов со скобками',
bullets: [ bullets: [
@@ -129,7 +138,7 @@ const lunarisChangelog = [
'Liquid Glass оформление блока тегов в детальном просмотре поста на мобильных и десктоп устройствах.', 'Liquid Glass оформление блока тегов в детальном просмотре поста на мобильных и десктоп устройствах.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.1.0', version: '3.1.0',
title: 'iPhone Liquid Glass — Поиск, Избранное, История и исправление доступности', title: 'iPhone Liquid Glass — Поиск, Избранное, История и исправление доступности',
bullets: [ bullets: [
@@ -139,7 +148,7 @@ const lunarisChangelog = [
'Тактильный отклик и стеклянные пилюли: быстрые операторы, категории, недавние запросы, фильтры медиа и переключатели разделов получили матовое оформление и вибрационный отклик Haptic Feedback.', 'Тактильный отклик и стеклянные пилюли: быстрые операторы, категории, недавние запросы, фильтры медиа и переключатели разделов получили матовое оформление и вибрационный отклик Haptic Feedback.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.0.9', version: '3.0.9',
title: 'Коррекция позиции кнопки настроек и отображения кнопок JSON и бэкапа', title: 'Коррекция позиции кнопки настроек и отображения кнопок JSON и бэкапа',
bullets: [ bullets: [
@@ -148,7 +157,7 @@ const lunarisChangelog = [
'Улучшенный дизайн и сетка кнопок экспорта/импорта: кнопки бэкапа и JSON организованы в симметричные аккуратные строки с яркими акцентными бейджами.', 'Улучшенный дизайн и сетка кнопок экспорта/импорта: кнопки бэкапа и JSON организованы в симметричные аккуратные строки с яркими акцентными бейджами.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.0.8', version: '3.0.8',
title: 'iPhone Liquid Glass — раздел «Настройки» и парящая стеклянная кнопка', title: 'iPhone Liquid Glass — раздел «Настройки» и парящая стеклянная кнопка',
bullets: [ bullets: [
@@ -158,7 +167,7 @@ const lunarisChangelog = [
'Стеклянная быстрая навигация по категориям: зафиксированная панель категорий с размытием фона и тактильным откликом при переключении разделов.', 'Стеклянная быстрая навигация по категориям: зафиксированная панель категорий с размытием фона и тактильным откликом при переключении разделов.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.0.7', version: '3.0.7',
title: 'Liquid Glass Navigation Bar — парящая стеклянная панель и анимированная пилюля', title: 'Liquid Glass Navigation Bar — парящая стеклянная панель и анимированная пилюля',
bullets: [ bullets: [
@@ -168,7 +177,7 @@ const lunarisChangelog = [
'Глубина контента: контент ленты, поиска и галереи плавно просвечивает и размывается под стеклянной панелью при прокрутке.', 'Глубина контента: контент ленты, поиска и галереи плавно просвечивает и размывается под стеклянной панелью при прокрутке.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.0.6', version: '3.0.6',
title: 'Улучшение недавних запросов и отображения тегов', title: 'Улучшение недавних запросов и отображения тегов',
bullets: [ bullets: [
@@ -178,7 +187,7 @@ const lunarisChangelog = [
'Удобное удаление: увеличенная область нажатия для кнопки удаления (крестика) предотвращает случайные нажатия на сам запрос.', 'Удобное удаление: увеличенная область нажатия для кнопки удаления (крестика) предотвращает случайные нажатия на сам запрос.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.0.5', version: '3.0.5',
title: 'Интерактивные ссылки на соцсети и авторов в объявлениях и описаниях', title: 'Интерактивные ссылки на соцсети и авторов в объявлениях и описаниях',
bullets: [ bullets: [
@@ -187,7 +196,7 @@ const lunarisChangelog = [
'Корректная очистка пунктуации: знаки препинания в конце URL (!, ?, :, ., ,, ;, >) больше не ломают ссылки.', 'Корректная очистка пунктуации: знаки препинания в конце URL (!, ?, :, ., ,, ;, >) больше не ломают ссылки.',
], ],
), ),
LunarisChange( PrismaChange(
version: '3.0.0', version: '3.0.0',
title: 'Lunaris 3.0 — Глобальное обновление: Дизайн 2.0, Интеграция Pawchive и умная синхронизация', title: 'Lunaris 3.0 — Глобальное обновление: Дизайн 2.0, Интеграция Pawchive и умная синхронизация',
bullets: [ bullets: [
@@ -200,7 +209,7 @@ const lunarisChangelog = [
'Исправление вёрстки: устранены переносы текста в заголовке окна аккаунтов и карточках пользователей на экранах смартфонов.', 'Исправление вёрстки: устранены переносы текста в заголовке окна аккаунтов и карточках пользователей на экранах смартфонов.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.10', version: '2.3.10',
title: 'Выгрузка локального избранного в Pawchive и двусторонняя синхронизация', title: 'Выгрузка локального избранного в Pawchive и двусторонняя синхронизация',
bullets: [ bullets: [
@@ -210,7 +219,7 @@ const lunarisChangelog = [
'Синхронизация в реальном времени с любых провайдеров: при добавлении автора в избранное в лентах Kemono, Coomer или Pawchive изменение мгновенно передаётся на сервер Pawchive.', 'Синхронизация в реальном времени с любых провайдеров: при добавлении автора в избранное в лентах Kemono, Coomer или Pawchive изменение мгновенно передаётся на сервер Pawchive.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.9', version: '2.3.9',
title: 'Исправление входа и синхронизации аккаунтов Pawchive', title: 'Исправление входа и синхронизации аккаунтов Pawchive',
bullets: [ bullets: [
@@ -219,7 +228,7 @@ const lunarisChangelog = [
'Информативные ошибки: понятные сообщения на русском при неверном пароле или сбое сети вместо сырых исключений Dio.', 'Информативные ошибки: понятные сообщения на русском при неверном пароле или сбое сети вместо сырых исключений Dio.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.8', version: '2.3.8',
title: 'ABI-Aware Auto-Update — правильный APK для вашего процессора', title: 'ABI-Aware Auto-Update — правильный APK для вашего процессора',
bullets: [ bullets: [
@@ -229,7 +238,7 @@ const lunarisChangelog = [
'Кеш ABI: архитектура определяется один раз за сеанс.', 'Кеш ABI: архитектура определяется один раз за сеанс.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.7', version: '2.3.7',
title: 'Lazy Media Dimensions for Pawchive & Unknown-Size Providers', title: 'Lazy Media Dimensions for Pawchive & Unknown-Size Providers',
bullets: [ bullets: [
@@ -238,7 +247,7 @@ const lunarisChangelog = [
'Session Cache: resolved image dimensions are cached in memory for the lifetime of the app so repeated visits to the same post do not trigger re-downloads.', 'Session Cache: resolved image dimensions are cached in memory for the lifetime of the app so repeated visits to the same post do not trigger re-downloads.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.6', version: '2.3.6',
title: 'Pawchive Accounts Integration & Favorites Synchronization', title: 'Pawchive Accounts Integration & Favorites Synchronization',
bullets: [ bullets: [
@@ -249,7 +258,7 @@ const lunarisChangelog = [
'Dedicated UI & Quick Access: manage connected accounts, view sync stats, and trigger synchronization from the Artists screen, Favorites modal, and Settings screen.', 'Dedicated UI & Quick Access: manage connected accounts, view sync stats, and trigger synchronization from the Artists screen, Favorites modal, and Settings screen.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.5', version: '2.3.5',
title: 'Fullscreen Video Auto-Rotation & Orientation Controls', title: 'Fullscreen Video Auto-Rotation & Orientation Controls',
bullets: [ bullets: [
@@ -258,7 +267,7 @@ const lunarisChangelog = [
'Clean Orientation Recovery: exiting fullscreen seamlessly restores system navigation bars (Edge-to-Edge) and restores unrestricted device sensor orientations.', 'Clean Orientation Recovery: exiting fullscreen seamlessly restores system navigation bars (Edge-to-Edge) and restores unrestricted device sensor orientations.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.4', version: '2.3.4',
title: 'OverlayPortal Architecture & Search UI Unblocking', title: 'OverlayPortal Architecture & Search UI Unblocking',
bullets: [ bullets: [
@@ -269,7 +278,7 @@ const lunarisChangelog = [
'Non-Blocking Outside Tap: tapping outside the suggestion dropdown smoothly dismisses suggestions while allowing the touch event to pass through directly to the underlying button or post.', 'Non-Blocking Outside Tap: tapping outside the suggestion dropdown smoothly dismisses suggestions while allowing the touch event to pass through directly to the underlying button or post.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.3', version: '2.3.3',
title: 'Tag Suggestions Overlay Fix & Rule34 API Alignment', title: 'Tag Suggestions Overlay Fix & Rule34 API Alignment',
bullets: [ bullets: [
@@ -279,7 +288,7 @@ const lunarisChangelog = [
'Rule34 Authentication & Outage Handling: added detection for "missing authentication", rate limits, and server overload/search down ("success": false) with informative guidance to enter API Key & User ID.', 'Rule34 Authentication & Outage Handling: added detection for "missing authentication", rate limits, and server overload/search down ("success": false) with informative guidance to enter API Key & User ID.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.2', version: '2.3.2',
title: 'Gelbooru DAPI Compliance & Tag Query Optimization', title: 'Gelbooru DAPI Compliance & Tag Query Optimization',
bullets: [ bullets: [
@@ -289,7 +298,7 @@ const lunarisChangelog = [
'Throttling & Auth Guidance: enhanced API credentials helper text and informative error messages with direct instructions to configure API Key & User ID from Gelbooru account options.', 'Throttling & Auth Guidance: enhanced API credentials helper text and informative error messages with direct instructions to configure API Key & User ID from Gelbooru account options.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.1', version: '2.3.1',
title: 'Cloud Mirrors & Author Announcements Fixes', title: 'Cloud Mirrors & Author Announcements Fixes',
bullets: [ bullets: [
@@ -298,7 +307,7 @@ const lunarisChangelog = [
'Author Announcements HTML Cleaning: stripped all raw <p style="">, <strong>, and formatting artifacts from artist announcements, rendering clean readable text and clickable service link chips.', 'Author Announcements HTML Cleaning: stripped all raw <p style="">, <strong>, and formatting artifacts from artist announcements, rendering clean readable text and clickable service link chips.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.3.0', version: '2.3.0',
title: 'Artist Cloud Drives & External Video Mirrors', title: 'Artist Cloud Drives & External Video Mirrors',
bullets: [ bullets: [
@@ -310,7 +319,7 @@ const lunarisChangelog = [
'Artist Commentary Card: formatted display of author notes, instructions, and text below post details.', 'Artist Commentary Card: formatted display of author notes, instructions, and text below post details.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.2.0', version: '2.2.0',
title: 'Offline Mode Overhaul & Post Details Screen Redesign', title: 'Offline Mode Overhaul & Post Details Screen Redesign',
bullets: [ bullets: [
@@ -321,7 +330,7 @@ const lunarisChangelog = [
'Unified Neighbor Strip & Tags Card: post neighbor thumbnail strip now available on both mobile and desktop, alongside modern rounded tag blocks and chat-bubble comments.', 'Unified Neighbor Strip & Tags Card: post neighbor thumbnail strip now available on both mobile and desktop, alongside modern rounded tag blocks and chat-bubble comments.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.1.0', version: '2.1.0',
title: '4-Tab Major Redesign: Search, Favorites, History & Collections', title: '4-Tab Major Redesign: Search, Favorites, History & Collections',
bullets: [ bullets: [
@@ -331,7 +340,7 @@ const lunarisChangelog = [
'Collections Tab Redesign: Pinterest-style collection cards with 2x2 thumbnail mosaic covers and glassmorphism post counters, modernized collection details screen with description banner, and elegant squircle creation dialog.', 'Collections Tab Redesign: Pinterest-style collection cards with 2x2 thumbnail mosaic covers and glassmorphism post counters, modernized collection details screen with description banner, and elegant squircle creation dialog.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.15', version: '2.0.15',
title: 'Settings 2.0 Layout Fixes & Pinned Quick Navigation', title: 'Settings 2.0 Layout Fixes & Pinned Quick Navigation',
bullets: [ bullets: [
@@ -342,7 +351,7 @@ const lunarisChangelog = [
'Header text overflow protections: wrapped title texts in Expanded across all settings cards.', 'Header text overflow protections: wrapped title texts in Expanded across all settings cards.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.14', version: '2.0.14',
title: 'Settings 2.0: Modern Grouped Design & Quick Ergonomics', title: 'Settings 2.0: Modern Grouped Design & Quick Ergonomics',
bullets: [ bullets: [
@@ -354,7 +363,7 @@ const lunarisChangelog = [
'Hero Brand Banner: polished app presentation card in About section with glowing icon, version build badge, update checker, and GitHub repository link.', 'Hero Brand Banner: polished app presentation card in About section with glowing icon, version build badge, update checker, and GitHub repository link.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.13', version: '2.0.13',
title: 'Toolbar Section Dividers & Post Card Badge Stacking Fix', title: 'Toolbar Section Dividers & Post Card Badge Stacking Fix',
bullets: [ bullets: [
@@ -364,7 +373,7 @@ const lunarisChangelog = [
'Expanded Bottom Gradient: increased bottom cinematic gradient height to 64dp for clean text and badge contrast.', 'Expanded Bottom Gradient: increased bottom cinematic gradient height to 64dp for clean text and badge contrast.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.12', version: '2.0.12',
title: 'Feed 2.0: Pinterest Modern Redesign & Sleek Cards', title: 'Feed 2.0: Pinterest Modern Redesign & Sleek Cards',
bullets: [ bullets: [
@@ -377,7 +386,7 @@ const lunarisChangelog = [
'Polished Search Presets: stylish bookmark capsules for quick access to saved search queries.', 'Polished Search Presets: stylish bookmark capsules for quick access to saved search queries.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.11', version: '2.0.11',
title: 'Mobile Video Player Redesign & Format Recognition Fix', title: 'Mobile Video Player Redesign & Format Recognition Fix',
bullets: [ bullets: [
@@ -391,7 +400,7 @@ const lunarisChangelog = [
'Sleek Neon Seekbar with live network buffer progress indicator.', 'Sleek Neon Seekbar with live network buffer progress indicator.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.10', version: '2.0.10',
title: 'Fix "and" Tag Operator Retention, Suggestion Preceding Drafts & AND Chip Styling', title: 'Fix "and" Tag Operator Retention, Suggestion Preceding Drafts & AND Chip Styling',
bullets: [ bullets: [
@@ -401,7 +410,7 @@ const lunarisChangelog = [
'Distinct visual styling for AND separator chips with secondary theme container and alt-route icon.', 'Distinct visual styling for AND separator chips with secondary theme container and alt-route icon.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.9', version: '2.0.9',
title: 'Instant Tag Suggestions, Persistent Disk Cache, Expanded History & Match Highlighting', title: 'Instant Tag Suggestions, Persistent Disk Cache, Expanded History & Match Highlighting',
bullets: [ bullets: [
@@ -415,7 +424,7 @@ const lunarisChangelog = [
'Dedicated Clear Tag Cache actions in Settings and Cache Manager.', 'Dedicated Clear Tag Cache actions in Settings and Cache Manager.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.8', version: '2.0.8',
title: 'Shared Context Modifiers for Multi-Tag Search & Clean Tag Filtering', title: 'Shared Context Modifiers for Multi-Tag Search & Clean Tag Filtering',
bullets: [ bullets: [
@@ -424,7 +433,7 @@ const lunarisChangelog = [
'Resolved "No posts yet" bug by adapting client post validation to multi-tag stream groups and stripping operator keywords from booru queries.', 'Resolved "No posts yet" bug by adapting client post validation to multi-tag stream groups and stripping operator keywords from booru queries.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.7', version: '2.0.7',
title: 'Independent Multi-Tag Search Streams, Local "and" Connector, Pawchive in Main Feed & Reverts', title: 'Independent Multi-Tag Search Streams, Local "and" Connector, Pawchive in Main Feed & Reverts',
bullets: [ bullets: [
@@ -435,7 +444,7 @@ const lunarisChangelog = [
'Removed external linked accounts bar from artist posts screen.', 'Removed external linked accounts bar from artist posts screen.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.6', version: '2.0.6',
title: 'Pawchive Deep Integration: Global Posts Feed, Artist Tags, Announcements, Links & Server Media Filter', title: 'Pawchive Deep Integration: Global Posts Feed, Artist Tags, Announcements, Links & Server Media Filter',
bullets: [ bullets: [
@@ -446,7 +455,7 @@ const lunarisChangelog = [
'Server-side media filtering (Photos, Videos, GIFs) querying the entire author archive through the API.', 'Server-side media filtering (Photos, Videos, GIFs) querying the entire author archive through the API.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.5', version: '2.0.5',
title: '10 QoL Super-Update: AMOLED, Dynamic Colors, Grid switch, Share, Presets, Cache & Backup', title: '10 QoL Super-Update: AMOLED, Dynamic Colors, Grid switch, Share, Presets, Cache & Backup',
bullets: [ bullets: [
@@ -461,7 +470,7 @@ const lunarisChangelog = [
'Full JSON backup export and import for seamless configuration sync.', 'Full JSON backup export and import for seamless configuration sync.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.4', version: '2.0.4',
title: 'Platform service selection & media type filtering in artist posts', title: 'Platform service selection & media type filtering in artist posts',
bullets: [ bullets: [
@@ -470,7 +479,7 @@ const lunarisChangelog = [
'Full-screen post pager respects active media type filters during swiping.', 'Full-screen post pager respects active media type filters during swiping.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.3', version: '2.0.3',
title: 'Infinite artist pagination, favorite artists modal, and card layout polish', title: 'Infinite artist pagination, favorite artists modal, and card layout polish',
bullets: [ bullets: [
@@ -480,7 +489,7 @@ const lunarisChangelog = [
'Removed mapping truncation in Pawchive provider to deliver all post attachments cleanly.', 'Removed mapping truncation in Pawchive provider to deliver all post attachments cleanly.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.2', version: '2.0.2',
title: 'Swipeable media pager, favorite artists, performance and Pawchive', title: 'Swipeable media pager, favorite artists, performance and Pawchive',
bullets: [ bullets: [
@@ -492,7 +501,7 @@ const lunarisChangelog = [
'In-app update checks and downloads connected directly to RarDog GitHub releases.', 'In-app update checks and downloads connected directly to RarDog GitHub releases.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.1', version: '2.0.1',
title: 'Localization, zoom and favorite downloads', title: 'Localization, zoom and favorite downloads',
bullets: [ bullets: [
@@ -503,7 +512,7 @@ const lunarisChangelog = [
'Favorites can optionally auto-download media in the background, with local files tracked separately from favorites.', 'Favorites can optionally auto-download media in the background, with local files tracked separately from favorites.',
], ],
), ),
LunarisChange( PrismaChange(
version: '2.0.0', version: '2.0.0',
title: 'Customization and provider polish', title: 'Customization and provider polish',
bullets: [ bullets: [
@@ -514,7 +523,7 @@ const lunarisChangelog = [
'Kemono and Coomer creator search uses the current mbahArip keyword endpoints with public API fallbacks.', 'Kemono and Coomer creator search uses the current mbahArip keyword endpoints with public API fallbacks.',
], ],
), ),
LunarisChange( PrismaChange(
version: '1.1.2', version: '1.1.2',
title: 'Experimental tag and Artists update', title: 'Experimental tag and Artists update',
bullets: [ bullets: [
@@ -524,7 +533,7 @@ const lunarisChangelog = [
'This is an experimental release for checking the new tag and Artists behavior.', 'This is an experimental release for checking the new tag and Artists behavior.',
], ],
), ),
LunarisChange( PrismaChange(
version: '1.1.1', version: '1.1.1',
title: 'Artists and in-app updates', title: 'Artists and in-app updates',
bullets: [ bullets: [
@@ -534,7 +543,7 @@ const lunarisChangelog = [
'Tag input keeps its scroll position steadier while typing and committing chips.', 'Tag input keeps its scroll position steadier while typing and committing chips.',
], ],
), ),
LunarisChange( PrismaChange(
version: '1.1.0', version: '1.1.0',
title: 'Lunaris rebrand and providers', title: 'Lunaris rebrand and providers',
bullets: [ bullets: [
@@ -544,7 +553,7 @@ const lunarisChangelog = [
'Video player UI preferences are saved across fullscreen, details and restarts.', 'Video player UI preferences are saved across fullscreen, details and restarts.',
], ],
), ),
LunarisChange( PrismaChange(
version: '1.0.2', version: '1.0.2',
title: 'Provider safety fix', title: 'Provider safety fix',
bullets: [ bullets: [
@@ -553,7 +562,7 @@ const lunarisChangelog = [
'Existing enabled legacy configs are disabled so the main feed is not polluted by known-offline APIs.', 'Existing enabled legacy configs are disabled so the main feed is not polluted by known-offline APIs.',
], ],
), ),
LunarisChange( PrismaChange(
version: '1.0.1', version: '1.0.1',
title: 'Mobile polish', title: 'Mobile polish',
bullets: [ bullets: [
@@ -562,7 +571,7 @@ const lunarisChangelog = [
'Tag chip input no longer jumps while typing.', 'Tag chip input no longer jumps while typing.',
], ],
), ),
LunarisChange( PrismaChange(
version: '1.0.0', version: '1.0.0',
title: 'Stable 1.0', title: 'Stable 1.0',
bullets: [ bullets: [
@@ -572,7 +581,7 @@ const lunarisChangelog = [
'Windows portable package is published alongside APK and installer.', 'Windows portable package is published alongside APK and installer.',
], ],
), ),
LunarisChange( PrismaChange(
version: '0.4.3', version: '0.4.3',
title: 'Bugfixes', title: 'Bugfixes',
bullets: [ bullets: [
@@ -584,8 +593,8 @@ const lunarisChangelog = [
), ),
]; ];
class LunarisChange { class PrismaChange {
const LunarisChange({ const PrismaChange({
required this.version, required this.version,
required this.title, required this.title,
required this.bullets, required this.bullets,
@@ -595,3 +604,6 @@ class LunarisChange {
final String title; final String title;
final List<String> bullets; final List<String> bullets;
} }
const lunarisChangelog = prismaChangelog;
typedef LunarisChange = PrismaChange;
+1 -1
View File
@@ -224,7 +224,7 @@ final updateServiceProvider = Provider<UpdateService>((ref) {
connectTimeout: const Duration(seconds: 12), connectTimeout: const Duration(seconds: 12),
receiveTimeout: const Duration(seconds: 12), receiveTimeout: const Duration(seconds: 12),
headers: const { headers: const {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': 'application/json', 'Accept': 'application/json',
}, },
), ),
+1 -1
View File
@@ -46,7 +46,7 @@ class GelbooruProvider
Map<String, String> mediaHeaders(Post post) { Map<String, String> mediaHeaders(Post post) {
final host = Uri.tryParse(baseUrl)?.host; final host = Uri.tryParse(baseUrl)?.host;
return { return {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': '*/*', 'Accept': '*/*',
if (host != null && host.isNotEmpty) 'Referer': '$baseUrl/', if (host != null && host.isNotEmpty) 'Referer': '$baseUrl/',
}; };
+2 -2
View File
@@ -30,7 +30,7 @@ class KemonoProvider
receiveTimeout: const Duration(seconds: 20), receiveTimeout: const Duration(seconds: 20),
headers: const { headers: const {
'Accept': 'application/json', 'Accept': 'application/json',
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
}, },
), ),
); );
@@ -582,7 +582,7 @@ class KemonoProvider
receiveTimeout: const Duration(seconds: 25), receiveTimeout: const Duration(seconds: 25),
headers: const { headers: const {
'Accept': 'application/json', 'Accept': 'application/json',
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
}, },
), ),
); );
+1 -1
View File
@@ -569,7 +569,7 @@ class ProviderManager {
); );
} }
return const Success({ return const Success({
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': '*/*', 'Accept': '*/*',
}); });
} }
+1 -1
View File
@@ -21,7 +21,7 @@ class Rule34Provider extends GelbooruProvider {
@override @override
Map<String, String> mediaHeaders(Post post) => const { Map<String, String> mediaHeaders(Post post) => const {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': '*/*', 'Accept': '*/*',
'Referer': 'https://rule34.xxx/', 'Referer': 'https://rule34.xxx/',
}; };
@@ -60,7 +60,7 @@ class ProviderRepository {
priority: 3, priority: 3,
timeoutSeconds: 20, timeoutSeconds: 20,
customHeaders: const { customHeaders: const {
'User-Agent': 'Lunaris/2.0.2 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.2 Flutter local booru browser',
}, },
createdAt: now, createdAt: now,
updatedAt: now, updatedAt: now,
@@ -74,7 +74,7 @@ class ProviderRepository {
priority: 4, priority: 4,
timeoutSeconds: 20, timeoutSeconds: 20,
customHeaders: const { customHeaders: const {
'User-Agent': 'Lunaris/2.0.2 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.2 Flutter local booru browser',
}, },
createdAt: now, createdAt: now,
updatedAt: now, updatedAt: now,
+2 -2
View File
@@ -52,13 +52,13 @@ class BackupService {
Future<bool> exportBackup() async { Future<bool> exportBackup() async {
final json = await createBackupJson(); final json = await createBackupJson();
final fileName = final fileName =
'lunaris_backup_${DateTime.now().millisecondsSinceEpoch}.json'; 'prisma_backup_${DateTime.now().millisecondsSinceEpoch}.json';
if (Platform.isAndroid) { if (Platform.isAndroid) {
final tempDir = await getTemporaryDirectory(); final tempDir = await getTemporaryDirectory();
final file = File('${tempDir.path}/$fileName'); final file = File('${tempDir.path}/$fileName');
await file.writeAsString(json); await file.writeAsString(json);
await Share.shareXFiles([XFile(file.path)], text: 'Lunaris Backup'); await Share.shareXFiles([XFile(file.path)], text: 'Prisma Backup');
return true; return true;
} }
+1 -1
View File
@@ -224,7 +224,7 @@ class DownloadService {
return { return {
'User-Agent': lower.contains('realbooru') || lower.contains('paheal') 'User-Agent': lower.contains('realbooru') || lower.contains('paheal')
? 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 Chrome/125 Mobile Safari/537.36' ? 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 Chrome/125 Mobile Safari/537.36'
: 'Lunaris/2.0.1 Flutter local booru browser', : 'Prisma/2.0.1 Flutter local booru browser',
'Accept': lower.contains('realbooru') || lower.contains('paheal') 'Accept': lower.contains('realbooru') || lower.contains('paheal')
? 'video/webm,video/mp4,image/avif,image/webp,image/apng,image/*,*/*;q=0.8' ? 'video/webm,video/mp4,image/avif,image/webp,image/apng,image/*,*/*;q=0.8'
: '*/*', : '*/*',
@@ -94,7 +94,7 @@ class PawchiveSyncService {
followRedirects: false, followRedirects: false,
validateStatus: (status) => status != null && status < 500, validateStatus: (status) => status != null && status < 500,
headers: const { headers: const {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
}, },
), ),
@@ -231,7 +231,7 @@ class PawchiveSyncService {
headers: { headers: {
'Cookie': 'session=$cleanCookie', 'Cookie': 'session=$cleanCookie',
'Accept': 'application/json', 'Accept': 'application/json',
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
}, },
validateStatus: (status) => status != null && status < 500, validateStatus: (status) => status != null && status < 500,
), ),
@@ -509,7 +509,7 @@ class PawchiveSyncService {
final options = Options( final options = Options(
headers: { headers: {
'Cookie': 'session=$cleanCookie', 'Cookie': 'session=$cleanCookie',
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
}, },
validateStatus: (status) => validateStatus: (status) =>
status != null && (status == 200 || status == 201 || status == 204), status != null && (status == 200 || status == 201 || status == 204),
+1 -1
View File
@@ -674,7 +674,7 @@ class SettingsService {
return Success( return Success(
const JsonEncoder.withIndent(' ').convert({ const JsonEncoder.withIndent(' ').convert({
'app': { 'app': {
'name': 'Lunaris', 'name': 'Prisma',
'version': appVersion, 'version': appVersion,
'build': buildNumber, 'build': buildNumber,
'generatedAt': DateTime.now().toIso8601String(), 'generatedAt': DateTime.now().toIso8601String(),
+8 -1
View File
@@ -25,7 +25,14 @@ class TagCacheService {
return _resolvedPath!; return _resolvedPath!;
} }
final dir = await getApplicationDocumentsDirectory(); final dir = await getApplicationDocumentsDirectory();
_resolvedPath = '${dir.path}/lunaris_tag_cache.json'; final newFile = File('${dir.path}/prisma_tag_cache.json');
final oldFile = File('${dir.path}/lunaris_tag_cache.json');
if (!newFile.existsSync() && oldFile.existsSync()) {
try {
oldFile.copySync(newFile.path);
} catch (_) {}
}
_resolvedPath = newFile.path;
return _resolvedPath!; return _resolvedPath!;
} }
+5 -5
View File
@@ -111,7 +111,7 @@ class UpdateService {
'Authorization': 'token 1c744d6044d756759d7b1f693c94c80cf70d75fa', 'Authorization': 'token 1c744d6044d756759d7b1f693c94c80cf70d75fa',
} }
: { : {
'User-Agent': 'Lunaris-App', 'User-Agent': 'Prisma-App',
'Accept': 'application/vnd.github+json', 'Accept': 'application/vnd.github+json',
}, },
); );
@@ -239,10 +239,10 @@ class UpdateService {
final fromUrl = final fromUrl =
parsed?.pathSegments.isEmpty ?? true ? '' : parsed!.pathSegments.last; parsed?.pathSegments.isEmpty ?? true ? '' : parsed!.pathSegments.last;
if (fromUrl.contains('.')) return fromUrl; if (fromUrl.contains('.')) return fromUrl;
if (Platform.isAndroid) return 'Lunaris-v${info.version}.apk'; if (Platform.isAndroid) return 'Prisma-v${info.version}.apk';
if (Platform.isLinux) return 'Lunaris-v${info.version}-linux-x64.tar.gz'; if (Platform.isLinux) return 'Prisma-v${info.version}-linux-x64.tar.gz';
if (Platform.isWindows) return 'LunarisSetup-v${info.version}.exe'; if (Platform.isWindows) return 'PrismaSetup-v${info.version}.exe';
return 'LunarisPortable-v${info.version}.zip'; return 'PrismaPortable-v${info.version}.zip';
} }
static String _versionFromTag(String tag) { static String _versionFromTag(String tag) {
+1 -1
View File
@@ -40,7 +40,7 @@ class DioClient {
receiveTimeout: timeout, receiveTimeout: timeout,
sendTimeout: timeout, sendTimeout: timeout,
headers: { headers: {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': 'application/json, text/xml;q=0.9, */*;q=0.8', 'Accept': 'application/json, text/xml;q=0.9, */*;q=0.8',
...?headers, ...?headers,
}, },
@@ -653,7 +653,7 @@ class _FeedTitle extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'Lunaris', 'Prisma',
style: theme.textTheme.titleLarge?.copyWith( style: theme.textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.w800, fontWeight: FontWeight.w800,
), ),
@@ -1057,7 +1057,7 @@ class _MobilePostPagerState extends State<_MobilePostPager> {
Map<String, String> _headersFor(Post post) { Map<String, String> _headersFor(Post post) {
return const { return const {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': '*/*', 'Accept': '*/*',
}; };
} }
@@ -546,7 +546,7 @@ class _PostMediaViewerState extends State<PostMediaViewer>
} }
return { return {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': '*/*', 'Accept': '*/*',
if (defaultReferer != null) 'Referer': defaultReferer, if (defaultReferer != null) 'Referer': defaultReferer,
...widget.mediaHeaders, ...widget.mediaHeaders,
@@ -494,7 +494,7 @@ class _ProviderFormScreenState extends ConsumerState<ProviderFormScreen> {
child: _GlassTextField( child: _GlassTextField(
controller: _headers, controller: _headers,
label: isRu ? 'Пользовательские заголовки' : 'Headers JSON', label: isRu ? 'Пользовательские заголовки' : 'Headers JSON',
hint: '{"User-Agent": "Lunaris/3.0"}', hint: '{"User-Agent": "Prisma/3.0"}',
icon: Icons.code_rounded, icon: Icons.code_rounded,
minLines: 2, minLines: 2,
maxLines: 5, maxLines: 5,
@@ -403,7 +403,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
? 'Beta и экспериментальные обновления' ? 'Beta и экспериментальные обновления'
: 'Receive beta & experimental updates', : 'Receive beta & experimental updates',
subtitle: isRu subtitle: isRu
? 'Проверка и уведомление о prerelease сборках Lunaris' ? 'Проверка и уведомление о prerelease сборках Prisma'
: 'Include prerelease builds when checking for updates', : 'Include prerelease builds when checking for updates',
value: settings.allowExperimentalUpdates, value: settings.allowExperimentalUpdates,
onChanged: (val) => _update( onChanged: (val) => _update(
@@ -1278,7 +1278,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
messenger.showSnackBar( messenger.showSnackBar(
SnackBar( SnackBar(
content: Text( content: Text(
isRu ? 'У вас установлена последняя версия Lunaris' : 'Lunaris is up to date', isRu ? 'У вас установлена последняя версия Prisma' : 'Prisma is up to date',
), ),
), ),
); );
@@ -1295,7 +1295,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
await showDialog<void>( await showDialog<void>(
context: context, context: context,
builder: (context) => AlertDialog( builder: (context) => AlertDialog(
title: Text('Lunaris ${info.version} is available'), title: Text('Prisma ${info.version} is available'),
content: ConstrainedBox( content: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 520), constraints: const BoxConstraints(maxWidth: 520),
child: SingleChildScrollView( child: SingleChildScrollView(
@@ -1356,7 +1356,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
return showDialog<void>( return showDialog<void>(
context: context, context: context,
builder: (context) => AlertDialog( builder: (context) => AlertDialog(
title: const Text('Lunaris changelog'), title: const Text('Prisma changelog'),
content: ConstrainedBox( content: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 560), constraints: const BoxConstraints(maxWidth: 560),
child: SingleChildScrollView( child: SingleChildScrollView(
@@ -1364,7 +1364,7 @@ class _SettingsContentState extends ConsumerState<_SettingsContent> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
for (final change in lunarisChangelog) ...[ for (final change in prismaChangelog) ...[
Text( Text(
'${change.version} - ${change.title}', '${change.version} - ${change.title}',
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,
@@ -2341,7 +2341,7 @@ class _ColorSwatches extends StatelessWidget {
final ValueChanged<int> onChanged; final ValueChanged<int> onChanged;
static const colors = <(int, String)>[ static const colors = <(int, String)>[
(0xFFE84D8A, 'Lunaris pink'), (0xFFE84D8A, 'Prisma pink'),
(0xFF8B5CF6, 'Violet'), (0xFF8B5CF6, 'Violet'),
(0xFF3B82F6, 'Azure'), (0xFF3B82F6, 'Azure'),
(0xFF0EA5E9, 'Sky'), (0xFF0EA5E9, 'Sky'),
@@ -2565,7 +2565,7 @@ class _HeroBrandBanner extends StatelessWidget {
), ),
const SizedBox(height: 14), const SizedBox(height: 14),
Text( Text(
'Lunaris', 'Prisma',
style: theme.textTheme.headlineSmall?.copyWith( style: theme.textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w800, fontWeight: FontWeight.w800,
letterSpacing: -0.5, letterSpacing: -0.5,
@@ -2619,7 +2619,7 @@ class _HeroBrandBanner extends StatelessWidget {
OutlinedButton.icon( OutlinedButton.icon(
onPressed: () async { onPressed: () async {
final url = Uri.parse( final url = Uri.parse(
'https://github.com/RarDog/Lunaris', 'https://github.com/RarDog/Prisma',
); );
await launchUrl(url, mode: LaunchMode.externalApplication); await launchUrl(url, mode: LaunchMode.externalApplication);
}, },
+1 -1
View File
@@ -478,7 +478,7 @@ class _PostCardState extends ConsumerState<PostCard>
'${post.previewUrl} ${post.sampleUrl} ${post.fileUrl}' '${post.previewUrl} ${post.sampleUrl} ${post.fileUrl}'
.toLowerCase(); .toLowerCase();
return { return {
'User-Agent': 'Lunaris/2.0.1 Flutter local booru browser', 'User-Agent': 'Prisma/2.0.1 Flutter local booru browser',
'Accept': '*/*', 'Accept': '*/*',
if (lower.contains('gelbooru')) 'Referer': 'https://gelbooru.com/', if (lower.contains('gelbooru')) 'Referer': 'https://gelbooru.com/',
if (lower.contains('realbooru')) if (lower.contains('realbooru'))
+1 -1
View File
@@ -1,7 +1,7 @@
name: gel_rule_app name: gel_rule_app
description: Local backend/core layer for a Flutter booru browser app. description: Local backend/core layer for a Flutter booru browser app.
publish_to: "none" publish_to: "none"
version: 3.4.0+74 version: 3.4.1+75
environment: environment:
sdk: ">=3.3.0 <4.0.0" sdk: ">=3.3.0 <4.0.0"
+1 -1
View File
@@ -10,7 +10,7 @@ void main() {
late TagCacheService cacheService; late TagCacheService cacheService;
setUp(() async { setUp(() async {
tempDir = await Directory.systemTemp.createTemp('lunaris_test_tag_cache'); tempDir = await Directory.systemTemp.createTemp('prisma_test_tag_cache');
cacheFilePath = '${tempDir.path}/test_tags.json'; cacheFilePath = '${tempDir.path}/test_tags.json';
cacheService = TagCacheService(customPath: cacheFilePath); cacheService = TagCacheService(customPath: cacheFilePath);
await cacheService.init(); await cacheService.init();
+8 -8
View File
@@ -13,24 +13,24 @@ void main() {
final info = AppUpdateInfo( final info = AppUpdateInfo(
version: '2.0.2', version: '2.0.2',
tagName: 'v2.0.2', tagName: 'v2.0.2',
name: 'Lunaris 2.0.2', name: 'Prisma 2.0.2',
body: 'Release notes', body: 'Release notes',
htmlUrl: 'https://github.com/RarDog/Lunaris/releases/tag/v2.0.2', htmlUrl: 'https://github.com/RarDog/Prisma/releases/tag/v2.0.2',
publishedAt: DateTime.parse('2026-09-03T18:00:00Z'), publishedAt: DateTime.parse('2026-09-03T18:00:00Z'),
apkUrl: 'https://github.com/RarDog/Lunaris/releases/download/v2.0.2/Lunaris.apk', apkUrl: 'https://github.com/RarDog/Prisma/releases/download/v2.0.2/Prisma.apk',
linuxTarGzUrl: 'https://github.com/RarDog/Lunaris/releases/download/v2.0.2/linux.tar.gz', linuxTarGzUrl: 'https://github.com/RarDog/Prisma/releases/download/v2.0.2/linux.tar.gz',
); );
expect(info.hasAssets, isTrue); expect(info.hasAssets, isTrue);
expect(info.apkUrl, contains('apk')); expect(info.apkUrl, contains('apk'));
expect(info.linuxTarGzUrl, contains('linux')); expect(info.linuxTarGzUrl, contains('linux'));
expect( expect(
service.assetFileName(info, 'https://github.com/RarDog/Lunaris/releases/download/v2.0.2/Lunaris-v2.0.2.apk'), service.assetFileName(info, 'https://github.com/RarDog/Prisma/releases/download/v2.0.2/Prisma-v2.0.2.apk'),
'Lunaris-v2.0.2.apk', 'Prisma-v2.0.2.apk',
); );
expect( expect(
service.assetFileName(info, 'https://github.com/RarDog/Lunaris/releases/download/v2.0.2/unknown-linux'), service.assetFileName(info, 'https://github.com/RarDog/Prisma/releases/download/v2.0.2/unknown-linux'),
'Lunaris-v2.0.2-linux-x64.tar.gz', 'Prisma-v2.0.2-linux-x64.tar.gz',
); );
}); });
} }