1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-12 00:54:20 +02:00

* Improved AudioEngine's internal phonon-state handling.

This commit is contained in:
Christian Muehlhaeuser
2011-06-05 23:20:09 +02:00
parent 5ec7e3340b
commit 1021e9c1b5
4 changed files with 39 additions and 43 deletions

View File

@@ -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();
}
}
}

View File

@@ -100,6 +100,7 @@ private slots:
void loadPreviousTrack();
void loadNextTrack();
void onAboutToFinish();
void onStateChanged( Phonon::State newState, Phonon::State oldState );
void timerTriggered( qint64 time );

View File

@@ -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();
}
}

View File

@@ -106,8 +106,8 @@ public slots:
void onResolvingFinished();
// resolve if not solved()
void onResolverAdded( );
void onResolverRemoved( );
void onResolverAdded();
void onResolverRemoved();
private slots:
void onResultStatusChanged();