speedup on tagging
This commit is contained in:
@@ -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())),
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
Submodule shanty-tag updated: a03c6bc8f5...8ddd3bd64b
+1
-1
Submodule shanty-web updated: c5efe23d01...05ab6c0f3e
Reference in New Issue
Block a user