# Book's Story — Bookshelf Fork

> Форк `Acclorite/book-story` под Bookshelf: audiobookshelf + bookshelf-api + TTS + offline.

## Stack

- **Язык:** Kotlin 100%
- **UI:** Jetpack Compose + Material3
- **DI:** Dagger Hilt
- **БД:** Room
- **Настройки:** DataStore
- **Сеть:** Retrofit + OkHttp + Kotlinx Serialization
- **Аудио:** ExoPlayer (Media3) + MediaSession
- **Фоновые задачи:** WorkManager
- **Читалка:** собственная Book's Story (jsoup, pdfbox, commonmark)
- **minSdk:** 26 (план — поднять до 31 позже)
- **compileSdk/targetSdk:** 36

## Goal

- Сохранить Material You reader Book's Story.
- Добавить поддержку bookshelf-api: библиотеки, поиск, TTS, подкасты, Яндекс/YouTube.
- Добавить аудиоплеер для аудиокниг из Audiobookshelf.
- Добавить offline-кэш и синхронизацию прогресса.

## Layout

- `app/src/main/java/org/dueattendant149/bookshelf/` — основной код
  - `core/` — crash handler, typealias, commonmark parser
  - `data/` — repository, Room, DataStore, mappers, parsers, DI
  - `domain/` — models, use cases, repository interfaces
  - `presentation/` — ViewModels, MVI screens, navigator
  - `ui/` — Compose UI
- `bookshelf-api` backend находится в `~/bookshelf/bookshelf-api/` (отдельный проект)
- Lissen (который дорабатывается параллельно) — `~/bookshelf/lissen/`

## API endpoints

- **bookshelf-api:** `http://bookshelf-api:8073` (или `https://tts.dueattendant149.org` после DNS)
  - `GET /api/v1/books/libraries`
  - `GET /api/v1/books/{item_id}`
  - `GET /api/v1/books/library/{id}/search?q=...`
  - `POST /api/v1/search`
  - `POST /api/v1/tts`, `GET /api/v1/tts/{job_id}`, `GET /api/v1/tts/{job_id}/download`
  - `GET /api/v1/tts/engines`, `GET /api/v1/tts/voices`
  - `POST /api/v1/download`, `GET /api/v1/download/list`
  - `POST /api/v1/podcasts`, `POST /api/v1/sources/yandex`
- **Audiobookshelf (напрямую):** для аудио файлов и обложек
  - `GET /api/items/{id}/file/{ino}`
  - `GET /api/items/{id}/download`
  - `GET /api/items/{id}/cover`

## Git

- **origin:** `https://git.dueattendant149.org/Atte149/book-story.git` (Forgejo)
- **upstream:** `https://github.com/Acclorite/book-story.git`
- **Лицензия:** GPL-3.0-only (как у оригинала)

## Build

```bash
./gradlew :app:assembleDebug
```

## Current Status

- Phase 1: fork + package rename completed.
- Next: Phase 2 — network layer (Retrofit + bookshelf-api client).

## WARNs

- **Не пушить в `upstream` (Acclorite/book-story).** Только в `origin` (Forgejo).
- **Lissen остаётся живым проектом.** Book's Story fork — отдельная ветка развития.
- **Секреты** (ABS token, API keys) хранить только в `.env` / `credentials.json` / DataStore, никогда в коде.
- **Package:** `org.dueattendant149.bookshelf`. Все ссылки на `ua.acclorite.book_story` в коде заменены; README оставлен с оригинальными F-Droid ссылками.

## Typical tasks

- Добавить новый endpoint bookshelf-api
- Расширить `Book` / `BookEntity` для remote полей
- Добавить аудиоплеер экран
- Добавить TTS экран
- Поднять minSdk, добавить новые разрешения
- Обновить AGENTS.md при существенных изменениях архитектуры
