From 07f952924bd96852ddd6c82e01d0de4a36047846 Mon Sep 17 00:00:00 2001 From: Tsiry Sandratraina Date: Sun, 28 Sep 2025 14:00:40 +0300 Subject: [PATCH] fix: update MusicBrainz recording handling to include release information --- crates/scrobbler/src/musicbrainz/mod.rs | 2 ++ crates/scrobbler/src/scrobbler.rs | 3 ++- crates/scrobbler/src/types.rs | 6 +++--- crates/webscrobbler/src/musicbrainz/mod.rs | 3 +++ crates/webscrobbler/src/scrobbler.rs | 3 ++- crates/webscrobbler/src/types.rs | 6 +++--- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/crates/scrobbler/src/musicbrainz/mod.rs b/crates/scrobbler/src/musicbrainz/mod.rs index eee969fe..e9f3926a 100644 --- a/crates/scrobbler/src/musicbrainz/mod.rs +++ b/crates/scrobbler/src/musicbrainz/mod.rs @@ -1,3 +1,5 @@ +use anyhow::Error; + use crate::musicbrainz::{recording::Recordings, release::Release}; use std::cmp::Ordering; diff --git a/crates/scrobbler/src/scrobbler.rs b/crates/scrobbler/src/scrobbler.rs index 9e34f369..d28d967f 100644 --- a/crates/scrobbler/src/scrobbler.rs +++ b/crates/scrobbler/src/scrobbler.rs @@ -695,8 +695,9 @@ async fn search_musicbrainz_recording( return Ok(None); } let recording = recording.unwrap(); - let result = mb_client.get_recording(&recording.id).await?; + let mut result = mb_client.get_recording(&recording.id).await?; tracing::info!("Musicbrainz (recording)"); + result.releases = Some(vec![release]); return Ok(Some(result)); } diff --git a/crates/scrobbler/src/types.rs b/crates/scrobbler/src/types.rs index 78bbb00e..7e7b55a5 100644 --- a/crates/scrobbler/src/types.rs +++ b/crates/scrobbler/src/types.rs @@ -77,18 +77,18 @@ impl From for Track { .first() .map(|release| release.title.clone()) .unwrap_or_default(); + let release_date = releases.first().and_then(|release| release.date.clone()); Track { title: recording.title.clone(), album, artist: artist_credit, album_artist, duration: recording.length.unwrap_or_default(), - year: recording - .first_release_date + year: release_date .as_ref() .and_then(|date| date.split('-').next()) .and_then(|year| year.parse::().ok()), - release_date: recording.first_release_date.clone(), + release_date: release_date.clone(), track_number: releases .first() .and_then(|release| { diff --git a/crates/webscrobbler/src/musicbrainz/mod.rs b/crates/webscrobbler/src/musicbrainz/mod.rs index 13f1ef7b..e9f3926a 100644 --- a/crates/webscrobbler/src/musicbrainz/mod.rs +++ b/crates/webscrobbler/src/musicbrainz/mod.rs @@ -1,3 +1,5 @@ +use anyhow::Error; + use crate::musicbrainz::{recording::Recordings, release::Release}; use std::cmp::Ordering; @@ -12,6 +14,7 @@ fn get_best_release(releases: &[Release]) -> Option { return None; } + // Remove the single filtering - this was causing the issue let mut candidates: Vec<&Release> = releases.iter().collect(); if candidates.is_empty() { diff --git a/crates/webscrobbler/src/scrobbler.rs b/crates/webscrobbler/src/scrobbler.rs index af8b43dc..3075381a 100644 --- a/crates/webscrobbler/src/scrobbler.rs +++ b/crates/webscrobbler/src/scrobbler.rs @@ -210,8 +210,9 @@ async fn search_musicbrainz_recording( return Ok(None); } let recording = recording.unwrap(); - let result = mb_client.get_recording(&recording.id).await?; + let mut result = mb_client.get_recording(&recording.id).await?; tracing::info!("Musicbrainz (recording)"); + result.releases = Some(vec![release]); return Ok(Some(result)); } diff --git a/crates/webscrobbler/src/types.rs b/crates/webscrobbler/src/types.rs index cc1a4598..654c810d 100644 --- a/crates/webscrobbler/src/types.rs +++ b/crates/webscrobbler/src/types.rs @@ -161,6 +161,7 @@ impl From for Track { .map(|credit| credit.name.clone()) .unwrap_or_default(); let releases = recording.releases.unwrap_or_default(); + let release_date = releases.first().and_then(|release| release.date.clone()); let album_artist = releases .first() .and_then(|release| { @@ -178,12 +179,11 @@ impl From for Track { artist: artist_credit, album_artist, duration: recording.length.unwrap_or_default(), - year: recording - .first_release_date + year: release_date .as_ref() .and_then(|date| date.split('-').next()) .and_then(|year| year.parse::().ok()), - release_date: recording.first_release_date.clone(), + release_date: release_date.clone(), track_number: releases .first() .and_then(|release| { -- 2.51.2