1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-01 03:40:16 +02:00

* Refactor pipeline.

This commit is contained in:
Christian Muehlhaeuser
2011-08-25 02:55:25 +02:00
parent 6f639ecf10
commit 5f9f9481e7

View File

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