Minor playqueue/playlist modification
This commit is contained in:
+35
-33
@@ -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;
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user