fix(slint): MyQBZ row artist links route by item source

The detail view's artist click forwarded only the artist NAME, and the
top-level router's heuristic (numeric = Qobuz, name = local) sent every
click - Qobuz items included - to the LocalLibrary artist page. The
callback now carries (source, name, artist id): Qobuz items navigate to
the Qobuz artist page (same recorded-history path as AlbumView's artist
button), local/plex items keep the LocalLibrary destination. The resolved-
item model gains artist_id hydrated from the first resolved track (live-
pushed when the resolve lands; a click before hydration is ignored with a
warn instead of navigating wrong). Both click sites updated (list/expanded
subtitle link + expanded inline rows); grid cards render plain text as
before.

cc
This commit is contained in:
vicrodh committed 2026-06-10 09:43:52 -06:00
1 parent 3c87df308b
commit 016869e21b
4 files changed
+75 -29

No files matched your search

@@ -316,7 +316,7 @@ component DetailRow inherits Rectangle {
mouse-cursor: root.item.subtitle-is-link ? pointer : default;
clicked => {
if (root.item.subtitle-is-link) {
MyQbzDetailActions.open-artist(root.item.source, root.item.subtitle);
MyQbzDetailActions.open-artist(root.item.source, root.item.subtitle, root.item.artist-id);
}
}
Text {
@@ -1189,7 +1189,9 @@ export component MixtapeDetailView inherits Rectangle {
// context menu emits ("track", id, "go-to-artist").
// Both -> the parent item's artist navigation.
if ((kind == "artist" && action == "open") || action == "go-to-artist") {
MyQbzDetailActions.open-artist(item.source, et.artist);
// et.artist-id is the track's Qobuz artist id ("" for
// local/Plex tracks -> name-based LocalLibrary routing).
MyQbzDetailActions.open-artist(item.source, et.artist, et.artist-id);
} else {
// play / play-next / queue / go-to-album (album-link
// "open" too) all route through inline-track-action;
+9 -2
View File
@@ -1661,6 +1661,11 @@ export struct MixtapeDetailItem {
// True for qobuz items whose subtitle is a clickable artist link
// (spec 12 §6.3 col-2 — local subtitles are plain text).
subtitle-is-link: bool,
// Numeric Qobuz artist id resolved by the resolveItems pass ("" until it
// lands / for local-Plex items). Routes the artist link to the QOBUZ
// artist page; without it the link can only fall back to the
// LocalLibrary Artists tab (name-based).
artist-id: string,
// Resolved source kind for the source indicator + source filter
// ("qobuz" | "plex" | "local"). Defaults from `source` until resolveItems
// lands (deferred — for now equals the raw source mapping).
@@ -1774,8 +1779,10 @@ export global MyQbzDetailActions {
// Open an item's detail (album / track-album / playlist). Routed to the
// existing open-album / open-playlist paths in main.rs.
callback open-item(string /* source */, string /* item-type */, string /* source-item-id */);
// Open an item's artist page by name (qobuz items only).
callback open-artist(string /* source */, string /* artist-name */);
// Open an item's artist. Qobuz items route by the resolved numeric
// artist-id to the Qobuz artist page; local/Plex items (empty id) route
// by NAME to the LocalLibrary Artists tab.
callback open-artist(string /* source */, string /* artist-name */, string /* artist-id */);
// --- Hero CTAs --------------------------------------------------------
callback play-all();
callback shuffle();