Added artwork+biography in artist view, ref #640
This commit is contained in:
@@ -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>() };
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -47,6 +47,8 @@ namespace lms::ui
|
||||
|
||||
private:
|
||||
void refreshView();
|
||||
void refreshArtwork();
|
||||
void refreshArtistInfo();
|
||||
void refreshReleases();
|
||||
void refreshAppearsOnReleases();
|
||||
void refreshNonReleaseTracks();
|
||||
|
||||
@@ -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") };
|
||||
|
||||
Reference in New Issue
Block a user