Compare commits

...

1 Commits

Author SHA1 Message Date
Connor Johnstone dd17b3c445 fixed up the featured artist thing 2026-03-24 11:38:07 -04:00
+18 -5
View File
@@ -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,
))
}