From 1021e9c1b517f6d0dbb7d9b703517cf895599d39 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sun, 5 Jun 2011 23:20:09 +0200 Subject: [PATCH] * Improved AudioEngine's internal phonon-state handling. --- src/libtomahawk/audio/audioengine.cpp | 49 ++++++++++++--------------- src/libtomahawk/audio/audioengine.h | 1 + src/libtomahawk/query.cpp | 28 +++++++-------- src/libtomahawk/query.h | 4 +-- 4 files changed, 39 insertions(+), 43 deletions(-) diff --git a/src/libtomahawk/audio/audioengine.cpp b/src/libtomahawk/audio/audioengine.cpp index e3cf26096..d8b28857c 100644 --- a/src/libtomahawk/audio/audioengine.cpp +++ b/src/libtomahawk/audio/audioengine.cpp @@ -59,6 +59,7 @@ AudioEngine::AudioEngine() m_mediaObject->setTickInterval( 150 ); connect( m_mediaObject, SIGNAL( stateChanged( Phonon::State, Phonon::State ) ), SLOT( onStateChanged( Phonon::State, Phonon::State ) ) ); connect( m_mediaObject, SIGNAL( tick( qint64 ) ), SLOT( timerTriggered( qint64 ) ) ); + connect( m_mediaObject, SIGNAL( aboutToFinish() ), SLOT( onAboutToFinish() ) ); } @@ -123,7 +124,6 @@ AudioEngine::stop() { qDebug() << Q_FUNC_INFO; - m_expectStop = true; m_mediaObject->stop(); setCurrentTrack( Tomahawk::result_ptr() ); @@ -217,11 +217,6 @@ AudioEngine::loadTrack( const Tomahawk::result_ptr& result ) qDebug() << "Starting new song from url:" << m_currentTrack->url(); emit loading( m_currentTrack ); - if ( !m_input.isNull() || m_isPlayingHttp ) - { - m_expectStop = true; - } - if ( !isHttpResult( m_currentTrack->url() ) && !isLocalResult( m_currentTrack->url() ) ) { m_mediaObject->setCurrentSource( io.data() ); @@ -328,37 +323,37 @@ AudioEngine::playItem( PlaylistInterface* playlist, const Tomahawk::result_ptr& } +void +AudioEngine::onAboutToFinish() +{ + qDebug() << Q_FUNC_INFO; + m_expectStop = true; +} + + void AudioEngine::onStateChanged( Phonon::State newState, Phonon::State oldState ) { - qDebug() << Q_FUNC_INFO << oldState << newState; + qDebug() << Q_FUNC_INFO << oldState << newState << m_expectStop; if ( newState == Phonon::ErrorState ) { qDebug() << "Phonon Error:" << m_mediaObject->errorString() << m_mediaObject->errorType(); - } - if ( oldState == Phonon::PlayingState && newState == Phonon::StoppedState ) - { - qDebug() << "Expecting stop?" << m_expectStop; - if ( !m_expectStop ) - { - qDebug() << "Loading next track."; - m_expectStop = false; - loadNextTrack(); - } - } - else if ( oldState == Phonon::PlayingState && newState == Phonon::PausedState ) - { - qDebug() << m_mediaObject->currentTime() << m_mediaObject->totalTime(); - if ( m_mediaObject->currentTime() == m_mediaObject->totalTime() ) - { - qDebug() << "Loading next track."; - m_expectStop = false; - loadNextTrack(); - } + return; } + if ( !m_expectStop ) + return; m_expectStop = false; + + if ( oldState == Phonon::PlayingState ) + { + if ( newState == Phonon::PausedState || newState == Phonon::StoppedState ) + { + qDebug() << "Loading next track."; + loadNextTrack(); + } + } } diff --git a/src/libtomahawk/audio/audioengine.h b/src/libtomahawk/audio/audioengine.h index d7fc8c954..05b3b1bd5 100644 --- a/src/libtomahawk/audio/audioengine.h +++ b/src/libtomahawk/audio/audioengine.h @@ -100,6 +100,7 @@ private slots: void loadPreviousTrack(); void loadNextTrack(); + void onAboutToFinish(); void onStateChanged( Phonon::State newState, Phonon::State oldState ); void timerTriggered( qint64 time ); diff --git a/src/libtomahawk/query.cpp b/src/libtomahawk/query.cpp index 471ac6fa9..406a22a3f 100644 --- a/src/libtomahawk/query.cpp +++ b/src/libtomahawk/query.cpp @@ -67,11 +67,11 @@ Query::Query( const QString& artist, const QString& track, const QString& album, { connect( Database::instance(), SIGNAL( indexReady() ), SLOT( refreshResults() ), Qt::QueuedConnection ); } - - connect( Pipeline::instance(), SIGNAL( resolverAdded( Resolver* ) ), - SLOT( onResolverAdded() ), Qt::QueuedConnection ); + + connect( Pipeline::instance(), SIGNAL( resolverAdded( Resolver* ) ), + SLOT( onResolverAdded() ), Qt::QueuedConnection ); connect( Pipeline::instance(), SIGNAL( resolverRemoved( Resolver* ) ), - SLOT( onResolverRemoved() ), Qt::QueuedConnection ); + SLOT( onResolverRemoved() ), Qt::QueuedConnection ); } @@ -154,22 +154,22 @@ Query::onResolvingFinished() void -Query::onResolverAdded( ) -{ - if ( !solved() ) - { - refreshResults(); - } -} - -void -Query::onResolverRemoved( ) +Query::onResolverAdded() { if ( !solved() ) { refreshResults(); } +} + +void +Query::onResolverRemoved() +{ + if ( !solved() ) + { + refreshResults(); + } } diff --git a/src/libtomahawk/query.h b/src/libtomahawk/query.h index 288c4ea52..900860367 100644 --- a/src/libtomahawk/query.h +++ b/src/libtomahawk/query.h @@ -106,8 +106,8 @@ public slots: void onResolvingFinished(); // resolve if not solved() - void onResolverAdded( ); - void onResolverRemoved( ); + void onResolverAdded(); + void onResolverRemoved(); private slots: void onResultStatusChanged();