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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user