speedup on tagging
This commit is contained in:
@@ -343,9 +343,63 @@ impl MetadataFetcher for LocalMusicBrainzFetcher {
|
|||||||
.collect();
|
.collect();
|
||||||
Ok(r)
|
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"
|
"recording {mbid} not found locally"
|
||||||
))),
|
))),
|
||||||
|
}
|
||||||
|
}
|
||||||
Err(e) => Err(DataError::Other(e.to_string())),
|
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