When an artist is referred to using several names, pick first the one set in the artist info file, and fallback on the most recent release, ref #731

This commit is contained in:
emeric
2025-11-14 21:32:09 +01:00
parent adf80aa601
commit df344448c3
12 changed files with 256 additions and 53 deletions
@@ -50,10 +50,22 @@ namespace lms::db
if (params.artist.isValid())
query.where("t_a_l.artist_id = ?").bind(params.artist);
if (params.release.isValid())
if (params.release.isValid()
|| params.sortMethod == TrackArtistLinkSortMethod::OriginalDateDesc)
{
query.join("track t ON t.id = t_a_l.track_id");
query.where("t.release_id = ?").bind(params.release);
if (params.release.isValid())
query.where("t.release_id = ?").bind(params.release);
}
switch (params.sortMethod)
{
case TrackArtistLinkSortMethod::None:
break;
case TrackArtistLinkSortMethod::OriginalDateDesc:
query.orderBy("COALESCE(t.original_date, t.date) DESC");
break;
}
return query;
@@ -112,11 +124,8 @@ namespace lms::db
void TrackArtistLink::find(Session& session, const FindParameters& parameters, const std::function<void(const TrackArtistLink::pointer&)>& func)
{
const auto query{ createQuery(session, parameters) };
utils::forEachQueryResult(query, [&](const TrackArtistLink::pointer& link) {
func(link);
});
auto query{ createQuery(session, parameters) };
utils::forEachQueryRangeResult(query, parameters.range, func);
}
core::EnumSet<TrackArtistLinkType> TrackArtistLink::findUsedTypes(Session& session, ArtistId artistId)