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
+13 -27
View File
@@ -30,6 +30,7 @@
#include "database/objects/Cluster.hpp"
#include "database/objects/Directory.hpp"
#include "database/objects/MediaLibrary.hpp"
#include "database/objects/Medium.hpp"
#include "database/objects/Track.hpp"
#include "database/objects/TrackArtistLink.hpp"
#include "database/objects/TrackEmbeddedImage.hpp"
@@ -577,28 +578,6 @@ namespace lms::db
return utils::fetchQuerySingleResult(createQuery<int>(session, "COUNT(DISTINCT r.id)", params));
}
std::size_t Release::getDiscCount() const
{
assert(session());
int res{ utils::fetchQuerySingleResult(session()->query<int>("SELECT COUNT(DISTINCT disc_number) FROM track t").where("t.release_id = ?").bind(getId())) };
return res;
}
std::vector<DiscInfo> Release::getDiscs() const
{
assert(session());
using ResultType = std::tuple<int, std::string>;
const auto query{ session()->query<ResultType>("SELECT DISTINCT disc_number, disc_subtitle FROM track t").where("t.release_id = ?").bind(getId()).orderBy("disc_number") };
std::vector<DiscInfo> discs;
utils::forEachQueryResult(query, [&](ResultType&& res) {
discs.emplace_back(DiscInfo{ static_cast<std::size_t>(std::get<int>(res)), std::move(std::get<std::string>(res)) });
});
return discs;
}
core::PartialDateTime Release::getDate() const
{
return getDate(false);
@@ -753,6 +732,18 @@ namespace lms::db
return _preferredArtwork.id();
}
std::vector<ObjectPtr<Medium>> Release::getMediums() const
{
assert(session());
// Select the similar releases using the 5 most used clusters of the release
auto query{ session()->query<Wt::Dbo::ptr<Medium>>("SELECT m from medium m") };
query.where("m.release_id = ?").bind(getId());
query.orderBy("m.position");
return utils::fetchQueryResults<Medium::pointer>(query);
}
void Release::clearLabels()
{
_labels.clear();
@@ -794,11 +785,6 @@ namespace lms::db
return getArtists().size() > 1;
}
bool Release::hasDiscSubtitle() const
{
return utils::fetchQuerySingleResult(session()->query<int>("SELECT EXISTS (SELECT 1 FROM track WHERE disc_subtitle IS NOT NULL AND disc_subtitle <> '' AND release_id = ?)").bind(getId()));
}
std::size_t Release::getTrackCount() const
{
assert(session());