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

make stations behave

This commit is contained in:
Leo Franchi
2011-03-06 12:24:53 -05:00
parent ebd66b1105
commit eec2c3a9bf
2 changed files with 14 additions and 4 deletions

View File

@@ -26,6 +26,7 @@ DynamicModel::DynamicModel( QObject* parent )
, m_startOnResolved( false ) , m_startOnResolved( false )
, m_onDemandRunning( false ) , m_onDemandRunning( false )
, m_changeOnNext( false ) , m_changeOnNext( false )
, m_searchingForNext( false )
, m_filterUnresolvable( true ) , m_filterUnresolvable( true )
, m_currentAttempts( 0 ) , m_currentAttempts( 0 )
, m_lastResolvedRow( 0 ) , m_lastResolvedRow( 0 )
@@ -78,7 +79,7 @@ DynamicModel::newTrackGenerated( const Tomahawk::query_ptr& query )
{ {
if( m_onDemandRunning ) { if( m_onDemandRunning ) {
connect( query.data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( trackResolveFinished( bool ) ) ); connect( query.data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( trackResolveFinished( bool ) ) );
connect( query.data(), SIGNAL( resultsAdded( QList<Tomahawk::result_ptr> ) ), this, SLOT( trackResolved() ) ); connect( query.data(), SIGNAL( solvedStateChanged( bool ) ), this, SLOT( trackResolved( bool ) ) );
append( query ); append( query );
} }
@@ -105,8 +106,11 @@ DynamicModel::changeStation()
void void
DynamicModel::trackResolved() DynamicModel::trackResolved( bool resolved )
{ {
if( !resolved )
return;
Query* q = qobject_cast<Query*>(sender()); Query* q = qobject_cast<Query*>(sender());
qDebug() << "Got successful resolved track:" << q->track() << q->artist() << m_lastResolvedRow << m_currentAttempts; qDebug() << "Got successful resolved track:" << q->track() << q->artist() << m_lastResolvedRow << m_currentAttempts;
if( m_startOnResolved ) { // on first start if( m_startOnResolved ) { // on first start
@@ -119,6 +123,7 @@ DynamicModel::trackResolved()
emit collapseFromTo( m_lastResolvedRow, m_currentAttempts ); emit collapseFromTo( m_lastResolvedRow, m_currentAttempts );
} }
m_currentAttempts = 0; m_currentAttempts = 0;
m_searchingForNext = false;
emit checkForOverflow(); emit checkForOverflow();
} }
@@ -131,6 +136,7 @@ DynamicModel::trackResolveFinished( bool success )
qDebug() << "Got not resolved track:" << q->track() << q->artist() << m_lastResolvedRow << m_currentAttempts; qDebug() << "Got not resolved track:" << q->track() << q->artist() << m_lastResolvedRow << m_currentAttempts;
m_currentAttempts++; m_currentAttempts++;
if( m_currentAttempts < 20 ) { if( m_currentAttempts < 20 ) {
qDebug() << "FETCHING MORE!";
m_playlist->generator()->fetchNext(); m_playlist->generator()->fetchNext();
} else { } else {
emit trackGenerationFailure( tr( "Could not find a playable track.\n\nPlease change the filters or try again." ) ); emit trackGenerationFailure( tr( "Could not find a playable track.\n\nPlease change the filters or try again." ) );
@@ -142,11 +148,15 @@ DynamicModel::trackResolveFinished( bool success )
void void
DynamicModel::newTrackLoading() DynamicModel::newTrackLoading()
{ {
qDebug() << "Got NEW TRACK LOADING signal";
if( m_changeOnNext ) { // reset instead of getting the next one if( m_changeOnNext ) { // reset instead of getting the next one
m_lastResolvedRow = rowCount( QModelIndex() ); m_lastResolvedRow = rowCount( QModelIndex() );
m_searchingForNext = true;
m_playlist->generator()->startOnDemand(); m_playlist->generator()->startOnDemand();
} else if( m_onDemandRunning && m_currentAttempts == 0 ) { // if we're in dynamic mode and we're also currently idle } else if( m_onDemandRunning && m_currentAttempts == 0 && !m_searchingForNext ) { // if we're in dynamic mode and we're also currently idle
m_lastResolvedRow = rowCount( QModelIndex() ); m_lastResolvedRow = rowCount( QModelIndex() );
m_searchingForNext = true;
qDebug() << "IDLE fetching new track!";
m_playlist->generator()->fetchNext(); m_playlist->generator()->fetchNext();
} }
} }

View File

@@ -64,7 +64,7 @@ private slots:
void newTrackGenerated( const Tomahawk::query_ptr& query ); void newTrackGenerated( const Tomahawk::query_ptr& query );
void trackResolveFinished( bool ); void trackResolveFinished( bool );
void trackResolved(); void trackResolved( bool );
void newTrackLoading(); void newTrackLoading();
void filteringTrackResolved( bool successful ); void filteringTrackResolved( bool successful );