diff --git a/approot/artists.xml b/approot/artists.xml index 92696a37..933930f3 100644 --- a/approot/artists.xml +++ b/approot/artists.xml @@ -13,6 +13,7 @@ ${artists class="list-group"} + ${show-more} diff --git a/approot/messages.xml b/approot/messages.xml index 44479447..38d2396f 100644 --- a/approot/messages.xml +++ b/approot/messages.xml @@ -15,4 +15,6 @@ Type Value + +Show more diff --git a/approot/releases.xml b/approot/releases.xml index 374bcd91..23957a5f 100644 --- a/approot/releases.xml +++ b/approot/releases.xml @@ -14,6 +14,7 @@ ${releases class="list-group"} + ${show-more} diff --git a/approot/templates.xml b/approot/templates.xml index a6581c0f..d0b47ac9 100644 --- a/approot/templates.xml +++ b/approot/templates.xml @@ -17,6 +17,10 @@ ${contents} + + ${tr:msg-show-more} + +
${add-filter}${filters} diff --git a/approot/tracks.xml b/approot/tracks.xml index 62091789..823e6fb9 100644 --- a/approot/tracks.xml +++ b/approot/tracks.xml @@ -14,6 +14,7 @@
${tracks class="list-group"} + ${show-more}
diff --git a/src/database/DbArtist.cpp b/src/database/DbArtist.cpp index 7c65b231..bce519e2 100644 --- a/src/database/DbArtist.cpp +++ b/src/database/DbArtist.cpp @@ -120,7 +120,7 @@ Artist::getByFilter(Wt::Dbo::Session& session, const std::vector keywords, int offset, int size, bool& moreResults) { - Wt::Dbo::collection collection = getQuery(session, clusters, keywords).limit(size).offset(offset); + Wt::Dbo::collection collection = getQuery(session, clusters, keywords).limit(size + 1).offset(offset); auto res = std::vector(collection.begin(), collection.end()); diff --git a/src/database/Release.cpp b/src/database/Release.cpp index d3d73732..0e902da8 100644 --- a/src/database/Release.cpp +++ b/src/database/Release.cpp @@ -118,7 +118,7 @@ Release::getByFilter(Wt::Dbo::Session& session, const std::vector keywords, int offset, int size, bool& moreResults) { - Wt::Dbo::collection collection = getQuery(session, clusterIds, keywords).limit(size).offset(offset); + Wt::Dbo::collection collection = getQuery(session, clusterIds, keywords).limit(size + 1).offset(offset); auto res = std::vector(collection.begin(), collection.end()); diff --git a/src/database/Track.cpp b/src/database/Track.cpp index a7d5ab9c..efd5944a 100644 --- a/src/database/Track.cpp +++ b/src/database/Track.cpp @@ -169,7 +169,7 @@ Track::getByFilter(Wt::Dbo::Session& session, const std::vector keywords, int offset, int size, bool& moreResults) { - Wt::Dbo::collection collection = getQuery(session, clusterIds, keywords).limit(size).offset(offset); + Wt::Dbo::collection collection = getQuery(session, clusterIds, keywords).limit(size + 1).offset(offset); auto res = std::vector(collection.begin(), collection.end()); diff --git a/src/ui/ArtistsView.cpp b/src/ui/ArtistsView.cpp index 7373c39b..3038b861 100644 --- a/src/ui/ArtistsView.cpp +++ b/src/ui/ArtistsView.cpp @@ -39,16 +39,25 @@ Artists::Artists(Filters* filters, Wt::WContainerWidget* parent) : Wt::WContainerWidget(parent), _filters(filters) { - auto artists = new Wt::WTemplate(Wt::WString::tr("template-artists"), this); - artists->addFunction("tr", &Wt::WTemplate::Functions::tr); + auto container = new Wt::WTemplate(Wt::WString::tr("template-artists"), this); + container->addFunction("tr", &Wt::WTemplate::Functions::tr); _search = new Wt::WLineEdit(); - artists->bindWidget("search", _search); + container->bindWidget("search", _search); _search->setPlaceholderText(Wt::WString::tr("msg-search-placeholder")); _search->textInput().connect(this, &Artists::refresh); _artistsContainer = new Wt::WContainerWidget(); - artists->bindWidget("artists", _artistsContainer); + container->bindWidget("artists", _artistsContainer); + + _showMore = new Wt::WTemplate(Wt::WString::tr("template-show-more")); + _showMore->addFunction("tr", &Wt::WTemplate::Functions::tr); + container->bindWidget("show-more", _showMore); + + _showMore->clicked().connect(std::bind([=] + { + add_some(); + })); refresh(); @@ -58,9 +67,14 @@ Artists::Artists(Filters* filters, Wt::WContainerWidget* parent) void Artists::refresh() { - auto searchKeywords = splitString(_search->text().toUTF8(), " "); - _artistsContainer->clear(); + add_some(); +} + +void +Artists::add_some() +{ + auto searchKeywords = splitString(_search->text().toUTF8(), " "); auto clusterIds = _filters->getClusterIds(); @@ -70,7 +84,7 @@ Artists::refresh() auto artists = Artist::getByFilter(DboSession(), clusterIds, searchKeywords, - 0, 40, moreResults); + _artistsContainer->count(), 20, moreResults); for (auto artist : artists) { @@ -86,6 +100,7 @@ Artists::refresh() } } + _showMore->setHidden(!moreResults); } } // namespace UserInterface diff --git a/src/ui/ArtistsView.hpp b/src/ui/ArtistsView.hpp index cbf9c26a..c8b42a39 100644 --- a/src/ui/ArtistsView.hpp +++ b/src/ui/ArtistsView.hpp @@ -37,8 +37,10 @@ class Artists : public Wt::WContainerWidget private: void refresh(); + void add_some(); Filters* _filters; + Wt::WTemplate* _showMore; Wt::WLineEdit* _search; Wt::WContainerWidget* _artistsContainer; }; diff --git a/src/ui/ReleasesView.cpp b/src/ui/ReleasesView.cpp index dce1b8eb..1353a2b8 100644 --- a/src/ui/ReleasesView.cpp +++ b/src/ui/ReleasesView.cpp @@ -40,36 +40,49 @@ Releases::Releases(Filters* filters, Wt::WContainerWidget* parent) : Wt::WContainerWidget(parent), _filters(filters) { - auto releases = new Wt::WTemplate(Wt::WString::tr("template-releases"), this); - releases->addFunction("tr", &Wt::WTemplate::Functions::tr); + auto container = new Wt::WTemplate(Wt::WString::tr("template-releases"), this); + container->addFunction("tr", &Wt::WTemplate::Functions::tr); _search = new Wt::WLineEdit(); - releases->bindWidget("search", _search); + container->bindWidget("search", _search); _search->setPlaceholderText(Wt::WString::tr("msg-search-placeholder")); _search->textInput().connect(this, &Releases::refresh); _releasesContainer = new Wt::WContainerWidget(); - releases->bindWidget("releases", _releasesContainer); + container->bindWidget("releases", _releasesContainer); + + _showMore = new Wt::WTemplate(Wt::WString::tr("template-show-more")); + _showMore->addFunction("tr", &Wt::WTemplate::Functions::tr); + container->bindWidget("show-more", _showMore); + + _showMore->clicked().connect(std::bind([=] + { + add_some(); + })); refresh(); filters->updated().connect(this, &Releases::refresh); } - void Releases::refresh() { - auto searchKeywords = splitString(_search->text().toUTF8(), " "); - _releasesContainer->clear(); + add_some(); +} + +void +Releases::add_some() +{ + auto searchKeywords = splitString(_search->text().toUTF8(), " "); auto clusterIds = _filters->getClusterIds(); Wt::Dbo::Transaction transaction(DboSession()); bool moreResults; - auto releases = Release::getByFilter(DboSession(), clusterIds, searchKeywords, 0, 40, moreResults); + auto releases = Release::getByFilter(DboSession(), clusterIds, searchKeywords, _releasesContainer->count(), 20, moreResults); for (auto release : releases) { @@ -120,6 +133,10 @@ Releases::refresh() releaseAdd.emit(releaseId); })); } + + std::cerr << "if-show-more = " << moreResults << "\n"; + + _showMore->setHidden(!moreResults); } } // namespace UserInterface diff --git a/src/ui/ReleasesView.hpp b/src/ui/ReleasesView.hpp index 9bc9c996..b14fcdf9 100644 --- a/src/ui/ReleasesView.hpp +++ b/src/ui/ReleasesView.hpp @@ -21,6 +21,7 @@ #include #include +#include namespace UserInterface { @@ -36,8 +37,10 @@ class Releases : public Wt::WContainerWidget private: void refresh(); + void add_some(); Filters* _filters; + Wt::WTemplate* _showMore; Wt::WLineEdit* _search; Wt::WContainerWidget* _releasesContainer; }; diff --git a/src/ui/TracksView.cpp b/src/ui/TracksView.cpp index a4414f2f..31ae4233 100644 --- a/src/ui/TracksView.cpp +++ b/src/ui/TracksView.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include "database/Types.hpp" @@ -40,16 +39,25 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent) : Wt::WContainerWidget(parent), _filters(filters) { - auto tracks = new Wt::WTemplate(Wt::WString::tr("template-tracks"), this); - tracks->addFunction("tr", &Wt::WTemplate::Functions::tr); + auto container = new Wt::WTemplate(Wt::WString::tr("template-tracks"), this); + container->addFunction("tr", &Wt::WTemplate::Functions::tr); _search = new Wt::WLineEdit(); - tracks->bindWidget("search", _search); + container->bindWidget("search", _search); _search->setPlaceholderText(Wt::WString::tr("msg-search-placeholder")); _search->textInput().connect(this, &Tracks::refresh); _tracksContainer = new Wt::WContainerWidget(); - tracks->bindWidget("tracks", _tracksContainer); + container->bindWidget("tracks", _tracksContainer); + + _showMore = new Wt::WTemplate(Wt::WString::tr("template-show-more")); + _showMore->addFunction("tr", &Wt::WTemplate::Functions::tr); + container->bindWidget("show-more", _showMore); + + _showMore->clicked().connect(std::bind([=] + { + add_some(); + })); refresh(); @@ -60,16 +68,21 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent) void Tracks::refresh() { - auto searchKeywords = splitString(_search->text().toUTF8(), " "); - _tracksContainer->clear(); + add_some(); +} + +void +Tracks::add_some() +{ + auto searchKeywords = splitString(_search->text().toUTF8(), " "); auto clusterIds = _filters->getClusterIds(); Wt::Dbo::Transaction transaction(DboSession()); bool moreResults; - auto tracks = Track::getByFilter(DboSession(), clusterIds, searchKeywords, 0, 40, moreResults); + auto tracks = Track::getByFilter(DboSession(), clusterIds, searchKeywords, _tracksContainer->count(), 20, moreResults); for (auto track : tracks) { @@ -120,6 +133,7 @@ Tracks::refresh() })); } + _showMore->setHidden(!moreResults); } } // namespace UserInterface diff --git a/src/ui/TracksView.hpp b/src/ui/TracksView.hpp index 4f82cfe9..a6b52b42 100644 --- a/src/ui/TracksView.hpp +++ b/src/ui/TracksView.hpp @@ -21,6 +21,7 @@ #include #include +#include namespace UserInterface { @@ -35,8 +36,10 @@ class Tracks : public Wt::WContainerWidget private: void refresh(); + void add_some(); Wt::WContainerWidget* _tracksContainer; + Wt::WTemplate* _showMore; Wt::WLineEdit* _search; Filters* _filters; };