WIP. Basic Prev/Next support in play queue
This commit is contained in:
@@ -159,6 +159,8 @@ _mediaPlayer(nullptr)
|
||||
playQueue->playTrack().connect(this, &Audio::playTrack);
|
||||
|
||||
_mediaPlayer->playbackEnded().connect(playQueue, &PlayQueue::handlePlaybackComplete);
|
||||
_mediaPlayer->playNext().connect(playQueue, &PlayQueue::playNext);
|
||||
_mediaPlayer->playPrevious().connect(playQueue, &PlayQueue::playPrevious);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -39,10 +39,10 @@ AudioMediaPlayer::AudioMediaPlayer( Wt::WContainerWidget *parent)
|
||||
{
|
||||
Wt::WContainerWidget *container = new Wt::WContainerWidget(this);
|
||||
|
||||
_prevBtn = new Wt::WPushButton("<<", container );
|
||||
Wt::WPushButton *prevBtn = new Wt::WPushButton("<<", container );
|
||||
_playBtn = new Wt::WPushButton("Play", container );
|
||||
_pauseBtn = new Wt::WPushButton("Pause", container );
|
||||
_nextBtn = new Wt::WPushButton(">>", container );
|
||||
Wt::WPushButton *nextBtn = new Wt::WPushButton(">>", container );
|
||||
|
||||
_curTime = new Wt::WText(container);
|
||||
_timeSlider = new Wt::WSlider( container );
|
||||
@@ -60,6 +60,16 @@ AudioMediaPlayer::AudioMediaPlayer( Wt::WContainerWidget *parent)
|
||||
_mediaPlayer->setText( Wt::WMediaPlayer::Duration, _duration);
|
||||
|
||||
_mediaPlayer->timeUpdated().connect(this, &AudioMediaPlayer::handleTimeUpdated);
|
||||
|
||||
nextBtn->clicked().connect(std::bind([=] ()
|
||||
{
|
||||
_playNext.emit();
|
||||
}));
|
||||
|
||||
prevBtn->clicked().connect(std::bind([=] ()
|
||||
{
|
||||
_playPrevious.emit();
|
||||
}));
|
||||
}
|
||||
|
||||
_timeSlider->valueChanged().connect(this, &AudioMediaPlayer::handlePlayOffset);
|
||||
@@ -68,8 +78,6 @@ AudioMediaPlayer::AudioMediaPlayer( Wt::WContainerWidget *parent)
|
||||
|
||||
_volumeSlider->sliderMoved().connect(this, &AudioMediaPlayer::handleVolumeSliderMoved);
|
||||
|
||||
_nextBtn->clicked().connect(this, &AudioMediaPlayer::handlePlayNext);
|
||||
_prevBtn->clicked().connect(this, &AudioMediaPlayer::handlePlayPrev);
|
||||
|
||||
}
|
||||
|
||||
@@ -120,20 +128,6 @@ AudioMediaPlayer::handlePlayOffset(int offsetSecs)
|
||||
_mediaPlayer->play();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
AudioMediaPlayer::handlePlayNext(void)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void
|
||||
AudioMediaPlayer::handlePlayPrev(void)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
AudioMediaPlayer::handleTrackEnded(void)
|
||||
{
|
||||
|
||||
@@ -42,16 +42,16 @@ class AudioMediaPlayer : public Wt::WContainerWidget
|
||||
|
||||
void load(const Transcode::Parameters& parameters);
|
||||
|
||||
// Signal slot Next
|
||||
Wt::Signal<void>& playbackEnded() {return _playbackEnded;}
|
||||
// Signal Slot Previous
|
||||
// Signal slot Ended
|
||||
Wt::Signal<void>& playbackEnded() {return _playbackEnded;}
|
||||
// Signal slot Next
|
||||
Wt::Signal<void>& playNext() {return _playNext;}
|
||||
// Signal Slot Previous
|
||||
Wt::Signal<void>& playPrevious() {return _playPrevious;}
|
||||
|
||||
private:
|
||||
|
||||
void handlePlayOffset(int offsetSecs);
|
||||
void handlePlayNext(void);
|
||||
void handlePlayPrev(void);
|
||||
void handleTrackEnded(void);
|
||||
|
||||
void handleValueChanged(double);
|
||||
@@ -64,6 +64,8 @@ class AudioMediaPlayer : public Wt::WContainerWidget
|
||||
|
||||
// Signals
|
||||
Wt::Signal<void> _playbackEnded;
|
||||
Wt::Signal<void> _playNext;
|
||||
Wt::Signal<void> _playPrevious;
|
||||
|
||||
// Core
|
||||
Wt::WMediaPlayer* _mediaPlayer;
|
||||
@@ -74,8 +76,6 @@ class AudioMediaPlayer : public Wt::WContainerWidget
|
||||
std::shared_ptr<Transcode::Parameters> _currentParameters;
|
||||
Wt::WPushButton* _playBtn;
|
||||
Wt::WPushButton* _pauseBtn;
|
||||
Wt::WPushButton* _nextBtn;
|
||||
Wt::WPushButton* _prevBtn;
|
||||
Wt::WSlider* _timeSlider;
|
||||
Wt::WSlider* _volumeSlider;
|
||||
Wt::WText* _curTime;
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace UserInterface {
|
||||
PlayQueue::PlayQueue(Database::Handler& db, Wt::WContainerWidget* parent)
|
||||
: Wt::WTableView(parent),
|
||||
_db(db),
|
||||
_playingTrackId(0)
|
||||
_playedId(-1)
|
||||
{
|
||||
_model = new Wt::WStandardItemModel(0, 4, this);
|
||||
|
||||
@@ -97,13 +97,31 @@ void
|
||||
PlayQueue::clear(void)
|
||||
{
|
||||
_model->removeRows(0, _model->rowCount());
|
||||
|
||||
// Reset play id
|
||||
_playedId = -1;
|
||||
}
|
||||
|
||||
void
|
||||
PlayQueue::handlePlaybackComplete(void)
|
||||
{
|
||||
// Play the next track
|
||||
readTrack(_playingTrackId + 1);
|
||||
if (_playedId != -1)
|
||||
{
|
||||
readTrack(_playedId + 1);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
PlayQueue::playNext(void)
|
||||
{
|
||||
readTrack( _playedId != -1 ? _playedId + 1 : 0);
|
||||
}
|
||||
|
||||
void
|
||||
PlayQueue::playPrevious(void)
|
||||
{
|
||||
readTrack( _playedId >= 1 ? _playedId - 1 : 0);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -118,7 +136,7 @@ PlayQueue::readTrack(int rowId)
|
||||
Database::Track::pointer track = Database::Track::getById(_db.getSession(), trackId);
|
||||
if (track)
|
||||
{
|
||||
_playingTrackId = rowId;
|
||||
_playedId = rowId;
|
||||
_sigTrackPlay.emit(track->getPath());
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,9 @@ class PlayQueue : public Wt::WTableView
|
||||
|
||||
void clear(void);
|
||||
|
||||
void play(void);
|
||||
void play(void); // Play the queue from the beginning
|
||||
void playNext(void); // Play the next track
|
||||
void playPrevious(void); // Play the previous track
|
||||
|
||||
// Signals
|
||||
Wt::Signal< boost::filesystem::path >& playTrack() { return _sigTrackPlay; }
|
||||
@@ -57,7 +59,7 @@ class PlayQueue : public Wt::WTableView
|
||||
|
||||
Wt::WStandardItemModel* _model;
|
||||
|
||||
int _playingTrackId;
|
||||
int _playedId;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user