• v2026.05.14.0 Stable

    bvandeusen released this 2026-05-14 21:17:57 -04:00 | 715 commits to main since this release

    Player feel, background metadata sweeper, and the first offline-resilience layer for outbound user actions.

    Player

    • Track-change no longer leaks the previous track's art/metadata mid-swap (setQueueFromTracks now sets source before broadcasting; _scheduleSwap has a fast sync path on warm cache).
    • Prefetcher pre-warms cover bytes + palette for the next N tracks so the swap is instant.
    • Playback stream errors auto-skip instead of stranding the UI on a broken track.
    • Reverted the Wear MediaSession surface expansion (Pixel Watch 2 regressed when we advertised setRating); LikeBridge stays wired but dormant.

    CacheFiller

    Background sweeper that walks the drift cache for artists missing albums and albums missing tracks, fills via /api/artists/:id + /api/albums/:id, and pre-warms covers. 10s initial, 5-min interval, 200ms throttle.

    Offline mutation queue

    New cached_mutations table + MutationReplayer. Likes, hide/unhide, add-to-playlist, Lidarr request, request cancel all now persist the user's intent across network loss: optimistic local write, REST attempt, queued for replay on failure. 3s initial drain, 1-minute periodic ticker, 5-attempt drop.

    Fixes

    • Liked tab no longer spins forever on a fresh install (cacheFirst cold-fetch loop).
    • Library Artists grid: artist circles stay round at 3-column widths.
    • Restored artist coverUrl on drift-cached ArtistRef (LEFT JOIN cached_albums).
    • Discover system playlist no longer duplicates tracks across buckets.
    Downloads