Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dd17b3c445 |
+18
-5
@@ -133,6 +133,7 @@ pub async fn add_artist(
|
||||
&resolved_name,
|
||||
&track.title,
|
||||
Some(&track.recording_mbid),
|
||||
Some(&artist_mbid),
|
||||
user_id,
|
||||
)
|
||||
.await
|
||||
@@ -188,12 +189,20 @@ pub async fn add_album(
|
||||
|
||||
let mut summary = AddSummary::default();
|
||||
|
||||
// Resolve the artist MBID for proper upsert matching
|
||||
let album_artist_mbid = queries::artists::find_by_name(conn, &resolved_artist)
|
||||
.await
|
||||
.ok()
|
||||
.flatten()
|
||||
.and_then(|a| a.musicbrainz_id);
|
||||
|
||||
for track in &tracks {
|
||||
match add_track_inner(
|
||||
conn,
|
||||
&resolved_artist,
|
||||
&track.title,
|
||||
Some(&track.recording_mbid),
|
||||
album_artist_mbid.as_deref(),
|
||||
user_id,
|
||||
)
|
||||
.await
|
||||
@@ -220,10 +229,11 @@ pub async fn add_track(
|
||||
provider: &impl MetadataProvider,
|
||||
user_id: Option<i32>,
|
||||
) -> WatchResult<WatchListEntry> {
|
||||
let (resolved_title, resolved_artist, resolved_mbid) =
|
||||
let (resolved_title, resolved_artist, resolved_mbid, resolved_artist_mbid) =
|
||||
resolve_track_info(artist_name, title, musicbrainz_id, provider).await?;
|
||||
|
||||
let artist = queries::artists::upsert(conn, &resolved_artist, None).await?;
|
||||
let artist =
|
||||
queries::artists::upsert(conn, &resolved_artist, resolved_artist_mbid.as_deref()).await?;
|
||||
let is_owned = matching::track_is_owned(conn, &resolved_artist, &resolved_title).await?;
|
||||
|
||||
let item = queries::wanted::add(
|
||||
@@ -264,9 +274,10 @@ async fn add_track_inner(
|
||||
artist_name: &str,
|
||||
title: &str,
|
||||
recording_mbid: Option<&str>,
|
||||
artist_mbid: Option<&str>,
|
||||
user_id: Option<i32>,
|
||||
) -> WatchResult<bool> {
|
||||
let artist = queries::artists::upsert(conn, artist_name, None).await?;
|
||||
let artist = queries::artists::upsert(conn, artist_name, artist_mbid).await?;
|
||||
let is_owned = matching::track_is_owned(conn, artist_name, title).await?;
|
||||
|
||||
let item = queries::wanted::add(
|
||||
@@ -363,17 +374,18 @@ async fn resolve_album_info(
|
||||
}
|
||||
|
||||
/// Resolve track info from MBID if needed.
|
||||
/// Returns (title, artist_name, recording_mbid, artist_mbid).
|
||||
async fn resolve_track_info(
|
||||
artist_name: Option<&str>,
|
||||
title: Option<&str>,
|
||||
mbid: Option<&str>,
|
||||
provider: &impl MetadataProvider,
|
||||
) -> WatchResult<(String, String, Option<String>)> {
|
||||
) -> WatchResult<(String, String, Option<String>, Option<String>)> {
|
||||
if let (Some(t), Some(a)) = (
|
||||
title.filter(|s| !s.is_empty()),
|
||||
artist_name.filter(|s| !s.is_empty()),
|
||||
) {
|
||||
return Ok((t.to_string(), a.to_string(), mbid.map(String::from)));
|
||||
return Ok((t.to_string(), a.to_string(), mbid.map(String::from), None));
|
||||
}
|
||||
|
||||
let mbid =
|
||||
@@ -394,6 +406,7 @@ async fn resolve_track_info(
|
||||
.map(String::from)
|
||||
.unwrap_or(details.artist),
|
||||
Some(mbid.to_string()),
|
||||
details.artist_mbid,
|
||||
))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user