WIP. Basic Prev/Next support in play queue

This commit is contained in:
emeric
2014-11-05 12:57:10 +01:00
parent d0e472028d
commit 81d758b420
5 changed files with 46 additions and 30 deletions
+2
View File
@@ -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
+12 -18
View File
@@ -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)
{
+7 -7
View File
@@ -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;
+21 -3
View File
@@ -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;
}
+4 -2
View File
@@ -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;
};