Minor playqueue/playlist modification

This commit is contained in:
emeric
2018-08-01 14:55:31 +02:00
parent 4cadb915ba
commit 1caadcd7c5
2 changed files with 39 additions and 33 deletions
+35 -33
View File
@@ -35,8 +35,6 @@
namespace UserInterface { namespace UserInterface {
static const std::string currentPlayQueueName = "__current__playqueue__";
PlayQueue::PlayQueue() PlayQueue::PlayQueue()
: Wt::WTemplate(Wt::WString::tr("Lms.PlayQueue.template")) : Wt::WTemplate(Wt::WString::tr("Lms.PlayQueue.template"))
{ {
@@ -58,48 +56,57 @@ PlayQueue::PlayQueue()
{ {
Wt::Dbo::Transaction transaction (LmsApp->getDboSession()); Wt::Dbo::Transaction transaction (LmsApp->getDboSession());
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser());
if (!playlist)
playlist = Database::Playlist::create(LmsApp->getDboSession(), currentPlayQueueName, false, LmsApp->getUser());
_trackPos = LmsApp->getUser()->getCurPlayingTrackPos(); _trackPos = LmsApp->getUser()->getCurPlayingTrackPos();
} }
clearBtn->clicked().connect(std::bind([=] clearBtn->clicked().connect([=]
{ {
{ clearTracks();
Wt::Dbo::Transaction transaction(LmsApp->getDboSession()); });
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser());
playlist.modify()->clear();
_showMore->setHidden(true);
}
_entriesContainer->clear();
updateInfo();
}));
shuffleBtn->clicked().connect([=] shuffleBtn->clicked().connect([=]
{ {
{ {
Wt::Dbo::Transaction transaction(LmsApp->getDboSession()); Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser()); getPlaylist().modify()->shuffle();
playlist.modify()->shuffle();
} }
_entriesContainer->clear(); _entriesContainer->clear();
addSome(); addSome();
}); });
_showMore->clicked().connect(std::bind([=] _showMore->clicked().connect([=]
{ {
addSome(); addSome();
})); });
updateInfo(); updateInfo();
addSome(); addSome();
} }
Database::Playlist::pointer
PlayQueue::getPlaylist()
{
static const std::string currentPlayQueueName = "__current__playqueue__";
Database::Playlist::pointer res = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser());
if (!res)
res = Database::Playlist::create(LmsApp->getDboSession(), currentPlayQueueName, false, LmsApp->getUser());
return res;
}
void
PlayQueue::clearTracks()
{
Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
getPlaylist().modify()->clear();
_showMore->setHidden(true);
_entriesContainer->clear();
updateInfo();
}
void void
PlayQueue::stop() PlayQueue::stop()
{ {
@@ -117,7 +124,7 @@ PlayQueue::play(std::size_t pos)
{ {
Wt::Dbo::Transaction transaction(LmsApp->getDboSession()); Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser()); auto playlist = getPlaylist();
// If out of range, stop playing // If out of range, stop playing
if (pos >= playlist->getCount()) if (pos >= playlist->getCount())
@@ -175,8 +182,7 @@ PlayQueue::updateInfo()
{ {
Wt::Dbo::Transaction transaction(LmsApp->getDboSession()); Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser()); _nbTracks->setText(Wt::WString::tr("Lms.PlayQueue.nb-tracks").arg(static_cast<unsigned>(getPlaylist()->getCount())));
_nbTracks->setText(Wt::WString::tr("Lms.PlayQueue.nb-tracks").arg(static_cast<unsigned>(playlist->getCount())));
} }
void void
@@ -201,7 +207,7 @@ PlayQueue::enqueueTracks(const std::vector<Database::Track::pointer>& tracks)
// Use a "session" playqueue in order to store the current playqueue // Use a "session" playqueue in order to store the current playqueue
// so that the user can disconnect and get its playqueue back // so that the user can disconnect and get its playqueue back
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser()); auto playlist = getPlaylist();
for (auto track : tracks) for (auto track : tracks)
Database::PlaylistEntry::create(LmsApp->getDboSession(), track, playlist); Database::PlaylistEntry::create(LmsApp->getDboSession(), track, playlist);
@@ -228,11 +234,7 @@ PlayQueue::playTracks(const std::vector<Database::Track::pointer>& tracks)
{ {
Wt::Dbo::Transaction transaction(LmsApp->getDboSession()); Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
auto playqueue = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser()); clearTracks();
playqueue.modify()->clear();
_entriesContainer->clear();
enqueueTracks(tracks); enqueueTracks(tracks);
play(0); play(0);
@@ -245,7 +247,7 @@ PlayQueue::addSome()
{ {
Wt::Dbo::Transaction transaction (LmsApp->getDboSession()); Wt::Dbo::Transaction transaction (LmsApp->getDboSession());
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser()); auto playlist = getPlaylist();
bool moreResults; bool moreResults;
auto playlistEntries = playlist->getEntries(_entriesContainer->count(), 50, moreResults); auto playlistEntries = playlist->getEntries(_entriesContainer->count(), 50, moreResults);
@@ -313,7 +315,7 @@ PlayQueue::addRadioTrack()
auto now = std::chrono::system_clock::now(); auto now = std::chrono::system_clock::now();
std::mt19937 randGenerator(std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count()); std::mt19937 randGenerator(std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count());
auto playlist = Database::Playlist::get(LmsApp->getDboSession(), currentPlayQueueName, LmsApp->getUser()); auto playlist = getPlaylist();
std::set<Database::IdType> playlistTrackIds; std::set<Database::IdType> playlistTrackIds;
{ {
+4
View File
@@ -27,6 +27,7 @@
#include <boost/optional.hpp> #include <boost/optional.hpp>
#include "database/Playlist.hpp"
#include "database/Track.hpp" #include "database/Track.hpp"
namespace UserInterface { namespace UserInterface {
@@ -52,6 +53,9 @@ class PlayQueue : public Wt::WTemplate
Wt::Signal<> playbackStop; Wt::Signal<> playbackStop;
private: private:
Database::Playlist::pointer getPlaylist();
void clearTracks();
void enqueueTracks(const std::vector<Database::Track::pointer>& tracks); void enqueueTracks(const std::vector<Database::Track::pointer>& tracks);
void enqueueTrack(Database::Track::pointer track); void enqueueTrack(Database::Track::pointer track);
void addSome(); void addSome();