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:
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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user