From 026d1f446bc8d863cca60f30aec6f9f27b30db4d Mon Sep 17 00:00:00 2001 From: Connor Johnstone Date: Tue, 24 Mar 2026 11:38:08 -0400 Subject: [PATCH] fixed up the featured artist thing --- shanty-data/src/mb_local.rs | 1 + shanty-data/src/musicbrainz.rs | 27 +++++++++++++++++---------- shanty-data/src/types.rs | 3 +++ shanty-db | 2 +- shanty-index | 2 +- shanty-org | 2 +- shanty-search | 2 +- shanty-tag | 2 +- shanty-watch | 2 +- shanty-web | 2 +- 10 files changed, 28 insertions(+), 17 deletions(-) diff --git a/shanty-data/src/mb_local.rs b/shanty-data/src/mb_local.rs index 82853f7..ff84bd7 100644 --- a/shanty-data/src/mb_local.rs +++ b/shanty-data/src/mb_local.rs @@ -475,6 +475,7 @@ impl MetadataFetcher for LocalMusicBrainzFetcher { secondary_types, first_release_date: row.get(4)?, first_release_mbid: row.get(5)?, + featured: false, // Local DB only stores primary-credit releases }) }) .map_err(|e| DataError::Other(e.to_string()))? diff --git a/shanty-data/src/musicbrainz.rs b/shanty-data/src/musicbrainz.rs index 06aee0a..9daea27 100644 --- a/shanty-data/src/musicbrainz.rs +++ b/shanty-data/src/musicbrainz.rs @@ -345,7 +345,7 @@ impl MetadataFetcher for MusicBrainzFetcher { ) -> DataResult> { // Fetch album, single, and EP release groups let url = format!( - "{BASE_URL}/release-group?artist={artist_mbid}&type=album|single|ep&fmt=json&limit=100" + "{BASE_URL}/release-group?artist={artist_mbid}&type=album|single|ep&inc=artist-credits&fmt=json&limit=100" ); let resp: MbReleaseGroupResponse = self.get_json(&url).await?; @@ -353,15 +353,20 @@ impl MetadataFetcher for MusicBrainzFetcher { .release_groups .unwrap_or_default() .into_iter() - .map(|rg| ReleaseGroupEntry { - mbid: rg.id, - title: rg.title, - primary_type: rg.primary_type, - secondary_types: rg.secondary_types.unwrap_or_default(), - first_release_date: rg.first_release_date, - first_release_mbid: rg - .releases - .and_then(|r| r.into_iter().next().map(|rel| rel.id)), + .map(|rg| { + let primary = extract_artist_credit(&rg.artist_credit); + let featured = primary.1.as_deref() != Some(artist_mbid); + ReleaseGroupEntry { + mbid: rg.id, + title: rg.title, + primary_type: rg.primary_type, + secondary_types: rg.secondary_types.unwrap_or_default(), + first_release_date: rg.first_release_date, + first_release_mbid: rg + .releases + .and_then(|r| r.into_iter().next().map(|rel| rel.id)), + featured, + } }) .collect()) } @@ -538,6 +543,8 @@ struct MbReleaseGroup { #[serde(rename = "first-release-date")] first_release_date: Option, releases: Option>, + #[serde(rename = "artist-credit")] + artist_credit: Option>, } #[derive(Deserialize)] diff --git a/shanty-data/src/types.rs b/shanty-data/src/types.rs index 2bee891..d2aade6 100644 --- a/shanty-data/src/types.rs +++ b/shanty-data/src/types.rs @@ -96,6 +96,9 @@ pub struct ReleaseGroupEntry { pub first_release_date: Option, /// MBID of the first release in this group (for fetching tracks). pub first_release_mbid: Option, + /// True if the queried artist is not the primary credit on this release group. + #[serde(default)] + pub featured: bool, } /// A track within a release. diff --git a/shanty-db b/shanty-db index d2b2178..a942c22 160000 --- a/shanty-db +++ b/shanty-db @@ -1 +1 @@ -Subproject commit d2b21789d3de23935f37ef61bf93c8f3814658ef +Subproject commit a942c229aead17d0d292bc9715d28a6844532a6d diff --git a/shanty-index b/shanty-index index 9d1366f..3cba8f8 160000 --- a/shanty-index +++ b/shanty-index @@ -1 +1 @@ -Subproject commit 9d1366f2661210c9c7c3e170c224f3863723e399 +Subproject commit 3cba8f88c15b5276d5d4e1e7869462521815df7a diff --git a/shanty-org b/shanty-org index 0a0fa18..72a5fd3 160000 --- a/shanty-org +++ b/shanty-org @@ -1 +1 @@ -Subproject commit 0a0fa18bfa20a3c8e080e8710fd4ee3c86f5208a +Subproject commit 72a5fd3d14fa149d376069bdadb141ce937716be diff --git a/shanty-search b/shanty-search index b39dd6c..cc0978d 160000 --- a/shanty-search +++ b/shanty-search @@ -1 +1 @@ -Subproject commit b39dd6cc8efd71bd1ae8182809553d8b6c44bd37 +Subproject commit cc0978db9432aea0b17956a8294798ca128f3651 diff --git a/shanty-tag b/shanty-tag index e74dec2..82fed6e 160000 --- a/shanty-tag +++ b/shanty-tag @@ -1 +1 @@ -Subproject commit e74dec206b8fe84f2e0b2eb6f96b607ab07de787 +Subproject commit 82fed6ea6ea274f038d766b7be81e5fa1aa999ea diff --git a/shanty-watch b/shanty-watch index aef4708..dd17b3c 160000 --- a/shanty-watch +++ b/shanty-watch @@ -1 +1 @@ -Subproject commit aef470843937f115f7d87fdaf705f8a7cd72c910 +Subproject commit dd17b3c445ccfdca33e749defa11bbbaa5195387 diff --git a/shanty-web b/shanty-web index 36345b1..7c30f28 160000 --- a/shanty-web +++ b/shanty-web @@ -1 +1 @@ -Subproject commit 36345b12ee8e862a8b86dd935af48778bc3fc989 +Subproject commit 7c30f288cdb41fc321a6e39a85b3a56d51f2e884