Now displaying other versions of the release, ref #568
This commit is contained in:
@@ -250,9 +250,10 @@
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.similar-releases">Similar albums</message>
|
||||
<message id="Lms.Explore.Release.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.Release.disc">Disc {1}</message>
|
||||
<message id="Lms.Explore.Release.other-versions">Other versions</message>
|
||||
<message id="Lms.Explore.Release.similar-releases">Similar albums</message>
|
||||
<message id="Lms.Explore.Release.type">Type</message>
|
||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||
<message id="Lms.Explore.Release.type-primary-broadcast">Broadcast</message>
|
||||
|
||||
@@ -250,9 +250,10 @@
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.similar-releases">Albums similaires</message>
|
||||
<message id="Lms.Explore.Release.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.Release.disc">Disque {1}</message>
|
||||
<message id="Lms.Explore.Release.other-versions">Autres versions</message>
|
||||
<message id="Lms.Explore.Release.similar-releases">Albums similaires</message>
|
||||
<message id="Lms.Explore.Release.type">Type</message>
|
||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||
<message id="Lms.Explore.Release.type-primary-broadcast">Diffusion</message>
|
||||
|
||||
@@ -250,9 +250,10 @@
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.similar-releases">Album simili</message>
|
||||
<message id="Lms.Explore.Release.copyright">Copyright</message>
|
||||
<message id="Lms.Explore.Release.disc">Disco {1}</message>
|
||||
<message id="Lms.Explore.Release.other-versions">Altre versioni</message>
|
||||
<message id="Lms.Explore.Release.similar-releases">Album simili</message>
|
||||
<message id="Lms.Explore.Release.type">Tipo</message>
|
||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||
<message id="Lms.Explore.Release.type-primary-broadcast">Trasmissione</message>
|
||||
|
||||
@@ -276,9 +276,10 @@
|
||||
</message>
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.similar-releases">Podobne albumy</message>
|
||||
<message id="Lms.Explore.Release.copyright">Prawa autorskie</message>
|
||||
<message id="Lms.Explore.Release.disc">Dysk {1}</message>
|
||||
<message id="Lms.Explore.Release.other-versions">Inne wersje</message>
|
||||
<message id="Lms.Explore.Release.similar-releases">Podobne albumy</message>
|
||||
<message id="Lms.Explore.Release.type">Typ</message>
|
||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||
<message id="Lms.Explore.Release.type-primary-broadcast">Audycja</message>
|
||||
|
||||
@@ -250,10 +250,11 @@
|
||||
|
||||
|
||||
<!--Explore:Release-->
|
||||
<message id="Lms.Explore.Release.similar-releases">相似专辑</message>
|
||||
<message id="Lms.Explore.Release.copyright">版权所有</message>
|
||||
<message id="Lms.Explore.Release.disc">唱片 {1}</message>
|
||||
|
||||
<message id="Lms.Explore.Release.similar-releases">相似专辑</message>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
${</if-has-copyright>}
|
||||
</div>
|
||||
</div>
|
||||
${<if-has-other-versions>}
|
||||
<h3>${tr:Lms.Explore.Release.other-versions}</h3>
|
||||
${other-versions class="row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 gx-2 gy-4"}
|
||||
${</if-has-other-versions>}
|
||||
${<if-has-similar-releases>}
|
||||
<h3>${tr:Lms.Explore.Release.similar-releases}</h3>
|
||||
${similar-releases class="row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 gx-2 gy-4"}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <Wt/WImage.h>
|
||||
#include <Wt/WText.h>
|
||||
|
||||
#include "core/EnumSet.hpp"
|
||||
#include "database/Artist.hpp"
|
||||
#include "database/Release.hpp"
|
||||
|
||||
@@ -34,9 +35,15 @@ namespace lms::ui::releaseListHelpers
|
||||
|
||||
namespace
|
||||
{
|
||||
std::unique_ptr<Wt::WTemplate> createEntryInternal(const Release::pointer& release, const std::string& templateKey, const Artist::pointer& artist, const bool showYear)
|
||||
enum class ReleaseOptions
|
||||
{
|
||||
auto entry{ std::make_unique<Wt::WTemplate>(Wt::WString::tr(templateKey)) };
|
||||
ShowArtist,
|
||||
ShowYear,
|
||||
};
|
||||
|
||||
std::unique_ptr<Wt::WTemplate> createEntryInternal(const Release::pointer& release, const Artist::pointer& artist, core::EnumSet<ReleaseOptions> options)
|
||||
{
|
||||
auto entry{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Explore.Releases.template.entry-grid")) };
|
||||
|
||||
entry->bindWidget("release-name", utils::createReleaseAnchor(release));
|
||||
entry->addFunction("tr", &Wt::WTemplate::Functions::tr);
|
||||
@@ -48,14 +55,17 @@ namespace lms::ui::releaseListHelpers
|
||||
anchor->setImage(std::move(image));
|
||||
}
|
||||
|
||||
auto artistAnchors{ utils::createArtistsAnchorsForRelease(release, artist ? artist->getId() : ArtistId{}, "link-secondary") };
|
||||
if (artistAnchors)
|
||||
if (options.contains(ReleaseOptions::ShowArtist))
|
||||
{
|
||||
entry->setCondition("if-has-artist", true);
|
||||
entry->bindWidget("artist-name", std::move(artistAnchors));
|
||||
auto artistAnchors{ utils::createArtistsAnchorsForRelease(release, artist ? artist->getId() : ArtistId{}, "link-secondary") };
|
||||
if (artistAnchors)
|
||||
{
|
||||
entry->setCondition("if-has-artist", true);
|
||||
entry->bindWidget("artist-name", std::move(artistAnchors));
|
||||
}
|
||||
}
|
||||
|
||||
if (showYear)
|
||||
if (options.contains(ReleaseOptions::ShowYear))
|
||||
{
|
||||
Wt::WString year{ releaseHelpers::buildReleaseYearString(release->getYear(), release->getOriginalYear()) };
|
||||
if (!year.empty())
|
||||
@@ -69,19 +79,19 @@ namespace lms::ui::releaseListHelpers
|
||||
}
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<Wt::WTemplate> createEntry(const Release::pointer& release, const Artist::pointer& artist, bool showYear)
|
||||
{
|
||||
return createEntryInternal(release, "Lms.Explore.Releases.template.entry-grid", artist, showYear);
|
||||
}
|
||||
|
||||
std::unique_ptr<Wt::WTemplate> createEntry(const Release::pointer& release)
|
||||
{
|
||||
return createEntry(release, Artist::pointer{}, false /*year*/);
|
||||
return createEntryInternal(release, Artist::pointer{}, core::EnumSet<ReleaseOptions>{ ReleaseOptions::ShowArtist });
|
||||
}
|
||||
|
||||
std::unique_ptr<Wt::WTemplate> createEntryForArtist(const db::Release::pointer& release, const db::Artist::pointer& artist)
|
||||
{
|
||||
return createEntry(release, artist, true);
|
||||
return createEntryInternal(release, artist, core::EnumSet<ReleaseOptions>{ ReleaseOptions::ShowArtist, ReleaseOptions::ShowYear });
|
||||
}
|
||||
|
||||
std::unique_ptr<Wt::WTemplate> createEntryForOtherVersions(const db::ObjectPtr<db::Release>& release)
|
||||
{
|
||||
return createEntryInternal(release, Artist::pointer{}, core::EnumSet<ReleaseOptions>{ ReleaseOptions::ShowYear });
|
||||
}
|
||||
} // namespace lms::ui::releaseListHelpers
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ namespace lms::ui::releaseListHelpers
|
||||
{
|
||||
std::unique_ptr<Wt::WTemplate> createEntry(const db::ObjectPtr<db::Release>& release);
|
||||
std::unique_ptr<Wt::WTemplate> createEntryForArtist(const db::ObjectPtr<db::Release>& release, const db::ObjectPtr<db::Artist>& artist);
|
||||
std::unique_ptr<Wt::WTemplate> createEntryForOtherVersions(const db::ObjectPtr<db::Release>& release);
|
||||
} // namespace lms::ui::releaseListHelpers
|
||||
|
||||
namespace lms::ui::releaseHelpers
|
||||
|
||||
@@ -238,6 +238,7 @@ namespace lms::ui
|
||||
|
||||
refreshCopyright(release);
|
||||
refreshLinks(release);
|
||||
refreshOtherVersions(release);
|
||||
refreshSimilarReleases(similarReleasesIds);
|
||||
|
||||
bindString("name", Wt::WString::fromUTF8(std::string{ release->getName() }), Wt::TextFormat::Plain);
|
||||
@@ -560,15 +561,44 @@ namespace lms::ui
|
||||
}
|
||||
}
|
||||
|
||||
void Release::refreshSimilarReleases(const std::vector<ReleaseId>& similarReleasesId)
|
||||
void Release::refreshOtherVersions(const db::Release::pointer& release)
|
||||
{
|
||||
if (similarReleasesId.empty())
|
||||
const auto groupMBID{ release->getGroupMBID() };
|
||||
if (!groupMBID)
|
||||
return;
|
||||
|
||||
db::Release::FindParameters params;
|
||||
params.setReleaseGroupMBID(groupMBID);
|
||||
|
||||
const auto releaseIds{ db::Release::findIds(LmsApp->getDbSession(), params) };
|
||||
if (releaseIds.results.size() <= 1)
|
||||
return;
|
||||
|
||||
setCondition("if-has-other-versions", true);
|
||||
auto* container{ bindNew<Wt::WContainerWidget>("other-versions") };
|
||||
|
||||
for (const ReleaseId id : releaseIds.results)
|
||||
{
|
||||
if (id == _releaseId)
|
||||
continue;
|
||||
|
||||
const db::Release::pointer release{ db::Release::find(LmsApp->getDbSession(), id) };
|
||||
if (!release)
|
||||
continue;
|
||||
|
||||
container->addWidget(releaseListHelpers::createEntryForOtherVersions(release));
|
||||
}
|
||||
}
|
||||
|
||||
void Release::refreshSimilarReleases(const std::vector<ReleaseId>& similarReleaseIds)
|
||||
{
|
||||
if (similarReleaseIds.empty())
|
||||
return;
|
||||
|
||||
setCondition("if-has-similar-releases", true);
|
||||
auto* similarReleasesContainer{ bindNew<Wt::WContainerWidget>("similar-releases") };
|
||||
|
||||
for (const ReleaseId id : similarReleasesId)
|
||||
for (const ReleaseId id : similarReleaseIds)
|
||||
{
|
||||
const db::Release::pointer similarRelease{ db::Release::find(LmsApp->getDbSession(), id) };
|
||||
if (!similarRelease)
|
||||
|
||||
@@ -44,7 +44,8 @@ namespace lms::ui
|
||||
void refreshReleaseArtists(const db::ObjectPtr<db::Release>& release);
|
||||
void refreshCopyright(const db::ObjectPtr<db::Release>& release);
|
||||
void refreshLinks(const db::ObjectPtr<db::Release>& release);
|
||||
void refreshSimilarReleases(const std::vector<db::ReleaseId>& similarReleasesId);
|
||||
void refreshOtherVersions(const db::ObjectPtr<db::Release>& release);
|
||||
void refreshSimilarReleases(const std::vector<db::ReleaseId>& similarReleaseIds);
|
||||
|
||||
Filters& _filters;
|
||||
PlayQueueController& _playQueueController;
|
||||
|
||||
Reference in New Issue
Block a user