Library: stack movies above series with details on the right; refresh SPECS keybindings

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 20:06:50 +02:00
co-authored by Claude Sonnet 5.5
parent 5195edc3b2
commit 76750cadf6
3 changed files with 43 additions and 39 deletions
+36 -34
View File
@@ -55,7 +55,7 @@ Notes:
### 4.1 MVP (v0.1)
- **Config:** load URLs + API keys from a config file; fail with a clear message if missing or unreachable.
- **Search:** one search box, with a toggle (movies / series). Results list with title, year, rating, status, and an "in library" marker. Detail pane with overview, runtime, genres, network/studio.
- **Search:** a Movies view (Radarr) and a Series view (Sonarr), each with a search box. Results list with title, year, rating, status, and an "in library" marker. Detail pane with overview, runtime, genres, network/studio.
- **Add:** from a result, open a small form: quality profile, root folder, monitored (yes/no), "search now" (yes/no); for series also monitor mode (all / future / first season / none). Submit calls `POST /movie` or `POST /series` with `addOptions.searchForMovie` / `searchForMissingEpisodes`.
- **Interactive release search:** for a movie (or a series' season/episode) in the library, list releases from indexers (`GET /release`) with title, indexer, size, quality, age, and rejection reasons; sort/filter; grab a chosen one (`POST /release`). Rejected releases can be grabbed only after an explicit confirmation.
- **Downloads view:** all downloads and queues in one place, auto-refreshing every few seconds:
@@ -65,60 +65,62 @@ Notes:
- **Status bar / help:** the bottom bar lists the keys that work in the current view or panel; the top right shows the connection state of each service; `?` opens the full key reference.
- **Notifications and log (F5):** feedback about actions (added, deleted, grabbed, failures) appears as popups in the bottom right that fade away (errors stay longer). Everything is also kept in the Log view; only connection changes of the background polling are logged, not every failed poll.
### 4.2 v0.2
### 4.2 v0.2 (done, M8)
- **Library view:** browse existing movies/series with filters (missing, downloaded, monitored).
- **Series drill-down:** seasons and episodes, toggle monitoring per season/episode, trigger season/episode search.
- **Library view:** movies (top) and series (below) with the details of the selected item on the right; Tab switches between the two lists. Filters (all, missing, downloaded, monitored, unmonitored) and a text filter apply to both lists. `t` toggles monitoring, `s` starts an automatic search, `i`/Enter opens the release search (movies) or the drill-down (series).
- **Series drill-down:** seasons and episodes, toggle monitoring per season/episode, trigger season/episode search and release search.
### 4.3 Later / ideas
- Calendar / upcoming view.
- Notifications on completed downloads.
- Desktop/terminal notification when a download completes.
- Multiple instances per service (e.g. 4K Radarr).
- Poster preview via sixel / kitty graphics where supported.
## 5. UI Design (tview)
Layout sketch:
Layout sketch (Library view; the other views follow the same frame):
```
┌ arr-tui ───────────────────────────────────────────────────────────┐
│ [Movies] Series Downloads Library │ ← tab bar
├────────────────────────────────┬───────────────────────────────────┤
│ Search: ______________________ │ Title (Year) │
│ │ ★ 7.8 · 142 min · Sci-Fi │
│ > Movie One (2021) ✓ │ │
│ Movie Two (2019) │ Overview text wraps here... │
│ Movie Three (2024) │ │
│ 1 Movies 2 Series 3 Downloads 4 Library 5 Log ● Radarr ● Sonarr ● SAB │ ← tab bar + connection state
│ Library · Movies 12/40 · Series 5/9 · filter: missing │
│ Filter: ______________________ │
├─ Movies ───────────────────────┬─ Details ─────────────────────────┤
│ ● Movie One (2021) missing │ Title (Year) │
│ ● Movie Two (2019) ✓ WEB-DL │ ★ 7.8 · 142 min · Sci-Fi │
├─ Series ───────────────────────┤ Overview text wraps here... │
│ ● Show One (2008) 12/62 │ │
│ ○ Show Two (2015) 10/10 │ │
├────────────────────────────────┴───────────────────────────────────┤
│ ↓ 12.4 MB/s · 2 jobs · Radarr ● Sonarr ● SABnzbd ● ? help │ ← status bar
│ Tab movies/series · f filter · / text · t monitor · ? help · q quit │ ← key hints of the current view
└────────────────────────────────────────────────────────────────────┘
```
tview primitives: `Pages` (views), `Flex` (layout), `InputField` (search), `List`/`Table` (results, queue), `TextView` (details), `Form` (add dialog), `Modal` (confirmations).
Popups for action feedback appear in the bottom right and fade away; the Log view (F5) keeps the history.
Keybindings (initial proposal):
tview primitives: `Pages` (views and stacked overlays), `Flex` (layout), `InputField` (search), `List`/`Table` (results, queues, library), `TextView` (details, log), `Form` (add dialog), `Modal` (confirmations). Popups are drawn by a wrapper around the root primitive.
Keybindings (the status bar shows the ones that apply to the current view):
| Key | Action |
|---|---|
| `Tab` / `Shift+Tab` | Switch panel within the current view (never the view) |
| `F1-F4` | Switch view, also while typing in a search box |
| `/` | Focus search |
| `Enter` | Search / open details / confirm |
| `a` | Add selected result |
| `m` / `s` | Switch to movies / series search |
| `p` | Pause/resume SABnzbd (Downloads view) |
| `d` | Delete selected download, history entry or Radarr/Sonarr queue item (with confirm) |
| `t` | Retry the selected failed download (history) |
| `Tab` / `Shift+Tab` | Downloads view: cycle focus between SABnzbd queue, Radarr/Sonarr queue and history |
| `b` | Downloads view (Radarr/Sonarr queue): blocklist the release and search for another |
| `i` | Interactive release search for the selected library item (movies; series ask for a season, then an episode or the whole season) |
| `g` / `Enter` | Release list: grab the selected release (rejected ones ask for confirmation) |
| `s` / `f` | Release list: cycle sort (best / size / age) / hide rejected |
| `Esc` | Close a dialog or the release list |
| `r` | Refresh |
| `?` | Help |
| `F1-F5` | Switch view (Movies, Series, Downloads, Library, Log); also while typing, and from full-screen views. Dialogs block them. |
| `Tab` / `Shift+Tab` | Switch panel within the current view (never the view): search box / results, Downloads panels, Library lists |
| `?` / `F9` | Help (`F9` also works while typing) |
| `q` / `Ctrl+C` | Quit |
| `Esc` | Close a dialog or a full-screen view |
| `/` | Movies, Series, Library: focus the search / text filter |
| `Enter` / `a` | Movies, Series: add the selected result (dialog: ↑↓ move, ←→ change dropdowns) |
| `i` | Movies, Series, Library: interactive release search (series: seasons and episodes) |
| `f` | Library: cycle the filter; release list: hide rejected releases |
| `t` | Library, episodes: toggle monitored; Downloads history: retry a failed download |
| `s` | Library, episodes: automatic search; release list: cycle sort (best / size / age) |
| `Enter` / `g` | Release list: grab the selected release (rejected ones ask for confirmation) |
| `Enter` | Library: open; episodes: expand a season or search releases for an episode |
| `p` / `d` / `b` / `r` | Downloads: pause/resume SABnzbd, delete job / history entry / arr queue item, remove from arr queue + blocklist, refresh |
| `r` | Library, episodes: reload |
| `G` / `c` | Log: follow new entries / clear |
## 6. Architecture
@@ -197,7 +199,7 @@ The file should be created with mode `0600`; warn if it is more permissive. API
- [x] **M7** — Polish: help screen (`?`/F9), per-service connection indicators, README, Makefile release builds, `--version`.
- [x] **M8** — Library view (movies/series, filters, text filter, monitor toggle, automatic search) and series drill-down (seasons/episodes, monitoring, search, release search).
- [x] **M9** — Popup notifications, Log view (F5), context-sensitive key hints in the status bar.
- [ ] **M10+** — ideas: calendar, notifications, delete from library, multiple instances.
- [ ] **M10+** — ideas: calendar, completion notifications, delete from library, multiple instances.
## 10. Open Questions