diff --git a/crates/scrobbler/src/musicbrainz/mod.rs b/crates/scrobbler/src/musicbrainz/mod.rs index daaf689f..bd36d410 100644 --- a/crates/scrobbler/src/musicbrainz/mod.rs +++ b/crates/scrobbler/src/musicbrainz/mod.rs @@ -296,6 +296,25 @@ mod tests { assert_eq!(best.status.as_deref(), Some("Bootleg")); assert_eq!(best.country.as_deref(), Some("XW")); + assert_eq!( + normalize_date(best.date.as_deref()).unwrap(), + Some("2017-01-01".into()) + ); + + assert_eq!( + best.media + .as_ref() + .and_then(|media| media.first()) + .and_then(|media| { + media + .track + .as_ref() + .and_then(|tracks| tracks.first()) + .map(|track| track.number.parse::().unwrap()) + }), + Some(1) + ); + let query = format!( r#"recording:"{}" AND artist:"{}" AND status:Official"#, "Don't Stay", "Linkin Park" diff --git a/crates/scrobbler/src/musicbrainz/release.rs b/crates/scrobbler/src/musicbrainz/release.rs index bffdc2c7..2e899648 100644 --- a/crates/scrobbler/src/musicbrainz/release.rs +++ b/crates/scrobbler/src/musicbrainz/release.rs @@ -65,8 +65,8 @@ pub struct Media { #[serde(rename = "format-id")] pub format_id: Option, pub discs: Option>, - pub position: u32, - pub tracks: Option>, + pub position: Option, + pub track: Option>, #[serde(rename = "track-offset")] pub track_offset: u32, pub title: Option, @@ -85,11 +85,11 @@ pub struct Disc { #[derive(Debug, Deserialize, Clone)] pub struct Track { - pub length: i64, + pub length: Option, pub id: String, - pub position: u32, + pub position: Option, pub title: String, - pub recording: Recording, + pub recording: Option, #[serde(rename = "artist-credit")] pub artist_credit: Option>, pub number: String, diff --git a/crates/scrobbler/src/types.rs b/crates/scrobbler/src/types.rs index 64f1d48c..2e6176b3 100644 --- a/crates/scrobbler/src/types.rs +++ b/crates/scrobbler/src/types.rs @@ -105,7 +105,7 @@ impl From for Track { .and_then(|media| media.first()) .and_then(|media| { media - .tracks + .track .as_ref() .and_then(|tracks| tracks.first()) .map(|track| track.number.parse::().unwrap()) @@ -119,7 +119,7 @@ impl From for Track { .media .as_ref() .and_then(|media| media.first()) - .map(|media| media.position) + .map(|media| media.position.unwrap_or(1) as u32) }) .unwrap_or_default(), ..Default::default() diff --git a/crates/webscrobbler/src/musicbrainz/release.rs b/crates/webscrobbler/src/musicbrainz/release.rs index bffdc2c7..2e899648 100644 --- a/crates/webscrobbler/src/musicbrainz/release.rs +++ b/crates/webscrobbler/src/musicbrainz/release.rs @@ -65,8 +65,8 @@ pub struct Media { #[serde(rename = "format-id")] pub format_id: Option, pub discs: Option>, - pub position: u32, - pub tracks: Option>, + pub position: Option, + pub track: Option>, #[serde(rename = "track-offset")] pub track_offset: u32, pub title: Option, @@ -85,11 +85,11 @@ pub struct Disc { #[derive(Debug, Deserialize, Clone)] pub struct Track { - pub length: i64, + pub length: Option, pub id: String, - pub position: u32, + pub position: Option, pub title: String, - pub recording: Recording, + pub recording: Option, #[serde(rename = "artist-credit")] pub artist_credit: Option>, pub number: String, diff --git a/crates/webscrobbler/src/types.rs b/crates/webscrobbler/src/types.rs index f48c0ccb..f9cfede6 100644 --- a/crates/webscrobbler/src/types.rs +++ b/crates/webscrobbler/src/types.rs @@ -200,7 +200,7 @@ impl From for Track { .and_then(|media| media.first()) .and_then(|media| { media - .tracks + .track .as_ref() .and_then(|tracks| tracks.first()) .map(|track| track.number.parse::().unwrap()) @@ -214,7 +214,7 @@ impl From for Track { .media .as_ref() .and_then(|media| media.first()) - .map(|media| media.position) + .map(|media| media.position.unwrap_or(1) as u32) }) .unwrap_or_default(), ..Default::default()