Introducing new table medium, ref #699

This commit is contained in:
emeric
2025-07-28 22:36:27 +02:00
parent 3c3e551676
commit 0ceaf4cfaa
36 changed files with 964 additions and 422 deletions
+6 -3
View File
@@ -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);
}
+6 -3
View File
@@ -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;
}