speedup on tagging
CI / check (push) Successful in 1m13s
CI / docker (push) Successful in 2m3s

This commit is contained in:
Connor Johnstone
2026-03-24 21:32:25 -04:00
parent 3ae6c3e0e3
commit 4e6ccd8359
3 changed files with 59 additions and 5 deletions
+55 -1
View File
@@ -343,9 +343,63 @@ impl MetadataFetcher for LocalMusicBrainzFetcher {
.collect();
Ok(r)
}
Err(rusqlite::Error::QueryReturnedNoRows) => Err(DataError::Other(format!(
Err(rusqlite::Error::QueryReturnedNoRows) => {
// Not in standalone recordings — try finding via tracks-on-releases
let track_recording = conn.query_row(
"SELECT t.recording_mbid, t.title, rel.artist_mbid, a.name, t.duration_ms
FROM mb_tracks t
JOIN mb_releases rel ON t.release_mbid = rel.mbid
LEFT JOIN mb_artists a ON rel.artist_mbid = a.mbid
WHERE t.recording_mbid = ?1
LIMIT 1",
rusqlite::params![mbid],
|row| {
let duration: Option<i64> = row.get(4)?;
Ok(RecordingDetails {
mbid: row.get(0)?,
title: row.get(1)?,
artist_mbid: row.get(2)?,
duration_ms: duration.map(|d| d as u64),
artist: row
.get::<_, Option<String>>(3)?
.unwrap_or_else(|| "Unknown Artist".into()),
releases: vec![],
genres: vec![],
})
},
);
match track_recording {
Ok(mut r) => {
// Fetch all releases containing this recording
let mut stmt = conn
.prepare(
"SELECT DISTINCT rel.mbid, rel.title, rel.date
FROM mb_tracks t
JOIN mb_releases rel ON t.release_mbid = rel.mbid
WHERE t.recording_mbid = ?1
LIMIT 10",
)
.map_err(|e| DataError::Other(e.to_string()))?;
r.releases = stmt
.query_map(rusqlite::params![mbid], |row| {
Ok(ReleaseRef {
mbid: row.get(0)?,
title: row.get(1)?,
date: row.get(2)?,
track_number: None,
})
})
.map_err(|e| DataError::Other(e.to_string()))?
.filter_map(|r| r.ok())
.collect();
Ok(r)
}
Err(_) => Err(DataError::Other(format!(
"recording {mbid} not found locally"
))),
}
}
Err(e) => Err(DataError::Other(e.to_string())),
}
}