From 1a890b0c1169527eb0da4ba7fc2483dd39fb0a87 Mon Sep 17 00:00:00 2001 From: Connor Johnstone Date: Wed, 25 Mar 2026 16:50:52 -0400 Subject: [PATCH] synced top tracks with status --- src/routes/artists.rs | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/routes/artists.rs b/src/routes/artists.rs index 0871e54..66c5c80 100644 --- a/src/routes/artists.rs +++ b/src/routes/artists.rs @@ -435,22 +435,39 @@ pub async fn enrich_artist( } }; - // Cross-reference with wanted items to add status + // Cross-reference with wanted items to add status (by MBID or by name for this artist) let all_wanted = queries::wanted::list(state.db.conn(), None, None).await?; + let artist_wanted: Vec<_> = all_wanted + .iter() + .filter(|w| id.is_some() && w.artist_id == id) + .collect(); + tracks .iter() .map(|t| { - let status = t.mbid.as_deref().and_then(|track_mbid| { - all_wanted - .iter() - .find(|w| w.musicbrainz_id.as_deref() == Some(track_mbid)) - .map(|w| match w.status { - WantedStatus::Owned => "owned", - WantedStatus::Downloaded => "downloaded", - WantedStatus::Wanted => "wanted", - WantedStatus::Available => "available", - }) - }); + // Try matching by MBID first + let status = t + .mbid + .as_deref() + .and_then(|track_mbid| { + all_wanted + .iter() + .find(|w| w.musicbrainz_id.as_deref() == Some(track_mbid)) + }) + // Fall back to matching by title (case-insensitive) within this artist's wanted items + .or_else(|| { + let name_lower = t.name.to_lowercase(); + artist_wanted + .iter() + .find(|w| w.name.to_lowercase() == name_lower) + .copied() + }) + .map(|w| match w.status { + WantedStatus::Owned => "owned", + WantedStatus::Downloaded => "downloaded", + WantedStatus::Wanted => "wanted", + WantedStatus::Available => "available", + }); serde_json::json!({ "name": t.name, "playcount": t.playcount,