Optimm to get all artists of a track in a single query

This commit is contained in:
emeric
2024-04-15 18:50:00 +02:00
parent 2c3365f1aa
commit 18b220b241
6 changed files with 95 additions and 18 deletions
@@ -26,14 +26,14 @@
namespace lms::api::subsonic
{
Response::Node createContributorNode(const db::ObjectPtr<db::TrackArtistLink>& trackArtistLink)
Response::Node createContributorNode(const db::ObjectPtr<db::TrackArtistLink>& trackArtistLink, const db::ObjectPtr<db::Artist>& artist)
{
Response::Node contributorNode;
contributorNode.setAttribute("role", utils::toString(trackArtistLink->getType()));
if (!trackArtistLink->getSubType().empty())
contributorNode.setAttribute("subRole", trackArtistLink->getSubType());
contributorNode.addChild("artist", createArtistNode(trackArtistLink->getArtist()));
contributorNode.addChild("artist", createArtistNode(artist));
return contributorNode;
}
@@ -24,10 +24,11 @@
namespace lms::db
{
class Artist;
class TrackArtistLink;
}
namespace lms::api::subsonic
{
Response::Node createContributorNode(const db::ObjectPtr<db::TrackArtistLink>& trackArtistLink);
Response::Node createContributorNode(const db::ObjectPtr<db::TrackArtistLink>& trackArtistLink, const db::ObjectPtr<db::Artist>& artist);
}
+4 -7
View File
@@ -156,25 +156,22 @@ namespace lms::api::subsonic
}
{
TrackArtistLink::FindParameters params;
params.setTrack(track->getId());
trackResponse.createEmptyArrayChild("albumartists");
trackResponse.createEmptyArrayChild("artists");
trackResponse.createEmptyArrayChild("contributors");
TrackArtistLink::find(context.dbSession, params, [&](const TrackArtistLink::pointer& link)
TrackArtistLink::find(context.dbSession, track->getId(), [&](const TrackArtistLink::pointer& link, const Artist::pointer& artist)
{
switch (link->getType())
{
case TrackArtistLinkType::Artist:
trackResponse.addArrayChild("artists", createArtistNode(link->getArtist()));
trackResponse.addArrayChild("artists", createArtistNode(artist));
break;
case TrackArtistLinkType::ReleaseArtist:
trackResponse.addArrayChild("albumartists", createArtistNode(link->getArtist()));
trackResponse.addArrayChild("albumartists", createArtistNode(artist));
break;
default:
trackResponse.addArrayChild("contributors", createContributorNode(link));
trackResponse.addArrayChild("contributors", createContributorNode(link, artist));
}
});
}