Changed the way album covers are associated, fixes #503
This commit is contained in:
@@ -25,7 +25,9 @@
|
||||
#include "database/Artist.hpp"
|
||||
#include "database/Cluster.hpp"
|
||||
#include "database/Directory.hpp"
|
||||
#include "database/Image.hpp"
|
||||
#include "database/Release.hpp"
|
||||
#include "database/Track.hpp"
|
||||
#include "database/User.hpp"
|
||||
#include "services/feedback/IFeedbackService.hpp"
|
||||
#include "services/scrobbling/IScrobblingService.hpp"
|
||||
@@ -82,7 +84,21 @@ namespace lms::api::subsonic
|
||||
}
|
||||
|
||||
albumNode.setAttribute("created", core::stringUtils::toISO8601String(release->getLastWritten()));
|
||||
albumNode.setAttribute("coverArt", idToString(release->getId()));
|
||||
if (release->getImage())
|
||||
{
|
||||
albumNode.setAttribute("coverArt", idToString(release->getId()));
|
||||
}
|
||||
else
|
||||
{
|
||||
db::Track::FindParameters params;
|
||||
params.setRelease(release->getId());
|
||||
params.setHasEmbeddedImage(true);
|
||||
params.setRange(db::Range{ 0, 1 });
|
||||
|
||||
db::Track::find(context.dbSession, params, [&](const db::Track::pointer& track) {
|
||||
albumNode.setAttribute("coverArt", idToString(track->getId()));
|
||||
});
|
||||
}
|
||||
if (const auto year{ release->getYear() })
|
||||
albumNode.setAttribute("year", *year);
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace lms::api::subsonic
|
||||
|
||||
artistNode.setAttribute("id", idToString(artist->getId()));
|
||||
artistNode.setAttribute("name", artist->getName());
|
||||
if (const db::Image::pointer artistImage{ artist->getImage() })
|
||||
if (artist->getImage())
|
||||
artistNode.setAttribute("coverArt", idToString(artist->getId()));
|
||||
|
||||
const std::size_t count{ Release::getCount(context.dbSession, Release::FindParameters{}.setArtist(artist->getId())) };
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace lms::api::subsonic
|
||||
|
||||
static const std::string_view reportedDummyDate{ "2000-01-01T00:00:00" };
|
||||
|
||||
Response::Node createPlaylistNode(const TrackList::pointer& tracklist, Session&)
|
||||
Response::Node createPlaylistNode(const TrackList::pointer& tracklist, Session& session)
|
||||
{
|
||||
Response::Node playlistNode;
|
||||
|
||||
@@ -43,8 +43,15 @@ namespace lms::api::subsonic
|
||||
playlistNode.setAttribute("created", reportedDummyDate);
|
||||
playlistNode.setAttribute("owner", tracklist->getUser()->getLoginName());
|
||||
|
||||
if (const auto entry{ tracklist->getEntry(0) })
|
||||
playlistNode.setAttribute("coverArt", idToString(entry->getTrack()->getId()));
|
||||
db::Track::FindParameters params;
|
||||
params.setTrackList(tracklist->getId());
|
||||
params.setHasEmbeddedImage(true);
|
||||
params.setRange(db::Range{ 0, 1 });
|
||||
params.setSortMethod(TrackSortMethod::TrackList);
|
||||
|
||||
db::Track::find(session, params, [&](const db::Track::pointer& track) {
|
||||
playlistNode.setAttribute("coverArt", idToString(track->getId()));
|
||||
});
|
||||
|
||||
return playlistNode;
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "database/Artist.hpp"
|
||||
#include "database/Cluster.hpp"
|
||||
#include "database/Directory.hpp"
|
||||
#include "database/Image.hpp"
|
||||
#include "database/Release.hpp"
|
||||
#include "database/Track.hpp"
|
||||
#include "database/TrackArtistLink.hpp"
|
||||
@@ -110,7 +111,7 @@ namespace lms::api::subsonic
|
||||
|
||||
if (track->hasCover())
|
||||
trackResponse.setAttribute("coverArt", idToString(track->getId()));
|
||||
else if (release)
|
||||
else if (release && release->getImage())
|
||||
trackResponse.setAttribute("coverArt", idToString(release->getId()));
|
||||
|
||||
const std::vector<Artist::pointer>& artists{ track->getArtists({ TrackArtistLinkType::Artist }) };
|
||||
|
||||
Reference in New Issue
Block a user