diff --git a/crates/qbz-qt/qml/cards/AlbumCard.qml b/crates/qbz-qt/qml/cards/AlbumCard.qml index 21a3c2d67..794d6385e 100644 --- a/crates/qbz-qt/qml/cards/AlbumCard.qml +++ b/crates/qbz-qt/qml/cards/AlbumCard.qml @@ -41,6 +41,11 @@ Rectangle { property string genre: "" property string year: "" property string qualityTier: "" + /// Exact stored quality ("24-bit / 96 kHz"), shown by the badge's hover + /// tooltip. Hosts whose model has no detail (un-hydrated Plex/remote + /// rows) may pass the bare filetype ("FLAC") — known limitation, and + /// still truthful; empty shows no tooltip at all. + property string qualityDetail: "" property string ribbon: "" property string ribbonKind: "" // Artwork image source (file://… or "") — the host's cache lookup. @@ -831,10 +836,13 @@ Rectangle { elide: Text.ElideRight } } - // Icon-only quality badge (QualityBadge.slint). + // Icon-only quality badge (QualityBadge.slint). `label` feeds the + // badge's own hover tooltip with the exact stored quality; the + // badge shows nothing when the host has no detail to give. QualityMini { id: qBadge tier: root.qualityTier + label: root.qualityDetail anchors.verticalCenter: parent.verticalCenter } } diff --git a/crates/qbz-qt/qml/views/AlbumCollection.qml b/crates/qbz-qt/qml/views/AlbumCollection.qml index a872b6e06..984e167e6 100644 --- a/crates/qbz-qt/qml/views/AlbumCollection.qml +++ b/crates/qbz-qt/qml/views/AlbumCollection.qml @@ -388,6 +388,7 @@ Column { genre: gcell.modelData.genre year: gcell.modelData.year qualityTier: gcell.modelData.qualityTier + qualityDetail: gcell.modelData.qualityDetail || "" ribbon: gcell.modelData.ribbon || "" ribbonKind: gcell.modelData.ribbonKind || "" artSource: root.artOf(gcell.modelData) @@ -562,6 +563,7 @@ Column { genre: cell.cardData.genre year: cell.cardData.year qualityTier: cell.cardData.qualityTier + qualityDetail: cell.cardData.qualityDetail || "" ribbon: cell.cardData.ribbon || "" ribbonKind: cell.cardData.ribbonKind || "" artSource: root.artOf(cell.cardData) diff --git a/crates/qbz-qt/qml/views/HomeView.qml b/crates/qbz-qt/qml/views/HomeView.qml index 4e1ff473c..defacaddb 100644 --- a/crates/qbz-qt/qml/views/HomeView.qml +++ b/crates/qbz-qt/qml/views/HomeView.qml @@ -607,6 +607,7 @@ Rectangle { genre: modelData.genre year: modelData.year qualityTier: modelData.qualityTier + qualityDetail: modelData.qualityLabel || modelData.qualityDetail || "" ribbon: modelData.ribbon ribbonKind: modelData.ribbonKind artSource: root.sectionArtOf(modelData) @@ -1262,6 +1263,7 @@ Rectangle { genre: modelData.album.genre year: modelData.album.year qualityTier: modelData.album.qualityTier + qualityDetail: modelData.album.qualityLabel || modelData.album.qualityDetail || "" artSource: root.forYouArtOf(modelData.album) artworkUrl: modelData.album.artUrl || "" isPinned: modelData.album.isPinned === true diff --git a/crates/qbz-qt/qml/views/LabelView.qml b/crates/qbz-qt/qml/views/LabelView.qml index 365e8cc7d..0b1ffb493 100644 --- a/crates/qbz-qt/qml/views/LabelView.qml +++ b/crates/qbz-qt/qml/views/LabelView.qml @@ -218,6 +218,7 @@ Rectangle { genre: crCell.modelData.genre year: crCell.modelData.year qualityTier: crCell.modelData.qualityTier + qualityDetail: crCell.modelData.qualityDetail || "" ribbon: crCell.modelData.ribbon || "" ribbonKind: crCell.modelData.ribbonKind || "" artSource: crCell.modelData.artPath || "" diff --git a/crates/qbz-qt/qml/views/SearchView.qml b/crates/qbz-qt/qml/views/SearchView.qml index cb743ce3e..e5880ad69 100644 --- a/crates/qbz-qt/qml/views/SearchView.qml +++ b/crates/qbz-qt/qml/views/SearchView.qml @@ -351,6 +351,7 @@ Rectangle { genre: resultCell.cardData.genre year: resultCell.cardData.year qualityTier: resultCell.cardData.qualityTier + qualityDetail: resultCell.cardData.qualityDetail || "" artSource: resultCell.cardData.artPath || "" isFavorite: resultCell.cardData.isFavorite === true isPinned: resultCell.cardData.isPinned === true @@ -757,6 +758,7 @@ Rectangle { genre: (root.mp.album || ({})).genre || "" year: (root.mp.album || ({})).year || "" qualityTier: (root.mp.album || ({})).qualityTier || "" + qualityDetail: (root.mp.album || ({})).qualityDetail || "" artSource: (root.mp.album || ({})).artPath || "" // search_qt::map_album stamps the heart // from fav_cache; false inverted the @@ -879,6 +881,7 @@ Rectangle { genre: modelData.genre year: modelData.year qualityTier: modelData.qualityTier + qualityDetail: modelData.qualityDetail || "" artSource: modelData.artPath || "" // search_qt::map_album stamps the heart // from fav_cache; false made the glyph lie diff --git a/crates/qbz-qt/qml/views/SectionRail.qml b/crates/qbz-qt/qml/views/SectionRail.qml index 50b729579..9612c665a 100644 --- a/crates/qbz-qt/qml/views/SectionRail.qml +++ b/crates/qbz-qt/qml/views/SectionRail.qml @@ -63,6 +63,7 @@ Column { genre: modelData.genre year: modelData.year qualityTier: modelData.qualityTier + qualityDetail: modelData.qualityDetail || "" artSource: root.coverMap[modelData.artUrl] || "" // The row carries the heart (home_qt / recommendations_qt // stamp it from fav_cache at build time); hardcoding false diff --git a/crates/qbz-qt/qml/views/library/FeedGridCell.qml b/crates/qbz-qt/qml/views/library/FeedGridCell.qml index ce9db4a98..4ca3d0f94 100644 --- a/crates/qbz-qt/qml/views/library/FeedGridCell.qml +++ b/crates/qbz-qt/qml/views/library/FeedGridCell.qml @@ -81,6 +81,7 @@ Item { genre: cell.item.genre year: cell.item.year qualityTier: cell.item.qualityTier + qualityDetail: cell.item.qualityDetail || cell.item.qualityLabel || "" artSource: cell.view.artMap[cell.item.artKey] || "" isFavorite: cell.item.isFavorite isPinned: cell.item.isPinned diff --git a/crates/qbz-qt/qml/views/library/LibraryArtistsPanel.qml b/crates/qbz-qt/qml/views/library/LibraryArtistsPanel.qml index e314cfa60..0644e7bda 100644 --- a/crates/qbz-qt/qml/views/library/LibraryArtistsPanel.qml +++ b/crates/qbz-qt/qml/views/library/LibraryArtistsPanel.qml @@ -436,6 +436,7 @@ Item { genre: gcell.modelData.genre year: gcell.modelData.year qualityTier: gcell.modelData.qualityTier + qualityDetail: gcell.modelData.qualityDetail || "" artSource: root.coverMap[gcell.modelData.artUrl] || "" // The pin payload persists the REMOTE // url, never the file:// cache path. diff --git a/crates/qbz-qt/qml/views/local/LocalAlbumCollection.qml b/crates/qbz-qt/qml/views/local/LocalAlbumCollection.qml index e724c485c..3d97982ce 100644 --- a/crates/qbz-qt/qml/views/local/LocalAlbumCollection.qml +++ b/crates/qbz-qt/qml/views/local/LocalAlbumCollection.qml @@ -477,6 +477,7 @@ Item { genre: "" year: cardCell.slot.year qualityTier: cardCell.slot.qualityTier + qualityDetail: cardCell.slot.qualityDetail || "" artSource: cardCell.slot.artPath || (root.view ? (root.view.artMap[cardCell.slot.artKey] || "") : "") pinArtworkUrl: artSource diff --git a/crates/qbz-qt/qml/views/myqbz/MyQbzDetailView.qml b/crates/qbz-qt/qml/views/myqbz/MyQbzDetailView.qml index 76fac13dd..4a6f6f942 100644 --- a/crates/qbz-qt/qml/views/myqbz/MyQbzDetailView.qml +++ b/crates/qbz-qt/qml/views/myqbz/MyQbzDetailView.qml @@ -957,6 +957,7 @@ Rectangle { readonly property string cSubtitle: root.patchRev >= 0 ? (gcell.live.subtitle || "") : "" readonly property string cYear: root.patchRev >= 0 ? (gcell.live.yearText || "") : "" readonly property string cQuality: root.patchRev >= 0 ? (gcell.live.qualityTier || "") : "" + readonly property string cDetail: root.patchRev >= 0 ? (gcell.live.qualityDetail || "") : "" /// The GRID rung of the cover, NOT the list row's. /// `artPath` is the 50px thumbnail every list row draws /// at 40px; this cell's artwork well is 200px, so @@ -1084,6 +1085,7 @@ Rectangle { genre: "" year: gcell.cYear qualityTier: gcell.cQuality + qualityDetail: gcell.cDetail artSource: gcell.cArt // The pin payload / block snapshot url (see // `cArtUrl`). Without it a pinned My QBZ album