From a0c457d7dd9d609bdf8de45d9b5ac6e578ae38b2 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sun, 29 Aug 2010 19:29:03 +0000 Subject: added 'auto stop' option (patch by Avihay Baratz) git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1862 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmpui/mediaplayer.cpp | 62 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 8 deletions(-) (limited to 'src/qmmpui/mediaplayer.cpp') 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(); -- cgit v1.2.3-13-gbd6f