diff --git a/data/images/loading-animation.gif b/data/images/loading-animation.gif index 0be11d9d2..7fc905988 100644 Binary files a/data/images/loading-animation.gif and b/data/images/loading-animation.gif differ diff --git a/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.cpp b/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.cpp index f3814c238..a532d51da 100644 --- a/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.cpp +++ b/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.cpp @@ -81,7 +81,7 @@ LoadingSpinner::hideFinished() QSize LoadingSpinner::sizeHint() const { - return QSize( 64, 64 ); + return QSize( 31, 31 ); } void @@ -99,7 +99,7 @@ LoadingSpinner::reposition() int x = ( parentWidget()->width() / 2 ) - ( width() / 2 ); int y = ( parentWidget()->height() / 2 ) - ( height() / 2 ); move( x, y ); - resize( 64, 64 ); + resize( 31, 31 ); } diff --git a/src/libtomahawk/playlist/playlistmodel.cpp b/src/libtomahawk/playlist/playlistmodel.cpp index 2ab23bf51..84f6e91c4 100644 --- a/src/libtomahawk/playlist/playlistmodel.cpp +++ b/src/libtomahawk/playlist/playlistmodel.cpp @@ -95,9 +95,9 @@ PlaylistModel::loadPlaylist( const Tomahawk::playlist_ptr& playlist, bool loadEn int c = rowCount( QModelIndex() ); qDebug() << "Starting loading" << playlist->title(); - emit loadingStarts(); emit beginInsertRows( QModelIndex(), c, c + entries.count() - 1 ); + m_waitingForResolved.clear(); foreach( const plentry_ptr& entry, entries ) { qDebug() << entry->query()->toString(); @@ -105,6 +105,11 @@ PlaylistModel::loadPlaylist( const Tomahawk::playlist_ptr& playlist, bool loadEn plitem->index = createIndex( m_rootItem->children.count() - 1, 0, plitem ); connect( plitem, SIGNAL( dataChanged() ), SLOT( onDataChanged() ) ); + + if( !entry->query()->resolvingFinished() ) { + m_waitingForResolved.append( entry->query().data() ); + connect( entry->query().data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( trackResolved( bool ) ) ); + } } emit endInsertRows(); @@ -112,7 +117,9 @@ PlaylistModel::loadPlaylist( const Tomahawk::playlist_ptr& playlist, bool loadEn else qDebug() << "Playlist seems empty:" << playlist->title(); - emit loadingFinished(); + if( !m_waitingForResolved.isEmpty() ) + emit loadingStarted(); + emit trackCountChanged( rowCount( QModelIndex() ) ); } @@ -203,6 +210,18 @@ PlaylistModel::insert( unsigned int row, const Tomahawk::query_ptr& query ) onTracksInserted( row, ql ); } +void +PlaylistModel::trackResolved( bool ) +{ + Tomahawk::Query* q = qobject_cast< Query* >( sender() ); + Q_ASSERT( q ); + + m_waitingForResolved.removeAll( q ); + + if( m_waitingForResolved.isEmpty() ) + emit loadingFinished(); +} + void PlaylistModel::onTracksAdded( const QList& tracks ) diff --git a/src/libtomahawk/playlist/playlistmodel.h b/src/libtomahawk/playlist/playlistmodel.h index bc743a18a..e5ce24ae4 100644 --- a/src/libtomahawk/playlist/playlistmodel.h +++ b/src/libtomahawk/playlist/playlistmodel.h @@ -70,10 +70,6 @@ signals: void shuffleModeChanged( bool enabled ); void itemSizeChanged( const QModelIndex& index ); - - void loadingStarts(); - void loadingFinished(); - private slots: void onDataChanged(); @@ -83,11 +79,13 @@ private slots: void onTracksAdded( const QList& tracks ); void onTracksInserted( unsigned int row, const QList& tracks ); + void trackResolved( bool ); private: QList playlistEntries() const; Tomahawk::playlist_ptr m_playlist; bool m_waitForUpdate; + QList< Tomahawk::Query* > m_waitingForResolved; }; #endif // PLAYLISTMODEL_H diff --git a/src/libtomahawk/query.cpp b/src/libtomahawk/query.cpp index 10cf98c81..f3f70357a 100644 --- a/src/libtomahawk/query.cpp +++ b/src/libtomahawk/query.cpp @@ -45,6 +45,7 @@ Query::get( const QString& artist, const QString& track, const QString& album, c Query::Query( const QString& artist, const QString& track, const QString& album, const QID& qid ) : m_solved( false ) , m_playable( false ) + , m_resolveFinished( false ) , m_qid( qid ) , m_artist( artist ) , m_album( album ) @@ -114,6 +115,7 @@ void Query::onResolvingFinished() { // qDebug() << Q_FUNC_INFO << "Finished resolving." << toString(); + m_resolveFinished = true; emit resolvingFinished( m_solved ); } diff --git a/src/libtomahawk/query.h b/src/libtomahawk/query.h index 9c84d68bf..84e057493 100644 --- a/src/libtomahawk/query.h +++ b/src/libtomahawk/query.h @@ -64,6 +64,8 @@ public: /// true when any result has been found (score may be less than 1.0) bool playable() const { return m_playable; } + bool resolvingFinished() const { return m_resolveFinished; } + unsigned int lastPipelineWeight() const { return m_lastpipelineweight; } void setLastPipelineWeight( unsigned int w ) { m_lastpipelineweight = w; } @@ -108,6 +110,7 @@ private: QList< Tomahawk::result_ptr > m_results; bool m_solved; bool m_playable; + bool m_resolveFinished; mutable QID m_qid; unsigned int m_lastpipelineweight;