diff --git a/src/libtomahawk/pipeline.cpp b/src/libtomahawk/pipeline.cpp index e6b0ba34e..ae33b9c80 100644 --- a/src/libtomahawk/pipeline.cpp +++ b/src/libtomahawk/pipeline.cpp @@ -169,7 +169,7 @@ Pipeline::reportResults( QID qid, const QList< result_ptr >& results ) if ( !m_qids.contains( qid ) ) { - qDebug() << "Result arrived too late for:" << qid; + tDebug() << "Result arrived too late for:" << qid; return; } @@ -182,15 +182,9 @@ Pipeline::reportResults( QID qid, const QList< result_ptr >& results ) m_rids.insert( r->id(), r ); } - if ( q->solved() && !q->isFullTextQuery() ) + if ( q->playable() && !q->isFullTextQuery() ) { - q->onResolvingFinished(); - setQIDState( q, 0 ); - if ( m_qidsTimeout.contains( q->id() ) ) - m_qidsTimeout.remove( q->id() ); - - shuntNext(); return; } } @@ -231,7 +225,6 @@ Pipeline::shuntNext() } setQIDState( q, rc ); - new FuncTimeout( 0, boost::bind( &Pipeline::shunt, this, q ), this ); } @@ -274,9 +267,9 @@ Pipeline::shunt( const query_ptr& q ) } else { + // we get here if we disable a resolver while a query is resolving setQIDState( q, 0 ); - if ( !q->solved() || q->isFullTextQuery() ) - q->onResolvingFinished(); + return; } shuntNext(); @@ -312,14 +305,24 @@ Pipeline::setQIDState( const Tomahawk::query_ptr& query, int state ) { QMutexLocker lock( &m_mut ); + if ( m_qidsTimeout.contains( query->id() ) ) + m_qidsTimeout.remove( query->id() ); + if ( state > 0 ) { m_qidsState.insert( query->id(), state ); + + new FuncTimeout( 0, boost::bind( &Pipeline::shunt, this, query ), this ); } else { m_qidsState.remove( query->id() ); -// qDebug() << "Queries running:" << m_qidsState.count(); + query->onResolvingFinished(); + + if ( !m_queries_temporary.contains( query ) ) + m_qids.remove( query->id() ); + + new FuncTimeout( 0, boost::bind( &Pipeline::shuntNext, this ), this ); } } @@ -343,41 +346,17 @@ Pipeline::incQIDState( const Tomahawk::query_ptr& query ) int Pipeline::decQIDState( const Tomahawk::query_ptr& query ) { - QMutexLocker lock( &m_mut ); - - if ( !m_qidsState.contains( query->id() ) ) - return 0; - - int state = m_qidsState.value( query->id() ) - 1; - if ( state ) + int state = 0; { - m_qidsState.insert( query->id(), state ); - } - else - { - m_qidsState.remove( query->id() ); -// qDebug() << "Queries running:" << m_qidsState.count(); - } - - if ( state == 0 ) - { - if ( !query->solved() || query->isFullTextQuery() ) - query->onResolvingFinished(); - - if ( !m_queries_temporary.contains( query ) ) - m_qids.remove( query->id() ); - if ( m_qidsTimeout.contains( query->id() ) ) - m_qidsTimeout.remove( query->id() ); - - new FuncTimeout( 0, boost::bind( &Pipeline::shuntNext, this ), this ); - } - else - { - if ( m_qidsTimeout.contains( query->id() ) ) - m_qidsTimeout.remove( query->id() ); - new FuncTimeout( 0, boost::bind( &Pipeline::shunt, this, query ), this ); + QMutexLocker lock( &m_mut ); + + if ( !m_qidsState.contains( query->id() ) ) + return 0; + + state = m_qidsState.value( query->id() ) - 1; } + setQIDState( query, state ); return state; }