diff --git a/src/libtomahawk/audio/AudioEngine.cpp b/src/libtomahawk/audio/AudioEngine.cpp index 8029c4c5a..ac33ea6ec 100644 --- a/src/libtomahawk/audio/AudioEngine.cpp +++ b/src/libtomahawk/audio/AudioEngine.cpp @@ -158,14 +158,18 @@ AudioEngine::pause() void -AudioEngine::stop() +AudioEngine::stop(AudioErrorCode errorCode) { tDebug( LOGEXTRA ) << Q_FUNC_INFO; if ( isStopped() ) return; - setState( Stopped ); + if(errorCode == NoError) + setState( Stopped ); + else + setState( Error ); + m_mediaObject->stop(); emit stopped(); @@ -467,6 +471,7 @@ AudioEngine::loadTrack( const Tomahawk::result_ptr& result ) } m_input = io; m_mediaObject->play(); + emit started( m_currentTrack ); if ( TomahawkSettings::instance()->privateListeningMode() != TomahawkSettings::FullyPrivate ) @@ -661,14 +666,19 @@ AudioEngine::onStateChanged( Phonon::State newState, Phonon::State oldState ) if ( newState == Phonon::ErrorState ) { - stop(); + stop( UnknownError ); tLog() << "Phonon Error:" << m_mediaObject->errorString() << m_mediaObject->errorType(); + emit error( UnknownError ); + setState(Error); + return; } if ( newState == Phonon::PlayingState ) + { setState( Playing ); + } if ( oldState == Phonon::PlayingState ) { @@ -782,10 +792,13 @@ AudioEngine::setCurrentTrack( const Tomahawk::result_ptr& result ) Tomahawk::result_ptr lastTrack = m_currentTrack; if ( !lastTrack.isNull() ) { - if ( TomahawkSettings::instance()->privateListeningMode() == TomahawkSettings::PublicListening ) - { - DatabaseCommand_LogPlayback* cmd = new DatabaseCommand_LogPlayback( lastTrack, DatabaseCommand_LogPlayback::Finished, m_timeElapsed ); - Database::instance()->enqueue( QSharedPointer(cmd) ); + if(m_state != Error) + { + if ( TomahawkSettings::instance()->privateListeningMode() == TomahawkSettings::PublicListening ) + { + DatabaseCommand_LogPlayback* cmd = new DatabaseCommand_LogPlayback( lastTrack, DatabaseCommand_LogPlayback::Finished, m_timeElapsed ); + Database::instance()->enqueue( QSharedPointer(cmd) ); + } } emit finished( lastTrack ); diff --git a/src/libtomahawk/audio/AudioEngine.h b/src/libtomahawk/audio/AudioEngine.h index e991e7728..2347a5623 100644 --- a/src/libtomahawk/audio/AudioEngine.h +++ b/src/libtomahawk/audio/AudioEngine.h @@ -43,8 +43,8 @@ class DLLEXPORT AudioEngine : public QObject Q_OBJECT public: - enum AudioErrorCode { StreamReadError, AudioDeviceError, DecodeError, UnknownError }; - enum AudioState { Stopped, Playing, Paused }; + enum AudioErrorCode { StreamReadError, AudioDeviceError, DecodeError, UnknownError, NoError }; + enum AudioState { Stopped, Playing, Paused, Error }; static AudioEngine* instance(); @@ -76,7 +76,7 @@ public slots: void playPause(); void play(); void pause(); - void stop(); + void stop(AudioErrorCode errorCode = NoError); void previous(); void next();