Add the calendar view (M10)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@ A terminal UI to search for movies and series, add them to Radarr / Sonarr, and
|
||||
- **TUI library:** [tview](https://github.com/rivo/tview) (on top of tcell)
|
||||
- **License:** MIT
|
||||
- **Module:** `git.stinnesbeck.com/nils/arr-tui`
|
||||
- **Status:** M9 done
|
||||
- **Status:** M10 done
|
||||
|
||||
## 1. Goals
|
||||
|
||||
@@ -64,6 +64,7 @@ Notes:
|
||||
- Global speed / pause state in the status bar. Pause/resume and delete a SABnzbd job.
|
||||
- **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.
|
||||
- **Posters:** the detail panes show the poster at the top right; the head (title, facts, path) and the plot are one text that flows along the poster's left side and continues at full width below it (text is wrapped by arr-tui itself, with a narrower width for the first lines); on panes too small for the poster, the text simply uses the full width. The poster is drawn with block characters in 24-bit colors: every cell shows several pixels in the best two-color split (`quadrant`: 2×2 pixels, glyphs from the Block Elements range every font has; `sextant`: 2×3 pixels, sharper, glyphs from Symbols for Legacy Computing). `ui.cover_style` is `auto` (default: sextant on kitty, WezTerm, foot, Ghostty, quadrant elsewhere), `quadrant` or `sextant`. JPEG/PNG only, decoded and downscaled in the process, so no terminal graphics protocol is needed. Library items fetch `/MediaCover/<id>/poster-250.jpg` from their Radarr/Sonarr instance with the API key; search results fall back to the provider's `remoteUrl` (fetched without credentials). Posters are cached in memory, failed downloads are not retried for two minutes, and the poster shrinks or disappears when the pane is too short. `ui.covers: false` disables it.
|
||||
- **Calendar view (F5):** a two-week window (starting today, moved a week at a time with `[`/`]`, `t` returns to today) with the library's movie releases and airing episodes, grouped by day. Radarr `GET /calendar` supplies the cinema, digital and physical release dates (taken as written: midnight UTC means that calendar day) and Sonarr `GET /calendar?includeSeries=true` the episodes with their air time (shown in local time). Unmonitored items are included with `u`. A movie appears once per release date in the window. Each entry shows type, title, episode or release kind and status (downloaded / missing / upcoming); the detail pane shows poster and plot; `Enter`/`i` starts the release search and `s` an automatic search.
|
||||
- **Download notifications:** a background poller (independent of the visible view) reads SABnzbd's history every 15 s and announces downloads that reach `Completed` or `Failed` as a popup and log entry; the first poll only records the current state. `ui.notify_downloads` (default true) and `ui.bell` (default false, rings the terminal bell) control it. Connection errors are not reported here, the indicators and the log already do that.
|
||||
- **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.
|
||||
|
||||
@@ -74,9 +75,6 @@ Notes:
|
||||
|
||||
### 4.3 Later / ideas
|
||||
|
||||
- Calendar / upcoming view.
|
||||
- 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)
|
||||
@@ -107,7 +105,7 @@ Keybindings (the status bar shows the ones that apply to the current view):
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `F1-F5` | Switch view (Movies, Series, Library, Downloads, Log); also while typing, and from full-screen views. Dialogs block them. |
|
||||
| `F1-F6` | Switch view (Movies, Series, Library, Downloads, Calendar, 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 |
|
||||
@@ -117,6 +115,7 @@ Keybindings (the status bar shows the ones that apply to the current view):
|
||||
| `i` | Movies, Series, Library: interactive release search (series: seasons and episodes) |
|
||||
| `F` | Library and release list: filter by properties (quality, codec, HDR/DV, audio, language) |
|
||||
| `f` | Library: cycle the status filter; release list: hide rejected releases |
|
||||
| `[` `]` `t` `u` | Calendar: week back / forward, today, include unmonitored |
|
||||
| `d` | Library: remove the item from the library (asks first) |
|
||||
| `t` | Library, episodes: toggle monitored; Downloads history: retry a failed download |
|
||||
| `s` | Library, episodes: automatic search; release list: cycle sort (best / size / age) |
|
||||
@@ -203,8 +202,8 @@ 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** — Download completion notifications (done), delete from library (done), calendar view.
|
||||
- [ ] **M11+** — ideas: more library actions (edit quality profile, root folder), history of grabs per title. Multiple instances per service are explicitly out of scope.
|
||||
- [x] **M10** — Download completion notifications, remove from library, calendar view (F5; the Log moves to F6). Multiple instances per service are out of scope.
|
||||
- [ ] **M11+** — ideas: more library actions (edit quality profile, root folder), history of grabs per title.
|
||||
|
||||
## 10. Open Questions
|
||||
|
||||
@@ -214,7 +213,7 @@ Open: none.
|
||||
Decided:
|
||||
|
||||
- Go module path: `git.stinnesbeck.com/nils/arr-tui`.
|
||||
- One instance each of Radarr, Sonarr and SABnzbd (multi-instance is a later idea).
|
||||
- One instance each of Radarr, Sonarr and SABnzbd (multi-instance is out of scope).
|
||||
- Minimum Go version: latest stable.
|
||||
- License: MIT (Nils Stinnesbeck). The tool will be published, so keep secrets out of the repo, include a `config.example.json`, and write a proper README.
|
||||
- Config format: JSON.
|
||||
|
||||
Reference in New Issue
Block a user