From 806b3a3281b036a65d1150a61ed44d9e30bd08a0 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Mon, 4 Apr 2011 18:43:51 -0400 Subject: [PATCH] change loading animation, show animation while resolving a playlist --- data/images/loading-animation.gif | Bin 7517 -> 2608 bytes .../dynamic/widgets/LoadingSpinner.cpp | 4 +-- src/libtomahawk/playlist/playlistmodel.cpp | 23 ++++++++++++++++-- src/libtomahawk/playlist/playlistmodel.h | 6 ++--- src/libtomahawk/query.cpp | 2 ++ src/libtomahawk/query.h | 3 +++ 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/data/images/loading-animation.gif b/data/images/loading-animation.gif index 0be11d9d2fdb4cb093f016fcf9f48432883adf00..7fc9059880268a3e4eaea926e4e36093eb31bde2 100644 GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(lu>!CRf^T^KrYX$KoDxfM!SSdLcpq#Mg`ff zAj(T@DUYJiGRUI>S}W8Cs1za?QM3|>7$g!vg0@T1s_j(jUN+e6?Cc-gotm*^e5QBG!*+;~^apIPV`1UC= zGfNELC5*$w$US2ED`IYrxP6!SdWLxNl&EbXj?@z;&k~b1;^JkZe}MSxJn`ZMalVT< z-b&n`CVu>pXlf&Bnh4-GTORX^qC?~3uwYr}DqnxHgZ&^60>#o*N}VcMv?o=k5h>G@ z8E@}UCi|vtSMLBko>Lf*eb>r`D=i=Z;CxWFHiFNjQ_0y$da+w?lP)7jeCo|0)kRz2 z>v7HdvwgO9Y%X55ezX5|^=h;?k&HfW|40b=p+KfQB@5ZJC>Gkm$dR*Phz*dO1gPdP z6ADSrWpKDkA?TW?qQqwc)w{Q5(j=Qy9Nun>$I;TuGLN0ZxS3&ER#z-b8?KcZFjyO* zJ$dtlHd0$^0@zyV-J77)~HI?0x zsto8vFTZD8_Ln&ERGN-@n;n{PeSOiHD1Gi;0Z&u(B)@KXZ~`i-+D~hY49qsS?<_3U zO9OC9=gESBXao-Q<8;rdDTUm3D6=CB(k~lz%S24d&ql!aMS&ZRLzf*-xGtj?J<{s^ zQ|>VglEs>Co@&qii)QOnHQ>RFg|=lVUh=RZn56&^MC2Bdlxzn|<8m@8DxBRVw4793 zYJELRvPr?==`c6fPZ1Y@q^>!OfgK1;#y{)EglI%kRHUV<-vWM;;ngVUc9`l@7*`#Jv)W@n zP=w=fR|t$p;0*={kHm`&5;iU!8Ul^xGsxH&pW1J6vW_`c%CDFO(}**<(=0@18E5hH zUEnNorA03P$CClQE6sxz)*&6bRav6TU%m4QrQ0PB#-L7psV25QT;G;Kp74;m2jMa) zq#r-z8o0c5CbkD$>auo`N7AZXgS>)Oj$hE$?-E}tT^jR{;_$m6Iy`Lm`BD+pYw1%& zcUtuFm~%rHa9NA|WY=l@bAVQV$}Rg%nM3=tu%XJu;A`;!KP}?et8%VS-7b&ZJjmJU ztz-N~I4DwpCGnqKVYvXFSYB< ze<~>P4&OdfpXWd?7rn9FrNKZ3k08l)&%e_<SPAKR8XC#5W#~!MbbB@(5#n};ct*TT^I0Lt>%ut$4`!{9kku>$1CD+*}I8X zqYf>Nt^p3BlMcNBL4}TM_8xe|YxHJH0QB>X8*_s<&UB|1s@_KfUYY32%qVOWa#kB! zekeZ(RddABBZ1$3??wOBURyuic5@$YA0;;tg6#WuWZNT2;_h5f@aLZ*TS38C)zv`d z%Up74LR{T+7_ZJAOmG__wfCBu#Ari>`j9dOxvEKU-5yR9$2O-y48p1WHrd_x@$Sj% zApYJYdy0ym7_=y&aCq9(K*m|qH{>zu*CT}iU{Qq+XQ_A38nsh4IeR>ZQ9h0Ue@NzL zki5Q*Y2LOiOqpPM7%SfA=@Xi8`T;9+)na;NEBS$~;*V)&(}5*dH#zfO^)p7C@N7C3 zx-G24TRADVREqwq(_h8@j?lk?JN}2A+U4?deC)D&RBa}`B)7eG|I~}wdEt)aw zgl5C=)QBc3eZV@DYS8pq`?th&8GF)eZ%E=+$bHvd0vby1x7=Q_wiO7(%S9yr*apxm za7_s3iZ9E}`*A??pqKB_x);X25_UbNMB7)|+Td#HA$seKBuk$~>sNZjD U@0!tb_KI6)uefy!|D%`dpR|;|761SM literal 7517 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 Sn2#Wui8Ns8nm>c-{{I4f&Zn6G 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;