Introducing new table medium, ref #699
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include "database/objects/Artwork.hpp"
|
||||
#include "database/objects/Cluster.hpp"
|
||||
#include "database/objects/Directory.hpp"
|
||||
#include "database/objects/Medium.hpp"
|
||||
#include "database/objects/Release.hpp"
|
||||
#include "database/objects/Track.hpp"
|
||||
#include "database/objects/User.hpp"
|
||||
@@ -207,10 +208,12 @@ namespace lms::api::subsonic
|
||||
albumNode.addArrayValue("releaseTypes", releaseType);
|
||||
|
||||
albumNode.createEmptyArrayChild("discTitles");
|
||||
for (const DiscInfo& discInfo : release->getDiscs())
|
||||
for (const auto& medium : release->getMediums())
|
||||
{
|
||||
if (!discInfo.name.empty())
|
||||
albumNode.addArrayChild("discTitles", createDiscTitle(discInfo));
|
||||
if (medium->getName().empty())
|
||||
continue;
|
||||
|
||||
albumNode.addArrayChild("discTitles", createDiscTitle(medium));
|
||||
}
|
||||
|
||||
albumNode.createEmptyArrayChild("recordLabels");
|
||||
|
||||
@@ -19,14 +19,16 @@
|
||||
|
||||
#include "responses/DiscTitle.hpp"
|
||||
|
||||
#include "database/objects/Medium.hpp"
|
||||
|
||||
namespace lms::api::subsonic
|
||||
{
|
||||
Response::Node createDiscTitle(const db::DiscInfo& discInfo)
|
||||
Response::Node createDiscTitle(const db::ObjectPtr<db::Medium>& medium)
|
||||
{
|
||||
Response::Node discTitleNode;
|
||||
|
||||
discTitleNode.setAttribute("disc", discInfo.position);
|
||||
discTitleNode.setAttribute("title", discInfo.name);
|
||||
discTitleNode.setAttribute("disc", medium->getPosition() ? *medium->getPosition() : 0);
|
||||
discTitleNode.setAttribute("title", medium->getName());
|
||||
|
||||
return discTitleNode;
|
||||
}
|
||||
|
||||
@@ -19,11 +19,16 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "database/Types.hpp"
|
||||
#include "database/Object.hpp"
|
||||
|
||||
#include "SubsonicResponse.hpp"
|
||||
|
||||
namespace lms::db
|
||||
{
|
||||
class Medium;
|
||||
}
|
||||
|
||||
namespace lms::api::subsonic
|
||||
{
|
||||
Response::Node createDiscTitle(const db::DiscInfo& discInfo);
|
||||
Response::Node createDiscTitle(const db::ObjectPtr<db::Medium>& medium);
|
||||
}
|
||||
@@ -19,19 +19,23 @@
|
||||
|
||||
#include "responses/ReplayGain.hpp"
|
||||
|
||||
#include "database/objects/Medium.hpp"
|
||||
#include "database/objects/Track.hpp"
|
||||
|
||||
namespace lms::api::subsonic
|
||||
{
|
||||
Response::Node createReplayGainNode(const db::ObjectPtr<db::Track>& track)
|
||||
Response::Node createReplayGainNode(const db::Track::pointer& track, const db::Medium::pointer& medium)
|
||||
{
|
||||
Response::Node replayGainNode;
|
||||
|
||||
if (const auto trackReplayGain{ track->getTrackReplayGain() })
|
||||
if (const auto trackReplayGain{ track->getReplayGain() })
|
||||
replayGainNode.setAttribute("trackGain", *trackReplayGain);
|
||||
|
||||
if (const auto releaseReplayGain{ track->getReleaseReplayGain() })
|
||||
replayGainNode.setAttribute("albumGain", *releaseReplayGain);
|
||||
if (medium)
|
||||
{
|
||||
if (const auto releaseReplayGain{ medium->getReplayGain() })
|
||||
replayGainNode.setAttribute("albumGain", *releaseReplayGain);
|
||||
}
|
||||
|
||||
return replayGainNode;
|
||||
}
|
||||
|
||||
@@ -25,10 +25,11 @@
|
||||
|
||||
namespace lms::db
|
||||
{
|
||||
class Medium;
|
||||
class Track;
|
||||
}
|
||||
} // namespace lms::db
|
||||
|
||||
namespace lms::api::subsonic
|
||||
{
|
||||
Response::Node createReplayGainNode(const db::ObjectPtr<db::Track>& track);
|
||||
Response::Node createReplayGainNode(const db::ObjectPtr<db::Track>& track, const db::ObjectPtr<db::Medium>& medium);
|
||||
}
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "database/objects/Cluster.hpp"
|
||||
#include "database/objects/Directory.hpp"
|
||||
#include "database/objects/MediaLibrary.hpp"
|
||||
#include "database/objects/Medium.hpp"
|
||||
#include "database/objects/Release.hpp"
|
||||
#include "database/objects/Track.hpp"
|
||||
#include "database/objects/TrackArtistLink.hpp"
|
||||
@@ -78,6 +79,8 @@ namespace lms::api::subsonic
|
||||
{
|
||||
LMS_SCOPED_TRACE_DETAILED("Subsonic", "CreateSong");
|
||||
|
||||
const auto medium{ track->getMedium() };
|
||||
|
||||
Response::Node trackResponse;
|
||||
|
||||
if (!id3)
|
||||
@@ -91,8 +94,8 @@ namespace lms::api::subsonic
|
||||
trackResponse.setAttribute("title", track->getName());
|
||||
if (track->getTrackNumber())
|
||||
trackResponse.setAttribute("track", *track->getTrackNumber());
|
||||
if (track->getDiscNumber())
|
||||
trackResponse.setAttribute("discNumber", *track->getDiscNumber());
|
||||
if (medium && medium->getPosition())
|
||||
trackResponse.setAttribute("discNumber", *medium->getPosition());
|
||||
if (const auto originalYear{ track->getOriginalYear() })
|
||||
trackResponse.setAttribute("year", *originalYear);
|
||||
else if (const auto year{ track->getYear() })
|
||||
@@ -254,7 +257,7 @@ namespace lms::api::subsonic
|
||||
};
|
||||
trackResponse.setAttribute("explicitStatus", advisoryToExplicitStatus(track->getAdvisory()));
|
||||
|
||||
trackResponse.addChild("replayGain", createReplayGainNode(track));
|
||||
trackResponse.addChild("replayGain", createReplayGainNode(track, medium));
|
||||
|
||||
return trackResponse;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user