From dd17b3c445ccfdca33e749defa11bbbaa5195387 Mon Sep 17 00:00:00 2001 From: Connor Johnstone Date: Tue, 24 Mar 2026 11:38:07 -0400 Subject: [PATCH] fixed up the featured artist thing --- src/library.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/library.rs b/src/library.rs index 0486ba4..930d42e 100644 --- a/src/library.rs +++ b/src/library.rs @@ -133,6 +133,7 @@ pub async fn add_artist( &resolved_name, &track.title, Some(&track.recording_mbid), + Some(&artist_mbid), user_id, ) .await @@ -188,12 +189,20 @@ pub async fn add_album( let mut summary = AddSummary::default(); + // Resolve the artist MBID for proper upsert matching + let album_artist_mbid = queries::artists::find_by_name(conn, &resolved_artist) + .await + .ok() + .flatten() + .and_then(|a| a.musicbrainz_id); + for track in &tracks { match add_track_inner( conn, &resolved_artist, &track.title, Some(&track.recording_mbid), + album_artist_mbid.as_deref(), user_id, ) .await @@ -220,10 +229,11 @@ pub async fn add_track( provider: &impl MetadataProvider, user_id: Option, ) -> WatchResult { - let (resolved_title, resolved_artist, resolved_mbid) = + let (resolved_title, resolved_artist, resolved_mbid, resolved_artist_mbid) = resolve_track_info(artist_name, title, musicbrainz_id, provider).await?; - let artist = queries::artists::upsert(conn, &resolved_artist, None).await?; + let artist = + queries::artists::upsert(conn, &resolved_artist, resolved_artist_mbid.as_deref()).await?; let is_owned = matching::track_is_owned(conn, &resolved_artist, &resolved_title).await?; let item = queries::wanted::add( @@ -264,9 +274,10 @@ async fn add_track_inner( artist_name: &str, title: &str, recording_mbid: Option<&str>, + artist_mbid: Option<&str>, user_id: Option, ) -> WatchResult { - let artist = queries::artists::upsert(conn, artist_name, None).await?; + let artist = queries::artists::upsert(conn, artist_name, artist_mbid).await?; let is_owned = matching::track_is_owned(conn, artist_name, title).await?; let item = queries::wanted::add( @@ -363,17 +374,18 @@ async fn resolve_album_info( } /// Resolve track info from MBID if needed. +/// Returns (title, artist_name, recording_mbid, artist_mbid). async fn resolve_track_info( artist_name: Option<&str>, title: Option<&str>, mbid: Option<&str>, provider: &impl MetadataProvider, -) -> WatchResult<(String, String, Option)> { +) -> WatchResult<(String, String, Option, Option)> { if let (Some(t), Some(a)) = ( title.filter(|s| !s.is_empty()), artist_name.filter(|s| !s.is_empty()), ) { - return Ok((t.to_string(), a.to_string(), mbid.map(String::from))); + return Ok((t.to_string(), a.to_string(), mbid.map(String::from), None)); } let mbid = @@ -394,6 +406,7 @@ async fn resolve_track_info( .map(String::from) .unwrap_or(details.artist), Some(mbid.to_string()), + details.artist_mbid, )) }