Library views with derived status #83
Reference in New Issue
Block a user
Delete Branch "issue/32-library-views"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds the §4.2 library view: a LIBRARY control on the rail opens a deck listing series with their derived status and movies with their state. The default set is what needs attention —
airingandincompleteseries, wanted-and-not-imported movies — and everything satisfied collapses behind one toggle carrying its count. Status is displayed, never editable; there is no monitored flag anywhere. A file imported under a waiver reads as "english, no dub" (dashed amber chip), never as a clean match.Backend: read-only
GET /api/seriesderiving status througharr_core::derive_series_status, plus awaiverfield on movie responses read frommedia_files. This overlaps #39 only on the list slice; the mutating series API, season/episode granularity and per-episode search stay there.Built through the
impeccableskill against.impeccable/design.jsontokens (status chips use the §4.2 channel-violet/neutral family already declared there); finish review ran and closed clean.Verification
just cigreen locally (fmt, clippy -D warnings, machete, 202 tests, biome, tsc, check-tokens).Closes #32
DESIGN.md §4.2: the library deck lists series with their derived status and movies with their state; the default set is what needs attention (airing and incomplete series, wanted-and-missing movies) and everything satisfied collapses behind one toggle. Status is displayed, never editable. A waived import reads honestly ("english, no dub") instead of as a clean match. Adds a read-only GET /api/series deriving status through arr-core, and a waiver column on movie responses read from media_files. The mutating series API and per-episode UI stay in #39. Closes #32 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>@@ -70,5 +70,5 @@.routes(routes!(movies::tag_owner, movies::untag_owner)).routes(routes!(owners::list, owners::create)).routes(routes!(owners::get, owners::update, owners::delete)).routes(routes!(series::list)).routes(routes!(search::search))These route removals turn the existing series create/update, episode, release, and owner endpoints into 404s, while the stated scope leaves those APIs for #39. Keep registering the existing handlers or land a coordinated breaking API change.
Removing this committed migration makes every database that already recorded version 6 fail startup with SQLx
VersionMissing(6). Keep the migration file; stop using its table in new code instead.Both findings describe commit
290e379, which predates the merge of main — reviewed as a two-dot diff, main's newer files (migration 0006, the #81 routes) appeared as deletions. Merge commitc33a5d3(pushed 38 s after the review) resolves it:crates/arr-db/migrations/0006_episode_releases.sqlis present on the branch, unchanged from main.crates/arr-api/src/lib.rskeeps every route from #81; its whole diff against main is two added test assertions (/api/seriespath,Seriesschema).wanted_episodes/available_episodes), and the moviewaiverfield.just cigreen onc33a5d3(209 tests).Reviewed
7b821cb80d4d5f0b0f3861f90bc1221e2515c853. No findings.