Added show more to playlist
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
${save-btn} ${load-btn} ${clear-btn}
|
||||
</div>
|
||||
${entries}
|
||||
${show-more}
|
||||
</message>
|
||||
|
||||
<message id="btn-playlist-entry-play-btn">
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(), " ");
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class Artists : public Wt::WContainerWidget
|
||||
|
||||
private:
|
||||
void refresh();
|
||||
void add_some();
|
||||
void addSome();
|
||||
|
||||
Filters* _filters;
|
||||
Wt::WTemplate* _showMore;
|
||||
|
||||
+28
-9
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(), " ");
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ class Releases : public Wt::WContainerWidget
|
||||
|
||||
private:
|
||||
void refresh();
|
||||
void add_some();
|
||||
void addSome();
|
||||
|
||||
Filters* _filters;
|
||||
Wt::WTemplate* _showMore;
|
||||
|
||||
@@ -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(), " ");
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class Tracks : public Wt::WContainerWidget
|
||||
|
||||
private:
|
||||
void refresh();
|
||||
void add_some();
|
||||
void addSome();
|
||||
|
||||
Wt::WContainerWidget* _tracksContainer;
|
||||
Wt::WTemplate* _showMore;
|
||||
|
||||
Reference in New Issue
Block a user