diff options
Diffstat (limited to 'src/qmmpui')
| -rw-r--r-- | src/qmmpui/mediaplayer.cpp | 31 | ||||
| -rw-r--r-- | src/qmmpui/mediaplayer.h | 1 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/qmmpui/mediaplayer.cpp b/src/qmmpui/mediaplayer.cpp index 721a71ae8..ea45c2b78 100644 --- a/src/qmmpui/mediaplayer.cpp +++ b/src/qmmpui/mediaplayer.cpp @@ -62,6 +62,7 @@ void MediaPlayer::initialize(SoundCore *core, PlayListManager *pl_manager) m_noPlaylistAdvance = false; connect(m_core, SIGNAL(nextTrackRequest()), SLOT(updateNextUrl())); connect(m_core, SIGNAL(finished()), SLOT(playNext())); + connect(m_core, SIGNAL(stateChanged(Qmmp::State)), SLOT(processState(Qmmp::State))); } PlayListManager *MediaPlayer::playListManager() @@ -103,7 +104,7 @@ void MediaPlayer::play(qint64 offset) return; } - if (!m_core->play(s, false, offset)) + /*if (!m_core->play(s, false, offset)) { //find out the reason why playback failed switch ((int) m_core->state()) @@ -139,7 +140,10 @@ void MediaPlayer::play(qint64 offset) } } else - m_skips = 0; + m_skips = 0;*/ + + m_core->play(s, false, offset); + m_skips = 0; } void MediaPlayer::stop() @@ -245,3 +249,26 @@ void MediaPlayer::updateNextUrl() qDebug("MediaPlayer: next track state: unknown"); } + +void MediaPlayer::processState(Qmmp::State state) +{ + switch ((int) state) + { + case Qmmp::NormalError: + stop(); + //playNext(); + if (m_skips < MAX_SKIPS) + { + //stop(); + //qWarning("MediaPlayer: skip limit exceeded"); + playNext(); + m_skips++; + } + break; + case Qmmp::FatalError: + stop(); + break; + default: + m_skips = 0; + } +} diff --git a/src/qmmpui/mediaplayer.h b/src/qmmpui/mediaplayer.h index 06c80ec30..446eb627b 100644 --- a/src/qmmpui/mediaplayer.h +++ b/src/qmmpui/mediaplayer.h @@ -109,6 +109,7 @@ signals: private slots: void playNext(); void updateNextUrl(); + void processState(Qmmp::State state); private: PlayListManager *m_pl_manager; |
