Artist tiles rendered the music-notes placeholder everywhere
except the artist detail screen. Root cause: CachedArtistAdapter.
toRef() dropped coverUrl entirely — the cache doesn't store the
representative album id the server derives at query time. Detail
screen worked because it bypasses ArtistRef.coverUrl entirely and
builds its header cover from artist.albums[0].id directly. Fix
joins cached_albums ordered by sort_title in the queries used by
artistTileProvider, libraryArtistsProvider, and artistProvider;
toRef now accepts a coverAlbumId and reconstructs /api/albums/<id>/cover from it. Fixes home Rediscover Artists,
Library Artists tab, and Liked Artists carousel. (8cb9a8b)
Mini player cover flickered on track change. Earlier
AnimatedSwitcher attempt smeared the transition without
addressing the underlying race (audio_handler broadcasts
MediaItem twice — bare then with artUri). Drop AnimatedSwitcher;
PlayerBar is now stateful and holds the most-recent non-null
artUri. When the bare-MediaItem rebroadcast arrives, the bar
keeps showing the previous cover via media.copyWith(artUri:
_lastArtUri). The new cover snaps in the moment its artUri
arrives. (86d67f6)
Full player track-change still snapped the album art + gradient
in after the fade completed. Earlier fix layered precacheImage
held _lastDominant but the AnimatedSwitcher fade still raced
the FileImage decode. Rewrite the decision process around "load
first, then swap": introduce _displayedMedia + _displayedDominant
state; ref.listen on mediaItemProvider schedules a preload that
awaits precacheImage AND awaits albumColorProvider's future; only
then does setState atomically commit both fields so cover, title,
and gradient advance in one frame. Backdrop AnimatedContainer
still tweens between successive committed colors so the gradient
transition stays smooth. Rapid skips drop stale completions via
_pendingPreloadId. (86d67f6)
Operator notes
No schema changes in this batch.
In-app updater should upgrade cleanly (versionCode 2 → 3).
Patch batch on top of v2026.05.13.1.
## Fixes
- **Artist tiles rendered the music-notes placeholder everywhere
except the artist detail screen.** Root cause: CachedArtistAdapter.
toRef() dropped coverUrl entirely — the cache doesn't store the
representative album id the server derives at query time. Detail
screen worked because it bypasses ArtistRef.coverUrl entirely and
builds its header cover from artist.albums[0].id directly. Fix
joins cached_albums ordered by sort_title in the queries used by
artistTileProvider, libraryArtistsProvider, and artistProvider;
toRef now accepts a coverAlbumId and reconstructs
`/api/albums/<id>/cover` from it. Fixes home Rediscover Artists,
Library Artists tab, and Liked Artists carousel. (`8cb9a8b`)
- **Mini player cover flickered on track change.** Earlier
AnimatedSwitcher attempt smeared the transition without
addressing the underlying race (audio_handler broadcasts
MediaItem twice — bare then with artUri). Drop AnimatedSwitcher;
PlayerBar is now stateful and holds the most-recent non-null
artUri. When the bare-MediaItem rebroadcast arrives, the bar
keeps showing the previous cover via media.copyWith(artUri:
_lastArtUri). The new cover snaps in the moment its artUri
arrives. (`86d67f6`)
- **Full player track-change still snapped the album art + gradient
in after the fade completed.** Earlier fix layered precacheImage
+ held _lastDominant but the AnimatedSwitcher fade still raced
the FileImage decode. Rewrite the decision process around "load
first, then swap": introduce _displayedMedia + _displayedDominant
state; ref.listen on mediaItemProvider schedules a preload that
awaits precacheImage AND awaits albumColorProvider's future; only
then does setState atomically commit both fields so cover, title,
and gradient advance in one frame. Backdrop AnimatedContainer
still tweens between successive committed colors so the gradient
transition stays smooth. Rapid skips drop stale completions via
_pendingPreloadId. (`86d67f6`)
## Operator notes
- No schema changes in this batch.
- In-app updater should upgrade cleanly (versionCode 2 → 3).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Patch batch on top of v2026.05.13.1.
Fixes
Artist tiles rendered the music-notes placeholder everywhere
except the artist detail screen. Root cause: CachedArtistAdapter.
toRef() dropped coverUrl entirely — the cache doesn't store the
representative album id the server derives at query time. Detail
screen worked because it bypasses ArtistRef.coverUrl entirely and
builds its header cover from artist.albums[0].id directly. Fix
joins cached_albums ordered by sort_title in the queries used by
artistTileProvider, libraryArtistsProvider, and artistProvider;
toRef now accepts a coverAlbumId and reconstructs
/api/albums/<id>/coverfrom it. Fixes home Rediscover Artists,Library Artists tab, and Liked Artists carousel. (
8cb9a8b)Mini player cover flickered on track change. Earlier
AnimatedSwitcher attempt smeared the transition without
addressing the underlying race (audio_handler broadcasts
MediaItem twice — bare then with artUri). Drop AnimatedSwitcher;
PlayerBar is now stateful and holds the most-recent non-null
artUri. When the bare-MediaItem rebroadcast arrives, the bar
keeps showing the previous cover via media.copyWith(artUri:
_lastArtUri). The new cover snaps in the moment its artUri
arrives. (
86d67f6)Full player track-change still snapped the album art + gradient
in after the fade completed. Earlier fix layered precacheImage
the FileImage decode. Rewrite the decision process around "load
first, then swap": introduce _displayedMedia + _displayedDominant
state; ref.listen on mediaItemProvider schedules a preload that
awaits precacheImage AND awaits albumColorProvider's future; only
then does setState atomically commit both fields so cover, title,
and gradient advance in one frame. Backdrop AnimatedContainer
still tweens between successive committed colors so the gradient
transition stays smooth. Rapid skips drop stale completions via
_pendingPreloadId. (
86d67f6)Operator notes