From 085907dfe72f78eb6f43582ccf43415043a6bb3d Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Tue, 4 Dec 2012 03:15:10 +0100 Subject: [PATCH] * Check prev/next availability in Album- & ArtistPlaylistInterface. --- src/libtomahawk/AlbumPlaylistInterface.cpp | 19 ++++++++++++++++--- src/libtomahawk/AlbumPlaylistInterface.h | 3 ++- src/libtomahawk/ArtistPlaylistInterface.cpp | 21 +++++++++++++++++---- src/libtomahawk/ArtistPlaylistInterface.h | 3 ++- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/libtomahawk/AlbumPlaylistInterface.cpp b/src/libtomahawk/AlbumPlaylistInterface.cpp index fb2596ef5..d2290e297 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.cpp +++ b/src/libtomahawk/AlbumPlaylistInterface.cpp @@ -36,7 +36,6 @@ using namespace Tomahawk; AlbumPlaylistInterface::AlbumPlaylistInterface( Tomahawk::Album* album, Tomahawk::ModelMode mode, const Tomahawk::collection_ptr& collection ) : Tomahawk::PlaylistInterface() , m_currentItem( 0 ) - , m_currentTrack( 0 ) , m_infoSystemLoaded( false ) , m_databaseLoaded( false ) , m_mode( mode ) @@ -55,7 +54,8 @@ AlbumPlaylistInterface::~AlbumPlaylistInterface() void AlbumPlaylistInterface::setCurrentIndex( qint64 index ) { - m_currentTrack = index; + PlaylistInterface::setCurrentIndex( index ); + m_currentItem = m_queries.at( index )->results().first(); } @@ -63,7 +63,7 @@ AlbumPlaylistInterface::setCurrentIndex( qint64 index ) qint64 AlbumPlaylistInterface::siblingIndex( int itemsAway, qint64 rootIndex ) const { - qint64 p = m_currentTrack; + qint64 p = m_currentIndex; if ( rootIndex >= 0 ) p = rootIndex; @@ -181,6 +181,7 @@ AlbumPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData re Pipeline::instance()->resolve( ql ); m_queries << ql; + checkQueries(); } break; @@ -243,6 +244,8 @@ AlbumPlaylistInterface::onTracksLoaded( const QList< query_ptr >& tracks ) else m_queries << tracks; + checkQueries(); + m_finished = true; emit tracksLoaded( m_mode, m_collection ); } @@ -301,3 +304,13 @@ AlbumPlaylistInterface::resultAt( qint64 index ) const return Tomahawk::result_ptr(); } + + +void +AlbumPlaylistInterface::checkQueries() +{ + foreach ( const Tomahawk::query_ptr& query, m_queries ) + { + connect( query.data(), SIGNAL( playableStateChanged( bool ) ), SLOT( onItemsChanged() ), Qt::UniqueConnection ); + } +} diff --git a/src/libtomahawk/AlbumPlaylistInterface.h b/src/libtomahawk/AlbumPlaylistInterface.h index 83a52ee46..a63f41f17 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.h +++ b/src/libtomahawk/AlbumPlaylistInterface.h @@ -70,9 +70,10 @@ private slots: void infoSystemFinished( const QString& infoId ); private: + void checkQueries(); + QList< Tomahawk::query_ptr > m_queries; mutable result_ptr m_currentItem; - mutable qint64 m_currentTrack; bool m_infoSystemLoaded; bool m_databaseLoaded; diff --git a/src/libtomahawk/ArtistPlaylistInterface.cpp b/src/libtomahawk/ArtistPlaylistInterface.cpp index 033093930..451764fe5 100644 --- a/src/libtomahawk/ArtistPlaylistInterface.cpp +++ b/src/libtomahawk/ArtistPlaylistInterface.cpp @@ -35,7 +35,6 @@ using namespace Tomahawk; ArtistPlaylistInterface::ArtistPlaylistInterface( Tomahawk::Artist* artist, Tomahawk::ModelMode mode, const Tomahawk::collection_ptr& collection ) : Tomahawk::PlaylistInterface() , m_currentItem( 0 ) - , m_currentTrack( 0 ) , m_infoSystemLoaded( false ) , m_databaseLoaded( false ) , m_mode( mode ) @@ -54,15 +53,16 @@ ArtistPlaylistInterface::~ArtistPlaylistInterface() void ArtistPlaylistInterface::setCurrentIndex( qint64 index ) { - m_currentTrack = index; - m_currentItem = m_queries.at( index )->results().first(); + PlaylistInterface::setCurrentIndex( index ); + + m_currentItem = m_queries.at( index )->results().first(); } qint64 ArtistPlaylistInterface::siblingIndex( int itemsAway, qint64 rootIndex ) const { - qint64 p = m_currentTrack; + qint64 p = m_currentIndex; if ( rootIndex >= 0 ) p = rootIndex; @@ -162,6 +162,7 @@ ArtistPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData r Pipeline::instance()->resolve( ql ); m_queries << ql; + checkQueries(); } break; @@ -223,6 +224,8 @@ ArtistPlaylistInterface::onTracksLoaded( const QList< query_ptr >& tracks ) else m_queries << tracks; + checkQueries(); + m_finished = true; emit tracksLoaded( m_mode, m_collection ); } @@ -281,3 +284,13 @@ ArtistPlaylistInterface::resultAt( qint64 index ) const return Tomahawk::result_ptr(); } + + +void +ArtistPlaylistInterface::checkQueries() +{ + foreach ( const Tomahawk::query_ptr& query, m_queries ) + { + connect( query.data(), SIGNAL( playableStateChanged( bool ) ), SLOT( onItemsChanged() ), Qt::UniqueConnection ); + } +} diff --git a/src/libtomahawk/ArtistPlaylistInterface.h b/src/libtomahawk/ArtistPlaylistInterface.h index dd0508a51..c728f1c2a 100644 --- a/src/libtomahawk/ArtistPlaylistInterface.h +++ b/src/libtomahawk/ArtistPlaylistInterface.h @@ -69,9 +69,10 @@ private slots: private: Q_DISABLE_COPY( ArtistPlaylistInterface ) + void checkQueries(); + QList< Tomahawk::query_ptr > m_queries; mutable result_ptr m_currentItem; - mutable qint64 m_currentTrack; bool m_infoSystemLoaded; bool m_databaseLoaded;