fix(qt): artist Latest-release card renders its data again

The card bound `artist.lastRelease.*` unqualified, and inside an
AlbumCard instantiation the bare name `artist` resolves to the CARD'S
OWN string property — a string has no .lastRelease, so every binding
fell back to "" and the card rendered as an empty tile (section visible,
no art, no title) while the grids' modelData-driven cards were fine.
Caught live on a VNC-driven session: the published document carries the
full lastRelease object; only the QML scope shadowing ate it. Every read
in the block is now root.artist.lastRelease.

km
This commit is contained in:
vicrodh committed 2026-08-10 22:08:43 -06:00
1 parent af95ce164a
commit 704fd7e60a
1 file changed
+18 -11
+18 -11
View File
@@ -2161,7 +2161,7 @@ Rectangle {
// --- Latest release -------------------------------------- // --- Latest release --------------------------------------
Column { Column {
property string anchorId: "about" property string anchorId: "about"
visible: !!artist.lastRelease visible: !!root.artist.lastRelease
width: parent.width width: parent.width
spacing: 12 spacing: 12
Item { width: 1; height: 32 } Item { width: 1; height: 32 }
@@ -2172,20 +2172,27 @@ Rectangle {
font.weight: theme.weightSemibold font.weight: theme.weightSemibold
} }
AlbumCard { AlbumCard {
albumId: artist.lastRelease ? artist.lastRelease.id : "" // EVERY read here must be `root.artist.lastRelease`:
title: artist.lastRelease ? artist.lastRelease.title : "" // inside the AlbumCard instantiation the bare name
// `artist` resolves to the CARD'S OWN string property
// (a string has no .lastRelease → undefined → every
// binding fell back to ""), so the card rendered as an
// empty tile while the grids' modelData-driven cards
// were fine. Verified live 2026-08-10 (VNC drive).
albumId: root.artist.lastRelease ? root.artist.lastRelease.id : ""
title: root.artist.lastRelease ? root.artist.lastRelease.title : ""
// year in the subtitle slot — card_to_item again // year in the subtitle slot — card_to_item again
// (artist.rs:784 maps last_release through it too). // (artist.rs:784 maps last_release through it too).
artist: artist.lastRelease ? artist.lastRelease.year : "" artist: root.artist.lastRelease ? root.artist.lastRelease.year : ""
artistId: "" artistId: ""
genre: artist.lastRelease ? artist.lastRelease.genre : "" genre: root.artist.lastRelease ? root.artist.lastRelease.genre : ""
year: artist.lastRelease ? artist.lastRelease.year : "" year: root.artist.lastRelease ? root.artist.lastRelease.year : ""
qualityTier: artist.lastRelease ? artist.lastRelease.qualityTier : "" qualityTier: root.artist.lastRelease ? root.artist.lastRelease.qualityTier : ""
artSource: artist.lastRelease ? (root.coverMap[artist.lastRelease.artUrl] || "") : "" artSource: root.artist.lastRelease ? (root.coverMap[root.artist.lastRelease.artUrl] || "") : ""
// Same row shape as the release grids (map_release). // Same row shape as the release grids (map_release).
isPinned: artist.lastRelease ? artist.lastRelease.isPinned === true : false isPinned: root.artist.lastRelease ? root.artist.lastRelease.isPinned === true : false
artworkUrl: artist.lastRelease ? (artist.lastRelease.artUrl || "") : "" artworkUrl: root.artist.lastRelease ? (root.artist.lastRelease.artUrl || "") : ""
isFavorite: artist.lastRelease ? artist.lastRelease.isFavorite === true : false isFavorite: root.artist.lastRelease ? root.artist.lastRelease.isFavorite === true : false
} }
} }