3.9 KiB
3.9 KiB
Book Reader — Episteme fork + bookshelf-api/ABS
Форк
Aryan-Raj3112/epistemeпод bookshelf-api + Audiobookshelf + Material You 3 (Myne-style UI).
Stack
- Язык: Kotlin 100%
- UI: Jetpack Compose + Material3 (Myne-style: round cards, dynamic color, minimal)
- DI: Dagger Hilt
- БД: Room
- Настройки: DataStore
- Сеть: Retrofit + OkHttp + Kotlinx Serialization
- Аудио: ExoPlayer (Media3) + MediaSession
- Фоновые задачи: WorkManager
- Читалка: Episteme paginatedreader (CSS-движок, ContentBlock/Page модель)
- Форматы: EPUB, FB2, PDF, MOBI/AZW3, DOCX, ODT, TXT, Markdown, HTML, comics
- minSdk: 26 (Episteme default)
- compileSdk/targetSdk: 36
Origin
- upstream:
https://github.com/Aryan-Raj3112/episteme.git(AGPL-3.0) - origin:
https://git.dueattendant149.org/Atte149/book-reader.git(Forgejo) - Лицензия: AGPL-3.0 (наследуется от Episteme)
Goal
- Взять зрелый reader engine из Episteme (пагинация, все форматы, TTS, annotations)
- Redesign UI под Myne-стиль (Material You 3, round cards, dynamic color)
- Заменить backend (OPDS/Gutenberg/LocalFolder) на bookshelf-api + ABS
- Добавить фичи из Book's Story: audio player, RSVP, Librarr search, TTS jobs, cache, progress sync, upload
Layout
app/src/main/— Android app (после KMP→Android упрощения)app/src/oss/— OSS flavor (без проприетарных ML Kit/cloud)app/src/releaseOffline/— offline-only flavor— удалён (Android-only)desktopApp/— слит вshared/app/src/main/(после Этапа 1)
Backend
- bookshelf-api:
https://books.dueattendant149.org/api/v1/*GET /api/v1/books/librariesGET /api/v1/books/{item_id}GET /api/v1/books/library/{id}/itemsPOST /api/v1/searchPOST /api/v1/tts,GET /api/v1/tts/{job_id}POST /api/v1/download,GET /api/v1/download/list
- Audiobookshelf (напрямую):
GET /api/items/{id}/file/{ino}GET /api/items/{id}/coverGET /api/items/{id}/download
WARNs
- Не пушить в
upstream(Aryan-Raj3112/episteme). Только вorigin(Forgejo). - AGPL-3.0 — если публикуем, исходный код должен быть открыт (включая server-side modifications если есть network use).
proflavor содержит проприетарные компоненты (ML Kit OCR, cloud sync) — не использовать, толькоoss.- Секреты (ABS token, API keys) — только в
.env/ DataStore, никогда в коде.
Build
# Required env on this server (proxy + Android SDK)
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export ANDROID_HOME=/home/dueattendant149/android-sdk
export ANDROID_SDK_ROOT=/home/dueattendant149/android-sdk
./gradlew :app:assembleOssDebug
Known build workarounds (Phase 1 baseline):
- Gradle wrapper pinned to 8.13 (8.11.1 unavailable behind proxy; 9.5.1 incompatible with AGP 8.9).
externalNativeBuildtemporarily disabled because NDK 27.0.12077973 is requested but only NDK 28.2.x is installed.- Network proxy is configured in
gradle.properties(systemProp.http[s].proxyHost/Port).
Status
- Phase 0: clone + package rename — completed
- Phase 1: KMP → Android-only — in progress
- Phase 1.1: baseline
:app:assembleOssDebugbuild — completed (APK ~80 MB) - Phase 1.2: delete
desktopApp/, mergeshared/intoapp/src/main/— pending
- Phase 1.1: baseline
- Phase 2: backend swap (bookshelf-api + ABS) — pending
- Phase 3: UI redesign (Myne-style) — pending
- Phase 4: features from Book's Story (audio/RSVP/search/TTS/cache) — pending
- Phase 5: reader engine integration — pending
- Phase 6: build, test, deploy — pending