On-box SQLite catalogue and a resumable import of films and series, 1,000 titles per press, with size and speed figures to plan later stages. It doesn't touch channels or schedules, and Disconnect deletes the data. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2.5 KiB
Orbit TV 0.18.0 — library import, stage one
Approved scope: the first stage of a catalogue that can hold Paul's library of over 100,000 films and about 20,000 shows. Includes 0.16 and 0.17.
Flow: Menu → Connect Emby → Library import test → Import next 1,000 titles. One press reads up to five pages of 200 Movie and Series records, pausing 1.5 seconds between pages, oldest first so titles added during an import land after the current position. No episodes are read, and no playback checks are made. Each page is one SQLite transaction with its next position, so a stopped import resumes from the last whole page. Rate-limit, expired-login and permission replies stop the run and keep finished pages. Leaving the screen or the app cancels it.
Stored for each title: ID, type, title, year, rating, up to 8 genres and studios, up to 8 external IDs, premiere date and runtime, all bounded. Records aren't connected to channels, schedules, saved setup or the playback allowlist.
Storage: Android's built-in SQLite, in app-private noBackupFilesDir, with no new dependency. It holds no login. It isn't encrypted, unlike the saved login and setup, because SQLCipher would be a new dependency; revisit before anyone else uses Orbit. It belongs to one account: a different account's first write replaces it, and Disconnect deletes it, including a page mid-write.
The screen shows position, total, films and series saved, how many have genres, external IDs, year and rating, database size and bytes per title, plus the last run's time. Those figures size the next stage.
Validation: offline assembleDebug, testDebugUnitTest and lintDebug passed; 107 unit tests (96 existing, 11 new), zero failures or errors, no lint errors. New fixture tests cover the page bound and token placement, resume, finishing, rate-limit and login stops keeping whole pages, cancellation, unusable rows, a server ignoring the limit, malformed fields, a change of account, and imported titles staying unplayable. CatalogueStore's SQLite code has no JVM test here, because the project has no Android test runtime, so the database, screen and real provider need the Xiaomi test. No private account, catalogue, media or device data was read by tools.
Not in this stage: continuous background import, full-library import, refresh, episodes, search or use of this data by channels.
Rollback: reinstall outputs/revision-0.17.0, which ignores this database, or revert this commit. Disconnect or clearing app data removes the data.