diff --git a/approot/release.xml b/approot/release.xml index 0dbbc8ed..caf2b811 100644 --- a/approot/release.xml +++ b/approot/release.xml @@ -54,8 +54,11 @@ -
-

${disc-title}

+

+ ${} +
${image class="Lms-cursor-pointer"}
+ ${
} +
${disc-title}
${play-btn class="d-none d-sm-block btn btn-sm btn-outline-secondary border-0"}
-

+ ${tracks class="d-grid gap-1 Lms-row-container"}
diff --git a/src/lms/ui/Utils.cpp b/src/lms/ui/Utils.cpp index 858c533f..1e8191f4 100644 --- a/src/lms/ui/Utils.cpp +++ b/src/lms/ui/Utils.cpp @@ -104,6 +104,20 @@ namespace lms::ui::utils return cover; } + std::unique_ptr createTrackMediaImage(db::TrackId trackId, ArtworkResource::Size size) + { + std::string url{ LmsApp->getArtworkResource()->getTrackMediaImageUrl(trackId, size) }; + if (url.empty()) + return nullptr; + + auto cover{ std::make_unique() }; + cover->setImageLink(std::move(url)); + cover->setStyleClass("Lms-cover img-fluid"); // HACK + cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); // HACK + + return cover; + } + std::unique_ptr createFilter(const Wt::WString& name, const Wt::WString& tooltip, std::string_view colorStyleClass, bool canDelete) { auto res{ std::make_unique(Wt::WString{ canDelete ? " " : "" } + name, Wt::TextFormat::UnsafeXHTML) }; diff --git a/src/lms/ui/Utils.hpp b/src/lms/ui/Utils.hpp index 2039db95..c29077e2 100644 --- a/src/lms/ui/Utils.hpp +++ b/src/lms/ui/Utils.hpp @@ -34,6 +34,7 @@ #include "database/ReleaseId.hpp" #include "database/TrackId.hpp" +#include "database/Types.hpp" #include "resource/ArtworkResource.hpp" namespace lms::db @@ -58,6 +59,7 @@ namespace lms::ui::utils std::unique_ptr createReleaseCover(db::ReleaseId releaseId, ArtworkResource::Size size); std::unique_ptr createTrackImage(db::TrackId trackId, ArtworkResource::Size size); + std::unique_ptr createTrackMediaImage(db::TrackId trackId, ArtworkResource::Size size); // return nullptr if no image std::unique_ptr createArtistImage(db::ArtistId artistId, ArtworkResource::Size size); std::unique_ptr createFilter(const Wt::WString& name, const Wt::WString& tooltip, std::string_view colorStyleClass, bool canDelete = false); diff --git a/src/lms/ui/explore/ReleaseView.cpp b/src/lms/ui/explore/ReleaseView.cpp index 8fd13d70..9241d1d0 100644 --- a/src/lms/ui/explore/ReleaseView.cpp +++ b/src/lms/ui/explore/ReleaseView.cpp @@ -391,13 +391,24 @@ namespace lms::ui // Expect to be called in asc order std::map trackContainers; - auto getOrAddDiscContainer = [&, releaseId = _releaseId](std::size_t discNumber, const std::string& discSubtitle) -> Wt::WContainerWidget* { + auto getOrAddDiscContainer = [&, releaseId = _releaseId](std::size_t discNumber, const std::string& discSubtitle, db::TrackId trackId) -> Wt::WContainerWidget* { if (auto it{ trackContainers.find(discNumber) }; it != std::cend(trackContainers)) return it->second; Template* disc{ rootContainer->addNew