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