From 13b6437cea6c2ce80e4ebb46e199f90d67473f8b Mon Sep 17 00:00:00 2001 From: emeric Date: Mon, 9 May 2022 20:33:34 +0200 Subject: [PATCH] Still converting to bootstrap 5. Restored search --- approot/artists.xml | 2 +- approot/release.xml | 4 +- approot/releases.xml | 8 +- approot/search.xml | 18 +++- src/lms/ui/explore/ReleaseView.cpp | 4 +- src/lms/ui/explore/SearchView.cpp | 129 +++++++++-------------------- src/lms/ui/explore/SearchView.hpp | 18 ++-- 7 files changed, 73 insertions(+), 110 deletions(-) diff --git a/approot/artists.xml b/approot/artists.xml index 999046a0..f4e85f7d 100644 --- a/approot/artists.xml +++ b/approot/artists.xml @@ -34,7 +34,7 @@ - ${name class="text-decoration-none text-reset"} + ${name class="text-decoration-none link-secondary"} diff --git a/approot/release.xml b/approot/release.xml index 71b381b8..4d58d83e 100644 --- a/approot/release.xml +++ b/approot/release.xml @@ -14,7 +14,7 @@

${name}

${}${artists}${} - ${}${tr:Lms.Explore.various-artists}${} + ${}
${tr:Lms.Explore.various-artists}
${
}
${}${year}${} (${orig-year})${} · ${}${duration}
${clusters class="mb-2"}
@@ -47,7 +47,7 @@ - ${artist} + ${artist class="text-decoration-none link-success"} diff --git a/approot/releases.xml b/approot/releases.xml index 5f5b2fef..55e4f6ba 100644 --- a/approot/releases.xml +++ b/approot/releases.xml @@ -41,10 +41,10 @@
${cover class="shadow-sm"} - ${release-name class="text-truncate text-nowrap"} - ${}${year}${} - ${}${artist-name class=" text-truncate text-nowrap"}${} - ${}${tr:Lms.Explore.various-artists}${} + ${release-name class="text-truncate text-nowrap text-decoration-none link-success"} + ${}${artist-name class=" text-truncate text-nowrap text-decoration-none link-secondary"}${} + ${}
${tr:Lms.Explore.various-artists}
${
} + ${}
${year}
${
}
diff --git a/approot/search.xml b/approot/search.xml index 977a3a56..fc357d26 100644 --- a/approot/search.xml +++ b/approot/search.xml @@ -3,8 +3,22 @@ - ${mode class="nav nav-pills mb-3"} - ${stack} + +
+
${releases}
+
${artists}
+
${tracks}
+
diff --git a/src/lms/ui/explore/ReleaseView.cpp b/src/lms/ui/explore/ReleaseView.cpp index 778d9155..d6836c65 100644 --- a/src/lms/ui/explore/ReleaseView.cpp +++ b/src/lms/ui/explore/ReleaseView.cpp @@ -268,7 +268,9 @@ Release::refreshView() { if (!firstArtist) artistsContainer->addNew(" · "); - artistsContainer->addWidget(LmsApplication::createArtistAnchor(artist)); + auto anchor {LmsApplication::createArtistAnchor(artist)}; + anchor->addStyleClass("link-success text-decoration-none"); // hack + artistsContainer->addWidget(std::move(anchor)); firstArtist = false; } } diff --git a/src/lms/ui/explore/SearchView.cpp b/src/lms/ui/explore/SearchView.cpp index 21f78ecc..4ef0dee2 100644 --- a/src/lms/ui/explore/SearchView.cpp +++ b/src/lms/ui/explore/SearchView.cpp @@ -19,19 +19,12 @@ #include "SearchView.hpp" -#include - -#include -#include -#include - #include "services/database/Artist.hpp" #include "services/database/Release.hpp" #include "services/database/Session.hpp" #include "services/database/Track.hpp" #include "common/InfiniteScrollingContainer.hpp" -#include "common/LoadingIndicator.hpp" #include "ArtistListHelpers.hpp" #include "Filters.hpp" #include "LmsApplication.hpp" @@ -45,30 +38,20 @@ namespace UserInterface SearchView::SearchView(Filters* filters) : Wt::WTemplate {Wt::WString::tr("Lms.Explore.Search.template")} , _filters {filters} - , _releaseCollector {*filters, ReleaseCollector::Mode::Search, getMaxCount(Mode::Release)} , _artistCollector {*filters, ArtistCollector::Mode::Search, getMaxCount(Mode::Artist)} + , _releaseCollector {*filters, ReleaseCollector::Mode::Search, getMaxCount(Mode::Release)} , _trackCollector {*filters, TrackCollector::Mode::Search, getMaxCount(Mode::Track)} { addFunction("tr", &Wt::WTemplate::Functions::tr); - Wt::WStackedWidget* stack {bindNew("stack")}; - _menu = bindNew("mode", stack); + _artists = bindNew("artists", Wt::WString::tr("Lms.infinite-scrolling-container")); + _artists->onRequestElements.connect([this] { addSomeArtists(); }); - auto addItem = [=](const Wt::WString& str, [[maybe_unused]] Mode mode, const Wt::WString& templateStr, std::function onRequestElementsFunc) - { - assert(modeToIndex(mode) == _results.size()); + _releases = bindNew("releases", Wt::WString::tr("Lms.Explore.Releases.template.container")); + _releases->onRequestElements.connect([this] { addSomeReleases(); }); - auto results {std::make_unique(templateStr)}; - results->onRequestElements.connect(std::move(onRequestElementsFunc)); - - _results.push_back(results.get()); - _menu->addItem(str, std::move(results)); - }; - - // same order as Mode! - addItem(Wt::WString::tr("Lms.Explore.releases"), Mode::Release, Wt::WString::tr("Lms.Explore.Releases.template.container"), [this]{ addSomeReleases(); }); - addItem(Wt::WString::tr("Lms.Explore.artists"), Mode::Artist, Wt::WString::tr("Lms.infinite-scrolling-container"), [this]{ addSomeArtists(); }); - addItem(Wt::WString::tr("Lms.Explore.tracks"), Mode::Track, Wt::WString::tr("Lms.infinite-scrolling-container"), [this]{ addSomeTracks(); }); + _tracks = bindNew("tracks", Wt::WString::tr("Lms.infinite-scrolling-container")); + _tracks->onRequestElements.connect([this] { addSomeTracks(); }); _filters->updated().connect([=] { @@ -76,24 +59,6 @@ namespace UserInterface }); } - std::size_t - SearchView::modeToIndex(Mode mode) const - { - return static_cast(mode); - } - - Wt::WMenuItem& - SearchView::getItemMenu(Mode mode) const - { - return *_menu->itemAt(modeToIndex(mode)); - } - - InfiniteScrollingContainer& - SearchView::getResultContainer(Mode mode) const - { - return *_results[modeToIndex(mode)]; - } - std::size_t SearchView::getBatchSize(Mode mode) const { @@ -122,92 +87,76 @@ namespace UserInterface void SearchView::refreshView() { - for (InfiniteScrollingContainer* results : _results) - results->clear(); + _artists->clear(); + _releases->clear(); + _tracks->clear(); - addSomeReleases(); addSomeArtists(); + addSomeReleases(); addSomeTracks(); } void SearchView::addSomeArtists() { - InfiniteScrollingContainer& results {getResultContainer(Mode::Artist)}; + using namespace Database; + + const Range range {_artists->getCount(), getBatchSize(Mode::Artist)}; + const RangeResults artistIds {_artistCollector.get(range)}; { - using namespace Database; - - const Range range {results.getCount(), getBatchSize(Mode::Artist)}; - const RangeResults artistIds {_artistCollector.get(range)}; + auto transaction {LmsApp->getDbSession().createSharedTransaction()}; + for (const ArtistId artistId : artistIds.results) { - auto transaction {LmsApp->getDbSession().createSharedTransaction()}; - - for (const ArtistId artistId : artistIds.results) - { - const Artist::pointer artist {Artist::find(LmsApp->getDbSession(), artistId)}; - results.add(ArtistListHelpers::createEntry(artist)); - } + const Artist::pointer artist {Artist::find(LmsApp->getDbSession(), artistId)}; + _artists->add(ArtistListHelpers::createEntry(artist)); } - - results.setHasMore(artistIds.moreResults); } - getItemMenu(Mode::Artist).setDisabled(results.getCount() == 0); + _artists->setHasMore(artistIds.moreResults); } void SearchView::addSomeReleases() { - InfiniteScrollingContainer& results {getResultContainer(Mode::Release)}; + using namespace Database; + + const Range range {_releases->getCount(), getBatchSize(Mode::Release)}; + const RangeResults releaseIds {_releaseCollector.get(range)}; { - using namespace Database; - - const Range range {results.getCount(), getBatchSize(Mode::Release)}; - const RangeResults releaseIds {_releaseCollector.get(range)}; + auto transaction {LmsApp->getDbSession().createSharedTransaction()}; + for (const ReleaseId releaseId : releaseIds.results) { - auto transaction {LmsApp->getDbSession().createSharedTransaction()}; - - for (const ReleaseId releaseId : releaseIds.results) - { - const Release::pointer release {Release::find(LmsApp->getDbSession(), releaseId)}; - results.add(ReleaseListHelpers::createEntry(release)); - } + const Release::pointer release {Release::find(LmsApp->getDbSession(), releaseId)}; + _releases->add(ReleaseListHelpers::createEntry(release)); } - - results.setHasMore(releaseIds.moreResults); } - getItemMenu(Mode::Release).setDisabled(results.getCount() == 0); + _releases->setHasMore(releaseIds.moreResults); } void SearchView::addSomeTracks() { - InfiniteScrollingContainer& results {getResultContainer(Mode::Track)}; + using namespace Database; + + const Range range {_tracks->getCount(), getBatchSize(Mode::Track)}; + const RangeResults trackIds {_trackCollector.get(range)}; + { - using namespace Database; - - const Range range {results.getCount(), getBatchSize(Mode::Track)}; - const RangeResults trackIds {_trackCollector.get(range)}; + auto transaction {LmsApp->getDbSession().createSharedTransaction()}; + for (const TrackId trackId : trackIds.results) { - auto transaction {LmsApp->getDbSession().createSharedTransaction()}; - - for (const TrackId trackId : trackIds.results) - { - const Track::pointer track {Track::find(LmsApp->getDbSession(), trackId)}; - results.add(TrackListHelpers::createEntry(track, tracksAction)); - } + const Track::pointer track {Track::find(LmsApp->getDbSession(), trackId)}; + _tracks->add(TrackListHelpers::createEntry(track, tracksAction)); } - - results.setHasMore(trackIds.moreResults); } - getItemMenu(Mode::Track).setDisabled(results.getCount() == 0); + _tracks->setHasMore(trackIds.moreResults); } } // namespace UserInterface diff --git a/src/lms/ui/explore/SearchView.hpp b/src/lms/ui/explore/SearchView.hpp index ff97f908..86311ea1 100644 --- a/src/lms/ui/explore/SearchView.hpp +++ b/src/lms/ui/explore/SearchView.hpp @@ -21,8 +21,7 @@ #include -#include -#include +#include #include #include "ArtistCollector.hpp" @@ -49,15 +48,11 @@ namespace UserInterface // same order as in the menu enum class Mode { - Release, Artist, + Release, Track, }; - std::size_t modeToIndex(Mode mode) const; - Wt::WMenuItem& getItemMenu(Mode mode) const; - InfiniteScrollingContainer& getResultContainer(Mode mode) const; - static constexpr Mode _defaultMode {Mode::Release}; static inline std::unordered_map _batchSizes { @@ -75,16 +70,19 @@ namespace UserInterface std::size_t getMaxCount(Mode mode) const; void refreshView(); - void addSomeReleases(); void addSomeArtists(); + void addSomeReleases(); void addSomeTracks(); Filters* _filters {}; - Wt::WMenu* _menu {}; - ReleaseCollector _releaseCollector; ArtistCollector _artistCollector; + ReleaseCollector _releaseCollector; TrackCollector _trackCollector; + InfiniteScrollingContainer* _artists; + InfiniteScrollingContainer* _releases; + InfiniteScrollingContainer* _tracks; + std::vector _results; };