-
v2026.06.06
Stabletest-go / test (push) Successful in 35stest-web / test (push) Successful in 45sandroid / Build + lint + test (push) Successful in 4m7stest-go / integration (push) Successful in 4m30srelease / Build signed APK (tag releases only) (push) Successful in 3m44srelease / Build + push container image (push) Successful in 14sreleased this
2026-06-06 23:37:08 -04:00 | 84 commits to main since this releaseFour features (per-day CalVer). UPnP/Sonos gains graceful recovery, the library gains a filesystem watcher (and loses its scheduler), artist pages gain discovery, and request progress updates live. Cross-platform features landed on server + web + native together. (PR #87, 18 commits.)
UPnP / Sonos — graceful recovery (Android)
The motivating bug: open the phone, tap play, nothing happens — because the last session left the output pointed at a Sonos speaker you'd walked away from.
- Idle-revert: after 5 minutes paused on a UPnP/Sonos route, output reverts to the phone speaker, so a stale selection can't silently swallow a later "tap play."
- Play-intent recovery: a
play()that fails its SOAP (dead/stale renderer) now reverts to phone and honors the tap — it resumes locally instead of eating it. Recovery keys off the operator's last play/pause intent, which survives the SOAP error. - Fail-fast: transport SOAP uses a 2 s connect timeout (vs the shared 10 s) so the dead-renderer revert is near-instant rather than a multi-second stall.
Library — filesystem watcher + scheduler retirement (server, web)
- fsnotify watcher: new/changed files appear within seconds (debounced, recursive over the scan roots), scanning just the affected paths and resolving their cover art inline — local art (sidecar/embedded) instantly, remote providers rate-limited. "Drop a file → it appears with art in seconds."
- Scheduler retired: the configurable scan scheduler (
scan_scheduletable,GET/PATCH /api/admin/scan/schedule, the web admin schedule card) is gone — replaced by the watcher + a startup delta walk + a fixed 12 h safety-net walk that backstops inotify-watch-limit misses. Manual "scan now" + status are unchanged. Migration0033drops the table.
Artist detail — discovery (server, web, native)
- A Similar artists strip (in-library, ranked by similarity score, deduped across sources) and a per-user Top tracks panel on the artist page, on both clients. New
GET /api/artists/{id}/similar+/top-tracks. Tapping a top track plays that list; tapping a similar artist opens their page.
Requests — live progress auto-poll (web, native)
- Native requests now auto-poll while a request is mid-ingest (silent reloads, paused when nothing's in-flight) for parity with the existing web poll, and the SSE-driven refresh updates rows in place instead of flashing the loading spinner. Web discover submit now refreshes the requests list immediately. (The notifications-inbox half was intentionally deferred.)
Verify on device
- Pause on Sonos, wait ~5 min → output is back on the phone; tapping play just plays locally.
- Tap play onto a powered-off Sonos → reverts to phone and plays within ~2 s (not a long stall).
- Drop a new album into a scan folder → it appears (with art) within seconds, no manual scan.
- Open an artist with library neighbours → "Similar artists" + "Top tracks" show; both navigate/play.
- Submit a Lidarr request → it shows on the requests screen immediately and its status updates live without a manual refresh or a spinner flash.
Downloads