Added show more to playlist

This commit is contained in:
emeric
2018-02-22 13:54:32 +01:00
parent 5b4fe044de
commit 86077c1e44
11 changed files with 55 additions and 24 deletions
+1
View File
@@ -20,6 +20,7 @@
${save-btn} ${load-btn} ${clear-btn} ${save-btn} ${load-btn} ${clear-btn}
</div> </div>
${entries} ${entries}
${show-more}
</message> </message>
<message id="btn-playlist-entry-play-btn"> <message id="btn-playlist-entry-play-btn">
+10 -2
View File
@@ -83,16 +83,24 @@ PlaylistEntry::create(Wt::Dbo::Session& session, Wt::Dbo::ptr<Track> track, Wt::
std::vector<Wt::Dbo::ptr<Track>> std::vector<Wt::Dbo::ptr<Track>>
Playlist::getTracks(int offset, int size) const Playlist::getTracks(int offset, int size, bool& moreResults) const
{ {
assert(session()); assert(session());
Wt::Dbo::collection<Wt::Dbo::ptr<PlaylistEntry>> entries = session()->find<PlaylistEntry>().where("playlist_id = ?").bind(self().id()).orderBy("pos").offset(offset).limit(size); moreResults = false;
Wt::Dbo::collection<Wt::Dbo::ptr<PlaylistEntry>> entries = session()->find<PlaylistEntry>().where("playlist_id = ?").bind(self().id()).orderBy("pos").offset(offset).limit(size + 1);
std::vector<Wt::Dbo::ptr<Track>> res; std::vector<Wt::Dbo::ptr<Track>> res;
for (auto entry : entries) for (auto entry : entries)
{ {
if (size != -1 && res.size() == static_cast<std::size_t>(size))
{
moreResults = true;
break;
}
res.push_back(entry->getTrack()); res.push_back(entry->getTrack());
} }
+1 -1
View File
@@ -54,7 +54,7 @@ class Playlist : public Wt::Dbo::Dbo<Playlist>
void clear() { _entries.clear(); } void clear() { _entries.clear(); }
// Get tracks, ordered by position // Get tracks, ordered by position
std::vector<Wt::Dbo::ptr<Track>> getTracks(int offset = -1, int size = -1) const; std::vector<Wt::Dbo::ptr<Track>> getTracks(int offset, int size, bool& moreResults) const;
template<class Action> template<class Action>
void persist(Action& a) void persist(Action& a)
+3 -3
View File
@@ -56,7 +56,7 @@ Artists::Artists(Filters* filters, Wt::WContainerWidget* parent)
_showMore->clicked().connect(std::bind([=] _showMore->clicked().connect(std::bind([=]
{ {
add_some(); addSome();
})); }));
refresh(); refresh();
@@ -68,11 +68,11 @@ void
Artists::refresh() Artists::refresh()
{ {
_artistsContainer->clear(); _artistsContainer->clear();
add_some(); addSome();
} }
void void
Artists::add_some() Artists::addSome()
{ {
auto searchKeywords = splitString(_search->text().toUTF8(), " "); auto searchKeywords = splitString(_search->text().toUTF8(), " ");
+1 -1
View File
@@ -37,7 +37,7 @@ class Artists : public Wt::WContainerWidget
private: private:
void refresh(); void refresh();
void add_some(); void addSome();
Filters* _filters; Filters* _filters;
Wt::WTemplate* _showMore; Wt::WTemplate* _showMore;
+28 -9
View File
@@ -19,7 +19,6 @@
#include <Wt/WAnchor> #include <Wt/WAnchor>
#include <Wt/WImage> #include <Wt/WImage>
#include <Wt/WTemplate>
#include <Wt/WText> #include <Wt/WText>
#include "LmsApplication.hpp" #include "LmsApplication.hpp"
@@ -32,20 +31,29 @@ static const std::string currentPlaylistName = "__current__playlist__";
Playlist::Playlist(Wt::WContainerWidget* parent) Playlist::Playlist(Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent) : Wt::WContainerWidget(parent)
{ {
auto t = new Wt::WTemplate(Wt::WString::tr("template-playlist"), this); auto container = new Wt::WTemplate(Wt::WString::tr("template-playlist"), this);
t->addFunction("tr", &Wt::WTemplate::Functions::tr); container->addFunction("tr", &Wt::WTemplate::Functions::tr);
auto saveBtn = new Wt::WText(Wt::WString::tr("btn-playlist-save-btn"), Wt::XHTMLText); auto saveBtn = new Wt::WText(Wt::WString::tr("btn-playlist-save-btn"), Wt::XHTMLText);
t->bindWidget("save-btn", saveBtn); container->bindWidget("save-btn", saveBtn);
auto loadBtn = new Wt::WText(Wt::WString::tr("btn-playlist-load-btn"), Wt::XHTMLText); auto loadBtn = new Wt::WText(Wt::WString::tr("btn-playlist-load-btn"), Wt::XHTMLText);
t->bindWidget("load-btn", loadBtn); container->bindWidget("load-btn", loadBtn);
auto clearBtn = new Wt::WText(Wt::WString::tr("btn-playlist-clear-btn"), Wt::XHTMLText); auto clearBtn = new Wt::WText(Wt::WString::tr("btn-playlist-clear-btn"), Wt::XHTMLText);
t->bindWidget("clear-btn", clearBtn); container->bindWidget("clear-btn", clearBtn);
_entriesContainer = new Wt::WContainerWidget(); _entriesContainer = new Wt::WContainerWidget();
t->bindWidget("entries", _entriesContainer); container->bindWidget("entries", _entriesContainer);
_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([=]
{
addSome();
}));
refresh(); refresh();
} }
@@ -67,7 +75,7 @@ Playlist::addTracks(const std::vector<Database::Track::pointer>& tracks)
playlist.modify()->addTrack(track); playlist.modify()->addTrack(track);
} }
refresh(); addSome();
} }
void void
@@ -86,8 +94,16 @@ Playlist::playTracks(const std::vector<Database::Track::pointer>& tracks)
// TODO Immediate play // TODO Immediate play
} }
void void
Playlist::refresh() Playlist::refresh()
{
_entriesContainer->clear();
addSome();
}
void
Playlist::addSome()
{ {
Wt::Dbo::Transaction transaction (DboSession()); Wt::Dbo::Transaction transaction (DboSession());
@@ -95,7 +111,8 @@ Playlist::refresh()
if (!playlist) if (!playlist)
return; return;
auto tracks = playlist->getTracks(_entriesContainer->count(), 20); // TODO bool moreResults;
auto tracks = playlist->getTracks(_entriesContainer->count(), 20, moreResults);
for (auto track : tracks) for (auto track : tracks)
{ {
Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-playlist-entry"), _entriesContainer); Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-playlist-entry"), _entriesContainer);
@@ -136,6 +153,8 @@ Playlist::refresh()
entry->bindWidget("del-btn", addBtn); entry->bindWidget("del-btn", addBtn);
// TODO // TODO
} }
_showMore->setHidden(!moreResults);
} }
} // namespace UserInterface } // namespace UserInterface
+3
View File
@@ -20,6 +20,7 @@
#pragma once #pragma once
#include <Wt/WContainerWidget> #include <Wt/WContainerWidget>
#include <Wt/WTemplate>
#include "database/Types.hpp" #include "database/Types.hpp"
@@ -35,8 +36,10 @@ class Playlist : public Wt::WContainerWidget
private: private:
void refresh(); void refresh();
void addSome();
Wt::WContainerWidget* _entriesContainer; Wt::WContainerWidget* _entriesContainer;
Wt::WTemplate* _showMore;
}; };
} // namespace UserInterface } // namespace UserInterface
+3 -3
View File
@@ -57,7 +57,7 @@ Releases::Releases(Filters* filters, Wt::WContainerWidget* parent)
_showMore->clicked().connect(std::bind([=] _showMore->clicked().connect(std::bind([=]
{ {
add_some(); addSome();
})); }));
refresh(); refresh();
@@ -69,11 +69,11 @@ void
Releases::refresh() Releases::refresh()
{ {
_releasesContainer->clear(); _releasesContainer->clear();
add_some(); addSome();
} }
void void
Releases::add_some() Releases::addSome()
{ {
auto searchKeywords = splitString(_search->text().toUTF8(), " "); auto searchKeywords = splitString(_search->text().toUTF8(), " ");
+1 -1
View File
@@ -37,7 +37,7 @@ class Releases : public Wt::WContainerWidget
private: private:
void refresh(); void refresh();
void add_some(); void addSome();
Filters* _filters; Filters* _filters;
Wt::WTemplate* _showMore; Wt::WTemplate* _showMore;
+3 -3
View File
@@ -56,7 +56,7 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
_showMore->clicked().connect(std::bind([=] _showMore->clicked().connect(std::bind([=]
{ {
add_some(); addSome();
})); }));
refresh(); refresh();
@@ -69,11 +69,11 @@ void
Tracks::refresh() Tracks::refresh()
{ {
_tracksContainer->clear(); _tracksContainer->clear();
add_some(); addSome();
} }
void void
Tracks::add_some() Tracks::addSome()
{ {
auto searchKeywords = splitString(_search->text().toUTF8(), " "); auto searchKeywords = splitString(_search->text().toUTF8(), " ");
+1 -1
View File
@@ -36,7 +36,7 @@ class Tracks : public Wt::WContainerWidget
private: private:
void refresh(); void refresh();
void add_some(); void addSome();
Wt::WContainerWidget* _tracksContainer; Wt::WContainerWidget* _tracksContainer;
Wt::WTemplate* _showMore; Wt::WTemplate* _showMore;