synced top tracks with status

This commit is contained in:
Connor Johnstone
2026-03-25 16:50:52 -04:00
parent 6e156037e6
commit 1a890b0c11

View File

@@ -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 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 tracks
.iter() .iter()
.map(|t| { .map(|t| {
let status = t.mbid.as_deref().and_then(|track_mbid| { // Try matching by MBID first
all_wanted let status = t
.iter() .mbid
.find(|w| w.musicbrainz_id.as_deref() == Some(track_mbid)) .as_deref()
.map(|w| match w.status { .and_then(|track_mbid| {
WantedStatus::Owned => "owned", all_wanted
WantedStatus::Downloaded => "downloaded", .iter()
WantedStatus::Wanted => "wanted", .find(|w| w.musicbrainz_id.as_deref() == Some(track_mbid))
WantedStatus::Available => "available", })
}) // 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!({ serde_json::json!({
"name": t.name, "name": t.name,
"playcount": t.playcount, "playcount": t.playcount,