back interdiff of round #1 and #0

feat: Enhance MusicBrainz integration and improve data handling #10

merged
opened by tsiry-sandratraina.com targeting main from feat/musicbrainz
ERROR
Cargo.lock

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/Cargo.toml

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/handlers/mod.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/handlers/scrobble.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/handlers/v1/submission.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/lib.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/listenbrainz/core/submit.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/listenbrainz/handlers.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/musicbrainz/artist.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/musicbrainz/client.rs

Failed to calculate interdiff for this file.

ERROR
crates/scrobbler/src/musicbrainz/release.rs

Failed to calculate interdiff for this file.

ERROR
crates/webscrobbler/Cargo.toml

Failed to calculate interdiff for this file.

ERROR
crates/webscrobbler/src/handlers.rs

Failed to calculate interdiff for this file.

ERROR
crates/webscrobbler/src/lib.rs

Failed to calculate interdiff for this file.

ERROR
crates/webscrobbler/src/musicbrainz/artist.rs

Failed to calculate interdiff for this file.

ERROR
crates/webscrobbler/src/musicbrainz/client.rs

Failed to calculate interdiff for this file.

ERROR
crates/webscrobbler/src/musicbrainz/release.rs

Failed to calculate interdiff for this file.

NEW
crates/scrobbler/src/scrobbler.rs
···
.await?;
if let Some(track) = result.tracks.items.first() {
-
tracing::info!(artist = %scrobble.artist, track = %scrobble.track, "Spotify (track)");
-
scrobble.album = Some(track.album.name.clone());
-
let mut track = track.clone();
+
let artists = track
+
.artists
+
.iter()
+
.map(|a| a.name.to_lowercase().clone())
+
.collect::<Vec<_>>()
+
.join(", ")
+
.to_lowercase();
-
if let Some(album) = spotify_client.get_album(&track.album.id).await? {
-
track.album = album;
-
}
+
// check if artists don't contain the scrobble artist (to avoid wrong matches)
+
if !artists.contains(&scrobble.artist.to_lowercase()) {
+
tracing::warn!(artist = %artist, track = ?track, "Artist mismatch, skipping");
+
return Ok(());
+
} else {
+
tracing::info!(artist = %scrobble.artist, track = %scrobble.track, "Spotify (track)");
+
scrobble.album = Some(track.album.name.clone());
+
let mut track = track.clone();
-
if let Some(artist) = spotify_client
-
.get_artist(&track.album.artists[0].id)
-
.await?
-
{
-
track.album.artists[0] = artist;
-
}
+
if let Some(album) = spotify_client.get_album(&track.album.id).await? {
+
track.album = album;
+
}
-
rocksky::scrobble(cache, &did, track.into(), scrobble.timestamp).await?;
-
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
-
return Ok(());
+
if let Some(artist) = spotify_client
+
.get_artist(&track.album.artists[0].id)
+
.await?
+
{
+
track.album.artists[0] = artist;
+
}
+
+
rocksky::scrobble(cache, &did, track.into(), scrobble.timestamp).await?;
+
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
+
return Ok(());
+
}
}
let query = format!(
···
let artists = track
.artists
.iter()
-
.map(|a| a.name.clone())
+
.map(|a| a.name.to_lowercase().clone())
.collect::<Vec<_>>()
.join(", ")
.to_lowercase();
···
if !artists.contains(&scrobble.artist.to_lowercase()) {
tracing::warn!(artist = %artist, track = ?track, "Artist mismatch, skipping");
return Ok(());
-
}
+
} else {
+
tracing::info!("Spotify (track)");
+
scrobble.album = Some(track.album.name.clone());
+
let mut track = track.clone();
-
tracing::info!("Spotify (track)");
-
scrobble.album = Some(track.album.name.clone());
-
let mut track = track.clone();
+
if let Some(album) = spotify_client.get_album(&track.album.id).await? {
+
track.album = album;
+
}
-
if let Some(album) = spotify_client.get_album(&track.album.id).await? {
-
track.album = album;
-
}
+
if let Some(artist) = spotify_client
+
.get_artist(&track.album.artists[0].id)
+
.await?
+
{
+
track.album.artists[0] = artist;
+
}
-
if let Some(artist) = spotify_client
-
.get_artist(&track.album.artists[0].id)
-
.await?
-
{
-
track.album.artists[0] = artist;
+
rocksky::scrobble(cache, &did, track.into(), scrobble.timestamp).await?;
+
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
+
return Ok(());
}
-
-
rocksky::scrobble(cache, &did, track.into(), scrobble.timestamp).await?;
-
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
-
return Ok(());
}
let query = format!(
NEW
crates/webscrobbler/src/scrobbler.rs
···
let artists = track
.artists
.iter()
-
.map(|a| a.name.clone())
+
.map(|a| a.name.to_lowercase().clone())
.collect::<Vec<_>>()
.join(", ")
.to_lowercase();
···
// check if artists don't contain the scrobble artist (to avoid wrong matches)
if !artists.contains(&scrobble.data.song.parsed.artist.trim().to_lowercase()) {
tracing::warn!(artist = %artist, track = ?track, "Artist mismatch, skipping");
-
return Ok(());
-
}
+
} else {
+
tracing::info!("Spotify (track)");
+
let mut track = track.clone();
-
tracing::info!("Spotify (track)");
-
let mut track = track.clone();
+
if let Some(album) = spotify_client.get_album(&track.album.id).await? {
+
track.album = album;
+
}
-
if let Some(album) = spotify_client.get_album(&track.album.id).await? {
-
track.album = album;
-
}
+
if let Some(artist) = spotify_client
+
.get_artist(&track.album.artists[0].id)
+
.await?
+
{
+
track.album.artists[0] = artist;
+
}
-
if let Some(artist) = spotify_client
-
.get_artist(&track.album.artists[0].id)
-
.await?
-
{
-
track.album.artists[0] = artist;
+
rocksky::scrobble(cache, &did, track.into(), scrobble.time).await?;
+
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
+
return Ok(());
}
-
-
rocksky::scrobble(cache, &did, track.into(), scrobble.time).await?;
-
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
-
return Ok(());
}
let query = format!(