add README.md
This commit is contained in:
33
README.md
Normal file
33
README.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# lockstep-jukebox
|
||||||
|
|
||||||
|
Gradle project containing **jukebox**, an Android library that implements the **data layer** for a music player: it syncs playlist and track **metadata** from the Lockstep Spotify wrapper API (`https://api.lockstep.at`) into a local **SQLite** database (via Room), so the app can read playlists and tracks offline after sync.
|
||||||
|
|
||||||
|
Repository layout:
|
||||||
|
|
||||||
|
- **`jukebox/`** — Android library (Java, Retrofit, Gson, Room).
|
||||||
|
- **`docs/playlists.md`** — HTTP contract for `GET /playlists` and `GET /playlists/{id}`.
|
||||||
|
- **`schema/playlist_cache.sql`** — reference schema for the on-device cache tables.
|
||||||
|
|
||||||
|
The library does **not** handle Spotify login, audio playback, or full Spotify API modeling—only what’s needed to cache the metadata described in the docs.
|
||||||
|
|
||||||
|
## Main entry points
|
||||||
|
|
||||||
|
| Entry | Role |
|
||||||
|
| --- | --- |
|
||||||
|
| **`Jukebox.playlistRepository(Context, Interceptor)`** | Convenience factory. Builds `DefaultPlaylistRepository` with default base URL `https://api.lockstep.at/`. Optional overload passes a custom **`baseUrl`**. You supply an **`Interceptor`** so session cookies, `Authorization`, or other headers stay in the host app. |
|
||||||
|
| **`DefaultPlaylistRepository.create(...)`** | Same wiring as `Jukebox`; use when you prefer a static factory on the concrete type. |
|
||||||
|
| **`PlaylistRepository`** | Primary API surface after construction: **`syncInitial()`** (full refresh), **`syncDelta(retainRemovedPlaylists)`** (incremental sync using `snapshot_id`), **`observePlaylists()`** / **`getPlaylists()`**, **`observeTracks(playlistId)`** / **`getTracks(playlistId)`**. Sync methods **block** and perform I/O—call them off the main thread. Observation returns **`LiveData`** for lifecycle-friendly UI updates. |
|
||||||
|
| **`LockstepPlaylistClient`** | Interface implemented by **`PlaylistRemoteClient`**. Lets tests or advanced setups swap the network backend without changing **`SyncCoordinator`**. |
|
||||||
|
|
||||||
|
Errors from the API’s `{ "ok": false, "error": "..." }` shape are thrown as **`LockstepApiException`**. Network failures use **`IOException`**.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
From the repo root (with `ANDROID_HOME` / `local.properties` **`sdk.dir`** set):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./gradlew :jukebox:assembleDebug
|
||||||
|
./gradlew :jukebox:testDebugUnitTest
|
||||||
|
```
|
||||||
|
|
||||||
|
On Windows, use `gradlew.bat` instead of `./gradlew`.
|
||||||
Reference in New Issue
Block a user