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