diff options
Diffstat (limited to 'src/qmmpui/mediaplayer.cpp')
| -rw-r--r-- | src/qmmpui/mediaplayer.cpp | 62 |
1 files changed, 54 insertions, 8 deletions
diff --git a/src/qmmpui/mediaplayer.cpp b/src/qmmpui/mediaplayer.cpp index 594ecdd34..3fc6cd4a0 100644 --- a/src/qmmpui/mediaplayer.cpp +++ b/src/qmmpui/mediaplayer.cpp @@ -37,6 +37,7 @@ MediaPlayer::MediaPlayer(QObject *parent) m_core = 0; m_skips = 0; m_repeat = false; + m_autoStop = false; QTranslator *translator = new QTranslator(parent); QString locale = Qmmp::systemLanguageID(); translator->load(QString(":/libqmmpui_") + locale); @@ -58,6 +59,7 @@ void MediaPlayer::initialize(SoundCore *core, PlayListManager *pl_manager) m_core = core; m_pl_manager = pl_manager; m_repeat = false; + m_autoStop = false; connect(m_core, SIGNAL(aboutToFinish()), SLOT(updateNextUrl())); connect(m_core, SIGNAL(finished()), SLOT(playNext())); } @@ -72,6 +74,11 @@ bool MediaPlayer::isRepeatable() const return m_repeat; } +bool MediaPlayer::isAutoStopping() const +{ + return m_autoStop; +} + void MediaPlayer::play(qint64 offset) { m_pl_manager->currentPlayList()->doCurrentVisibleRequest(); @@ -174,15 +181,18 @@ void MediaPlayer::previous() void MediaPlayer::setRepeatable(bool r) { - if (r != m_repeat && !r) + if (!isAutoStopping()) { - disconnect(m_core, SIGNAL(finished()), this, SLOT(play())); - connect(m_core, SIGNAL(finished()), SLOT(playNext())); - } - else if (r != m_repeat && r) - { - disconnect(m_core, SIGNAL(finished()), this, SLOT(playNext())); - connect(m_core, SIGNAL(finished()), SLOT(play())); + if (r != m_repeat && !r) + { + disconnect(m_core, SIGNAL(finished()), this, SLOT(play())); + connect(m_core, SIGNAL(finished()), SLOT(playNext())); + } + else if (r != m_repeat && r) + { + disconnect(m_core, SIGNAL(finished()), this, SLOT(playNext())); + connect(m_core, SIGNAL(finished()), SLOT(play())); + } } m_repeat = r; emit repeatableChanged(r); @@ -198,6 +208,42 @@ void MediaPlayer::playNext() play(); } +void MediaPlayer::setAutoStop(bool enable) +{ + if (enable != m_autoStop) + { + if(enable) + { + if (m_repeat) + disconnect(m_core, SIGNAL(finished()), this, SLOT(play())); + else + disconnect(m_core, SIGNAL(finished()), this, SLOT(playNext())); + connect(m_core, SIGNAL(finished()), SLOT(autoStop())); + } + else + { + disconnect(m_core, SIGNAL(finished()), this, SLOT(autoStop())); + if (m_repeat) + connect(m_core, SIGNAL(finished()), SLOT(play())); + else + connect(m_core, SIGNAL(finished()), SLOT(playNext())); + } + m_autoStop = enable; + emit autoStopChanged(enable); + } +} + +void MediaPlayer::autoStop() +{ + if (!m_repeat && !m_pl_manager->currentPlayList()->isEmptyQueue()) + { + playNext(); + return; + } + setAutoStop(false); + stop(); +} + void MediaPlayer::updateNextUrl() { m_nextUrl.clear(); |
