48 lines
3.7 KiB
Markdown
48 lines
3.7 KiB
Markdown
# Proposal
|
|
|
|
## Why
|
|
|
|
Self-hosted galo сейчас доступен только как адаптивный веб, а `project.md` §17 явно
|
|
исключает мобильные приложения. Но главный сценарий фотоальбома — снимать и загружать
|
|
с телефона — на вебе ограничен: нет системного пикера, фоновой загрузки и офлайн-кэша.
|
|
Нативный Android-клиент закрывает именно этот разрыв поверх уже существующего HTTP API.
|
|
|
|
## What Changes
|
|
|
|
- Новое Android-приложение (Kotlin + Jetpack Compose, Android-only), подключаемое к
|
|
произвольному self-hosted инстансу galo по базовому URL.
|
|
- Онбординг: ручной ввод URL сервера, проверка `GET /api/health`, вход в аккаунт;
|
|
режим небезопасного соединения для LAN, iOS/mDNS/доверие self-signed — вне объёма.
|
|
- Просмотр: список альбомов, сетка фото, viewer фото/видео/pano, live-обновления по SSE.
|
|
- Загрузка: системный Photo Picker, очередь в WorkManager, по одному файлу на запрос,
|
|
прогресс в уведомлении, повторы, опция «только Wi-Fi», работа после закрытия приложения.
|
|
- HEIC/HEIF конвертируется на клиенте в JPEG с сохранением EXIF перед отправкой.
|
|
- Кэш метаданных (Room) и объектов (Coil, ключ — путь без подписи) для офлайн-браузинга.
|
|
- Без изменений серверного API: используются существующие `/api/auth/*`, `/api/albums`,
|
|
`/api/albums/:id/photos` (list + multipart upload), `/api/sse/*`, `/api/objects/*`.
|
|
- Не входит в v1: редактирование тегов/комментариев/лайков, управление участниками и
|
|
инвайтами, share-ссылки, push-уведомления через FCM, iOS.
|
|
- **BREAKING**: нет.
|
|
|
|
## Capabilities
|
|
|
|
### New Capabilities
|
|
- `android-client`: поведение Android-клиента — настройка сервера и онбординг, сессия и
|
|
авторизация, просмотр альбомов и медиа, очередь загрузки и офлайн-кэш.
|
|
|
|
### Modified Capabilities
|
|
|
|
Нет. Серверные требования не меняются: клиент потребляет существующий API без правок.
|
|
Правка `project.md` §17 («только адаптивный веб») — документация, не spec.
|
|
|
|
## Impact
|
|
|
|
- Новый верхнеуровневый модуль `android/` (Gradle-проект), не затрагивающий `backend/`
|
|
и `frontend/`; отдельная сборка и подпись, опциональная цель в `Makefile`.
|
|
- Ключевые зависимости клиента: Compose, OkHttp (+ okhttp-sse), Coil, Room,
|
|
WorkManager, AndroidX ExifInterface, Media3/ExoPlayer.
|
|
- Интеграционные ограничения сервера, учтённые в дизайне: origin-relative подписанные
|
|
URL объектов с окном подписи (`host-agnostic-object-urls`), fail-fast batch-загрузка
|
|
(`photos/handlers.go` Upload), отсутствие декодирования HEIC на сервере.
|
|
- Требуется пересмотр `project.md` §17 как отдельная правка документации.
|