Overhaul breadarr-tui UX: filter/sort, color, help overlay, cross-nav

Library tab gets a cycling filter (all/series/movies/missing/unmonitored)
and sort (title/missing/kind), color-coded kind tags and missing-count
severity, and monitor-toggle without opening detail. Keybinding hints move
out of cramped block titles into a context-aware status bar plus a `?`
help overlay, both driven by one shared keybinding table so they can't
drift apart. Episode status icons and review-queue confidence get the same
severity coloring. Stuck tab gains real selection/focus and can jump
straight to a show's Library detail (needed adding media_item_id to
StalledGrab's query — the one small backend touch in this pass). Adds a
manual refresh-now key.
This commit is contained in:
Breadway 2026-07-21 20:55:04 +08:00
parent 99604a7e55
commit 6e7be67f0b
5 changed files with 534 additions and 74 deletions

View file

@ -23,7 +23,7 @@ pub async fn stuck(
let mut stmt = conn
.prepare(
"SELECT r.id, m.title, r.raw_title, r.grabbed_at
"SELECT r.id, r.media_item_id, m.title, r.raw_title, r.grabbed_at
FROM release r JOIN media_item m ON m.id = r.media_item_id
WHERE r.status = 'grabbed'
AND (julianday('now') - julianday(r.grabbed_at)) * 24.0 > ?1
@ -34,9 +34,10 @@ pub async fn stuck(
.query_map([STALLED_GRAB_HOURS], |row| {
Ok(StalledGrab {
release_id: row.get(0)?,
media_title: row.get(1)?,
raw_title: row.get(2)?,
grabbed_at: row.get(3)?,
media_item_id: row.get(1)?,
media_title: row.get(2)?,
raw_title: row.get(3)?,
grabbed_at: row.get(4)?,
})
})
.map_err(internal)?