From 65cb9ad7c4d32df7312b4a3d43be44bbe3297ff0 Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Mon, 27 Apr 2026 20:20:52 -0600 Subject: [PATCH] feat(track): propagate version through queue builders and MPRIS (#360) The previous two commits added the version field but several builder helpers in routes/+page.svelte, miniplayer/+page.svelte, and view- specific local Track interfaces still dropped it on the way to the backend, so the on-screen rendering went back to the bare title for queues built from anywhere except album/playlist detail. Builders updated to pass version -------------------------------- ~50 inline `title: trk.title` / `title: track.title` assignments where the destination is a BackendQueueTrack (sent to v2_replace_queue, v2_add_to_queue_*, mixtape enqueue paths, infinite-radio start, etc.) across: - src/routes/+page.svelte (album play, mixtape, search-result play, favorites/playlist play, history mapping, queue-from-session restore, infinite-radio resolution, dynamic suggest, etc.) - src/routes/miniplayer/+page.svelte (queue snapshot) - AlbumDetailView, ArtistDetailView, FavoritesView, FavQView, TopQView, LabelView, PurchasesView, PurchaseAlbumDetailView, SearchView, DynamicSuggestView, WeeklySuggestView - playbackService.ts (cast metadata, MPRIS metadata - via formatTrackTitle so MPRIS shows the full title with edition) - lyricsStore.ts (track context for lyrics queries) - immersive/panels/CoverflowPanel.svelte (rendered title in coverflow card uses formatTrackTitle directly) Local Track interfaces extended with `version?: string | null` -------------------------------------------------------------- - ArtistDetailView: Track and DisplayTrack interfaces - LabelView: Track interface - SearchView: Track interface - FavoritesView: FavoriteTrack interface - FavQView: FavTrack interface - DynamicSuggestTrack (in src/lib/types/dynamicSuggest.ts) - PurchasedTrack (in src/lib/types/purchases.ts) Reverted (the auto-insert script touched these but the destination type is not a track): - AddToMixtapeItem: it's a wrapper for both album and track ops; the underlying track keeps version through other paths - v2_set_media_metadata invoke and v2_cache_track_for_offline invoke: the backend command shapes don't have a version arg; can be added later if MPRIS/cache need to surface it independently - Album-level constructions in some search paths: those build an Album (no edition concept at album-level for the search row) Frontend npm run check: 0 errors. Backend cargo test: 196 passed. cc --- .../immersive/panels/CoverflowPanel.svelte | 3 +- .../components/views/ArtistDetailView.svelte | 12 + .../views/DynamicSuggestView.svelte | 2 + src/lib/components/views/FavQView.svelte | 4 + src/lib/components/views/FavoritesView.svelte | 4 + src/lib/components/views/LabelView.svelte | 4 + .../views/PurchaseAlbumDetailView.svelte | 1 + src/lib/components/views/PurchasesView.svelte | 1 + src/lib/components/views/SearchView.svelte | 3 + src/lib/components/views/TopQView.svelte | 2 + .../components/views/WeeklySuggestView.svelte | 2 + src/lib/services/playbackService.ts | 10 +- src/lib/stores/lyricsStore.ts | 1 + src/lib/stores/offlineCacheState.ts | 732 +++++++++--------- src/lib/types/dynamicSuggest.ts | 2 + src/lib/types/purchases.ts | 2 + src/routes/+page.svelte | 26 + src/routes/miniplayer/+page.svelte | 1 + 18 files changed, 443 insertions(+), 369 deletions(-) diff --git a/src/lib/components/immersive/panels/CoverflowPanel.svelte b/src/lib/components/immersive/panels/CoverflowPanel.svelte index 3899c7f38..88e5faf94 100644 --- a/src/lib/components/immersive/panels/CoverflowPanel.svelte +++ b/src/lib/components/immersive/panels/CoverflowPanel.svelte @@ -1,5 +1,6 @@