Now displaying other versions of the release, ref #568
This commit is contained in:
@@ -250,9 +250,10 @@
|
|||||||
</message>
|
</message>
|
||||||
|
|
||||||
<!--Explore:Release-->
|
<!--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.copyright">Copyright</message>
|
||||||
<message id="Lms.Explore.Release.disc">Disc {1}</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">Type</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-broadcast">Broadcast</message>
|
<message id="Lms.Explore.Release.type-primary-broadcast">Broadcast</message>
|
||||||
|
|||||||
@@ -250,9 +250,10 @@
|
|||||||
</message>
|
</message>
|
||||||
|
|
||||||
<!--Explore:Release-->
|
<!--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.copyright">Copyright</message>
|
||||||
<message id="Lms.Explore.Release.disc">Disque {1}</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">Type</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-broadcast">Diffusion</message>
|
<message id="Lms.Explore.Release.type-primary-broadcast">Diffusion</message>
|
||||||
|
|||||||
@@ -250,9 +250,10 @@
|
|||||||
</message>
|
</message>
|
||||||
|
|
||||||
<!--Explore:Release-->
|
<!--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.copyright">Copyright</message>
|
||||||
<message id="Lms.Explore.Release.disc">Disco {1}</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">Tipo</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-broadcast">Trasmissione</message>
|
<message id="Lms.Explore.Release.type-primary-broadcast">Trasmissione</message>
|
||||||
|
|||||||
@@ -276,9 +276,10 @@
|
|||||||
</message>
|
</message>
|
||||||
|
|
||||||
<!--Explore:Release-->
|
<!--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.copyright">Prawa autorskie</message>
|
||||||
<message id="Lms.Explore.Release.disc">Dysk {1}</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">Typ</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
<message id="Lms.Explore.Release.type-primary-album">Album</message>
|
||||||
<message id="Lms.Explore.Release.type-primary-broadcast">Audycja</message>
|
<message id="Lms.Explore.Release.type-primary-broadcast">Audycja</message>
|
||||||
|
|||||||
@@ -250,10 +250,11 @@
|
|||||||
|
|
||||||
|
|
||||||
<!--Explore:Release-->
|
<!--Explore:Release-->
|
||||||
<message id="Lms.Explore.Release.similar-releases">相似专辑</message>
|
|
||||||
<message id="Lms.Explore.Release.copyright">版权所有</message>
|
<message id="Lms.Explore.Release.copyright">版权所有</message>
|
||||||
<message id="Lms.Explore.Release.disc">唱片 {1}</message>
|
<message id="Lms.Explore.Release.disc">唱片 {1}</message>
|
||||||
|
|
||||||
|
<message id="Lms.Explore.Release.similar-releases">相似专辑</message>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,10 @@
|
|||||||
${</if-has-copyright>}
|
${</if-has-copyright>}
|
||||||
</div>
|
</div>
|
||||||
</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>}
|
${<if-has-similar-releases>}
|
||||||
<h3>${tr:Lms.Explore.Release.similar-releases}</h3>
|
<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"}
|
${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/WImage.h>
|
||||||
#include <Wt/WText.h>
|
#include <Wt/WText.h>
|
||||||
|
|
||||||
|
#include "core/EnumSet.hpp"
|
||||||
#include "database/Artist.hpp"
|
#include "database/Artist.hpp"
|
||||||
#include "database/Release.hpp"
|
#include "database/Release.hpp"
|
||||||
|
|
||||||
@@ -34,9 +35,15 @@ namespace lms::ui::releaseListHelpers
|
|||||||
|
|
||||||
namespace
|
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->bindWidget("release-name", utils::createReleaseAnchor(release));
|
||||||
entry->addFunction("tr", &Wt::WTemplate::Functions::tr);
|
entry->addFunction("tr", &Wt::WTemplate::Functions::tr);
|
||||||
@@ -48,14 +55,17 @@ namespace lms::ui::releaseListHelpers
|
|||||||
anchor->setImage(std::move(image));
|
anchor->setImage(std::move(image));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto artistAnchors{ utils::createArtistsAnchorsForRelease(release, artist ? artist->getId() : ArtistId{}, "link-secondary") };
|
if (options.contains(ReleaseOptions::ShowArtist))
|
||||||
if (artistAnchors)
|
|
||||||
{
|
{
|
||||||
entry->setCondition("if-has-artist", true);
|
auto artistAnchors{ utils::createArtistsAnchorsForRelease(release, artist ? artist->getId() : ArtistId{}, "link-secondary") };
|
||||||
entry->bindWidget("artist-name", std::move(artistAnchors));
|
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()) };
|
Wt::WString year{ releaseHelpers::buildReleaseYearString(release->getYear(), release->getOriginalYear()) };
|
||||||
if (!year.empty())
|
if (!year.empty())
|
||||||
@@ -69,19 +79,19 @@ namespace lms::ui::releaseListHelpers
|
|||||||
}
|
}
|
||||||
} // namespace
|
} // 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)
|
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)
|
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
|
} // 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> 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> 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::releaseListHelpers
|
||||||
|
|
||||||
namespace lms::ui::releaseHelpers
|
namespace lms::ui::releaseHelpers
|
||||||
|
|||||||
@@ -238,6 +238,7 @@ namespace lms::ui
|
|||||||
|
|
||||||
refreshCopyright(release);
|
refreshCopyright(release);
|
||||||
refreshLinks(release);
|
refreshLinks(release);
|
||||||
|
refreshOtherVersions(release);
|
||||||
refreshSimilarReleases(similarReleasesIds);
|
refreshSimilarReleases(similarReleasesIds);
|
||||||
|
|
||||||
bindString("name", Wt::WString::fromUTF8(std::string{ release->getName() }), Wt::TextFormat::Plain);
|
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;
|
return;
|
||||||
|
|
||||||
setCondition("if-has-similar-releases", true);
|
setCondition("if-has-similar-releases", true);
|
||||||
auto* similarReleasesContainer{ bindNew<Wt::WContainerWidget>("similar-releases") };
|
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) };
|
const db::Release::pointer similarRelease{ db::Release::find(LmsApp->getDbSession(), id) };
|
||||||
if (!similarRelease)
|
if (!similarRelease)
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ namespace lms::ui
|
|||||||
void refreshReleaseArtists(const db::ObjectPtr<db::Release>& release);
|
void refreshReleaseArtists(const db::ObjectPtr<db::Release>& release);
|
||||||
void refreshCopyright(const db::ObjectPtr<db::Release>& release);
|
void refreshCopyright(const db::ObjectPtr<db::Release>& release);
|
||||||
void refreshLinks(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;
|
Filters& _filters;
|
||||||
PlayQueueController& _playQueueController;
|
PlayQueueController& _playQueueController;
|
||||||
|
|||||||
Reference in New Issue
Block a user