diff --git a/src/libtomahawk/AlbumPlaylistInterface.cpp b/src/libtomahawk/AlbumPlaylistInterface.cpp index 7a81f80f5..4ef496757 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.cpp +++ b/src/libtomahawk/AlbumPlaylistInterface.cpp @@ -49,6 +49,10 @@ AlbumPlaylistInterface::AlbumPlaylistInterface( Tomahawk::Album* album, Tomahawk , m_album( QPointer< Tomahawk::Album >( album ) ) , m_lastQueryTimestamp( 0 ) { + if ( m_collection ) + { + connect( collection.data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ), Qt::UniqueConnection ); + } } @@ -317,6 +321,19 @@ AlbumPlaylistInterface::onTracksLoaded( const QList< query_ptr >& tracks ) } +void +AlbumPlaylistInterface::onCollectionChanged() +{ +// tDebug() << Q_FUNC_INFO << m_album->name(); + if ( m_mode == Tomahawk::DatabaseMode ) + { + startLoading(); + m_databaseLoaded = false; + m_queries.clear(); + } +} + + qint64 AlbumPlaylistInterface::indexOfResult( const Tomahawk::result_ptr& result ) const { diff --git a/src/libtomahawk/AlbumPlaylistInterface.h b/src/libtomahawk/AlbumPlaylistInterface.h index 88f5af97b..45f129116 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.h +++ b/src/libtomahawk/AlbumPlaylistInterface.h @@ -69,6 +69,8 @@ private slots: void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ); void infoSystemFinished( const QString& infoId ); + void onCollectionChanged(); + private: QList< Tomahawk::query_ptr > m_queries; mutable result_ptr m_currentItem; diff --git a/src/libtomahawk/PlaylistInterface.cpp b/src/libtomahawk/PlaylistInterface.cpp index 0177ca4c3..6e8ffa0bb 100644 --- a/src/libtomahawk/PlaylistInterface.cpp +++ b/src/libtomahawk/PlaylistInterface.cpp @@ -249,6 +249,19 @@ PlaylistInterface::setCurrentIndex( qint64 index ) } +void +PlaylistInterface::startLoading() +{ + foreach ( const Tomahawk::query_ptr& query, tracks() ) + { + disconnect( query.data(), SIGNAL( playableStateChanged( bool ) ), this, SLOT( onItemsChanged() ) ); + disconnect( query.data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( onQueryResolved() ) ); + } + + m_finished = false; +} + + void PlaylistInterface::finishLoading() { diff --git a/src/libtomahawk/PlaylistInterface.h b/src/libtomahawk/PlaylistInterface.h index e279c2e77..87b71194c 100644 --- a/src/libtomahawk/PlaylistInterface.h +++ b/src/libtomahawk/PlaylistInterface.h @@ -108,6 +108,7 @@ signals: protected slots: virtual void onItemsChanged(); + void startLoading(); void finishLoading(); void onQueryResolved();