Added artwork+biography in artist view, ref #640

This commit is contained in:
emeric
2025-03-23 14:49:27 +01:00
parent cb631eea06
commit 9dd8b4b381
14 changed files with 88 additions and 39 deletions
+13
View File
@@ -35,6 +35,7 @@
#include "database/TrackList.hpp"
#include "LmsApplication.hpp"
#include "ModalManager.hpp"
#include "explore/Filters.hpp"
namespace lms::ui::utils
@@ -63,6 +64,18 @@ namespace lms::ui::utils
return oss.str();
}
void showArtworkModal(Wt::WLink image)
{
auto rawImage{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Explore.template.full-modal-artwork")) };
rawImage->bindNew<Wt::WImage>("artwork", image);
Wt::WTemplate* rawImagePtr{ rawImage.get() };
rawImage->clicked().connect([=] {
LmsApp->getModalManager().dispose(rawImagePtr);
});
LmsApp->getModalManager().show(std::move(rawImage));
}
std::unique_ptr<Wt::WImage> createArtistImage(db::ArtistId artistId, ArtworkResource::Size size)
{
auto image{ std::make_unique<Wt::WImage>() };
+2
View File
@@ -54,6 +54,8 @@ namespace lms::ui::utils
{
std::string durationToString(std::chrono::milliseconds msDuration);
void showArtworkModal(Wt::WLink image);
std::unique_ptr<Wt::WImage> createReleaseCover(db::ReleaseId releaseId, ArtworkResource::Size size);
std::unique_ptr<Wt::WImage> createTrackImage(db::TrackId trackId, ArtworkResource::Size size);
std::unique_ptr<Wt::WImage> createArtistImage(db::ArtistId artistId, ArtworkResource::Size size);
+27
View File
@@ -23,6 +23,7 @@
#include "core/String.hpp"
#include "database/Artist.hpp"
#include "database/ArtistInfo.hpp"
#include "database/Cluster.hpp"
#include "database/Release.hpp"
#include "database/ScanSettings.hpp"
@@ -118,6 +119,8 @@ namespace lms::ui
LmsApp->setTitle(artist->getName());
_artistId = *artistId;
refreshArtwork();
refreshArtistInfo();
refreshReleases();
refreshAppearsOnReleases();
refreshNonReleaseTracks();
@@ -188,6 +191,30 @@ namespace lms::ui
}
}
void Artist::refreshArtwork()
{
auto* image{ bindWidget<Wt::WImage>("artwork", utils::createArtistImage(_artistId, ArtworkResource::Size::Large)) };
image->clicked().connect([this] {
utils::showArtworkModal(Wt::WLink{ LmsApp->getArtworkResource()->getArtistImageUrl(_artistId) });
});
}
void Artist::refreshArtistInfo()
{
db::ArtistInfo::find(LmsApp->getDbSession(), _artistId, db::Range{ .offset = 0, .size = 1 }, [this](const db::ArtistInfo::pointer& _info) {
if (!_info->getBiography().empty())
{
setCondition("if-has-biography", true);
Wt::WText* bio{ bindNew<Wt::WText>("biography", std::string{ _info->getBiography() }, Wt::TextFormat::Plain) };
bio->setInline(false);
bio->setToolTip(tr("Lms.Explore.Artist.biography"));
bio->clicked().connect([bio] {
bio->toggleStyleClass("Lms-multiline-clamp", !bio->hasStyleClass("Lms-multiline-clamp")); // hack
});
}
});
}
void Artist::refreshReleases()
{
_releaseContainers.clear();
+2
View File
@@ -47,6 +47,8 @@ namespace lms::ui
private:
void refreshView();
void refreshArtwork();
void refreshArtistInfo();
void refreshReleases();
void refreshAppearsOnReleases();
void refreshNonReleaseTracks();
+1 -8
View File
@@ -309,14 +309,7 @@ namespace lms::ui
auto* image{ bindWidget<Wt::WImage>("cover", utils::createReleaseCover(release->getId(), ArtworkResource::Size::Large)) };
image->clicked().connect([=] {
auto fullCover{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Explore.Release.template.full-cover")) };
fullCover->bindNew<Wt::WImage>("cover-full", Wt::WLink{ LmsApp->getArtworkResource()->getReleaseCoverUrl(*releaseId) });
Wt::WTemplate* fullCoverPtr{ fullCover.get() };
fullCover->clicked().connect([=] {
LmsApp->getModalManager().dispose(fullCoverPtr);
});
LmsApp->getModalManager().show(std::move(fullCover));
utils::showArtworkModal(Wt::WLink{ LmsApp->getArtworkResource()->getReleaseCoverUrl(*releaseId) });
});
Wt::WContainerWidget* clusterContainers{ bindNew<Wt::WContainerWidget>("clusters") };