Optimm to get all artists of a track in a single query
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user