From 9bca05fb51cce54c340aa7a609413c63faa5aa4e Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 27 Jul 2024 18:03:58 +0200 Subject: [PATCH] Display disc subtitles if it is set, even for single disc releases, fixes #492 --- src/libs/database/impl/Release.cpp | 5 +++++ src/libs/database/include/database/Release.hpp | 1 + src/lms/ui/explore/ReleaseView.cpp | 7 +++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/libs/database/impl/Release.cpp b/src/libs/database/impl/Release.cpp index a597de86..e758c1da 100644 --- a/src/libs/database/impl/Release.cpp +++ b/src/libs/database/impl/Release.cpp @@ -514,6 +514,11 @@ namespace lms::db return getArtists().size() > 1; } + bool Release::hasDiscSubtitle() const + { + return utils::fetchQuerySingleResult(session()->query("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()); diff --git a/src/libs/database/include/database/Release.hpp b/src/libs/database/include/database/Release.hpp index 371df127..c402bf40 100644 --- a/src/libs/database/include/database/Release.hpp +++ b/src/libs/database/include/database/Release.hpp @@ -218,6 +218,7 @@ namespace lms::db std::vector> getReleaseArtists() const { return getArtists(TrackArtistLinkType::ReleaseArtist); } bool hasVariousArtists() const; std::vector getSimilarReleases(std::optional offset = {}, std::optional count = {}) const; + bool hasDiscSubtitle() const; template void persist(Action& a) diff --git a/src/lms/ui/explore/ReleaseView.cpp b/src/lms/ui/explore/ReleaseView.cpp index d58f2bfa..839c9bb2 100644 --- a/src/lms/ui/explore/ReleaseView.cpp +++ b/src/lms/ui/explore/ReleaseView.cpp @@ -321,7 +321,8 @@ namespace lms::ui const bool variousArtists{ release->hasVariousArtists() }; const auto totalDisc{ release->getTotalDisc() }; const std::size_t discCount{ release->getDiscCount() }; - const bool isReleaseMultiDisc{ (discCount > 1) || (totalDisc && *totalDisc > 1) }; + const bool hasDiscSubtitle{ release->hasDiscSubtitle() }; + const bool useSubtitleContainers{ (discCount > 1) || (totalDisc && *totalDisc > 1) || hasDiscSubtitle }; // Expect to be called in asc order std::map trackContainers; @@ -392,8 +393,10 @@ namespace lms::ui const auto discNumber{ track->getDiscNumber() }; Wt::WContainerWidget* container; - if (isReleaseMultiDisc && discNumber) + if (useSubtitleContainers && discNumber) container = getOrAddDiscContainer(*discNumber, track->getDiscSubtitle()); + else if (hasDiscSubtitle && !discNumber) + container = getOrAddDiscContainer(0, track->getDiscSubtitle()); else container = getOrAddNoDiscContainer();