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
+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>>
Playlist::getTracks(int offset, int size) const
Playlist::getTracks(int offset, int size, bool& moreResults) const
{
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;
for (auto entry : entries)
{
if (size != -1 && res.size() == static_cast<std::size_t>(size))
{
moreResults = true;
break;
}
res.push_back(entry->getTrack());
}
+1 -1
View File
@@ -54,7 +54,7 @@ class Playlist : public Wt::Dbo::Dbo<Playlist>
void clear() { _entries.clear(); }
// 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>
void persist(Action& a)
+3 -3
View File
@@ -56,7 +56,7 @@ Artists::Artists(Filters* filters, Wt::WContainerWidget* parent)
_showMore->clicked().connect(std::bind([=]
{
add_some();
addSome();
}));
refresh();
@@ -68,11 +68,11 @@ void
Artists::refresh()
{
_artistsContainer->clear();
add_some();
addSome();
}
void
Artists::add_some()
Artists::addSome()
{
auto searchKeywords = splitString(_search->text().toUTF8(), " ");
+1 -1
View File
@@ -37,7 +37,7 @@ class Artists : public Wt::WContainerWidget
private:
void refresh();
void add_some();
void addSome();
Filters* _filters;
Wt::WTemplate* _showMore;
+28 -9
View File
@@ -19,7 +19,6 @@
#include <Wt/WAnchor>
#include <Wt/WImage>
#include <Wt/WTemplate>
#include <Wt/WText>
#include "LmsApplication.hpp"
@@ -32,20 +31,29 @@ static const std::string currentPlaylistName = "__current__playlist__";
Playlist::Playlist(Wt::WContainerWidget* parent)
: Wt::WContainerWidget(parent)
{
auto t = new Wt::WTemplate(Wt::WString::tr("template-playlist"), this);
t->addFunction("tr", &Wt::WTemplate::Functions::tr);
auto container = new Wt::WTemplate(Wt::WString::tr("template-playlist"), this);
container->addFunction("tr", &Wt::WTemplate::Functions::tr);
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);
t->bindWidget("load-btn", loadBtn);
container->bindWidget("load-btn", loadBtn);
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();
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();
}
@@ -67,7 +75,7 @@ Playlist::addTracks(const std::vector<Database::Track::pointer>& tracks)
playlist.modify()->addTrack(track);
}
refresh();
addSome();
}
void
@@ -86,8 +94,16 @@ Playlist::playTracks(const std::vector<Database::Track::pointer>& tracks)
// TODO Immediate play
}
void
Playlist::refresh()
{
_entriesContainer->clear();
addSome();
}
void
Playlist::addSome()
{
Wt::Dbo::Transaction transaction (DboSession());
@@ -95,7 +111,8 @@ Playlist::refresh()
if (!playlist)
return;
auto tracks = playlist->getTracks(_entriesContainer->count(), 20); // TODO
bool moreResults;
auto tracks = playlist->getTracks(_entriesContainer->count(), 20, moreResults);
for (auto track : tracks)
{
Wt::WTemplate* entry = new Wt::WTemplate(Wt::WString::tr("template-playlist-entry"), _entriesContainer);
@@ -136,6 +153,8 @@ Playlist::refresh()
entry->bindWidget("del-btn", addBtn);
// TODO
}
_showMore->setHidden(!moreResults);
}
} // namespace UserInterface
+3
View File
@@ -20,6 +20,7 @@
#pragma once
#include <Wt/WContainerWidget>
#include <Wt/WTemplate>
#include "database/Types.hpp"
@@ -35,8 +36,10 @@ class Playlist : public Wt::WContainerWidget
private:
void refresh();
void addSome();
Wt::WContainerWidget* _entriesContainer;
Wt::WTemplate* _showMore;
};
} // namespace UserInterface
+3 -3
View File
@@ -57,7 +57,7 @@ Releases::Releases(Filters* filters, Wt::WContainerWidget* parent)
_showMore->clicked().connect(std::bind([=]
{
add_some();
addSome();
}));
refresh();
@@ -69,11 +69,11 @@ void
Releases::refresh()
{
_releasesContainer->clear();
add_some();
addSome();
}
void
Releases::add_some()
Releases::addSome()
{
auto searchKeywords = splitString(_search->text().toUTF8(), " ");
+1 -1
View File
@@ -37,7 +37,7 @@ class Releases : public Wt::WContainerWidget
private:
void refresh();
void add_some();
void addSome();
Filters* _filters;
Wt::WTemplate* _showMore;
+3 -3
View File
@@ -56,7 +56,7 @@ Tracks::Tracks(Filters* filters, Wt::WContainerWidget* parent)
_showMore->clicked().connect(std::bind([=]
{
add_some();
addSome();
}));
refresh();
@@ -69,11 +69,11 @@ void
Tracks::refresh()
{
_tracksContainer->clear();
add_some();
addSome();
}
void
Tracks::add_some()
Tracks::addSome()
{
auto searchKeywords = splitString(_search->text().toUTF8(), " ");
+1 -1
View File
@@ -36,7 +36,7 @@ class Tracks : public Wt::WContainerWidget
private:
void refresh();
void add_some();
void addSome();
Wt::WContainerWidget* _tracksContainer;
Wt::WTemplate* _showMore;