From ebeb50d84e3bea0e9d299775db415a4af951065b Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 28 Nov 2012 04:46:31 +0100 Subject: [PATCH] * Cleaned up PlaylistInterface. --- src/libtomahawk/PlaylistInterface.cpp | 47 ++++++++++++++++++++++++--- src/libtomahawk/PlaylistInterface.h | 25 ++++++++------ 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/src/libtomahawk/PlaylistInterface.cpp b/src/libtomahawk/PlaylistInterface.cpp index d255ab766..c7529fe06 100644 --- a/src/libtomahawk/PlaylistInterface.cpp +++ b/src/libtomahawk/PlaylistInterface.cpp @@ -41,16 +41,41 @@ PlaylistInterface::~PlaylistInterface() result_ptr -PlaylistInterface::previousItem() +PlaylistInterface::previousResult() const { - return siblingItem( -1 ); + return siblingResult( -1 ); } result_ptr -PlaylistInterface::nextItem() +PlaylistInterface::nextResult() const { - return siblingItem( 1 ); + return siblingResult( 1 ); +} + + +Tomahawk::result_ptr +PlaylistInterface::siblingResult( int itemsAway ) const +{ + qint64 idx = siblingIndex( itemsAway ); + + while ( idx >= 0 ) + { + Tomahawk::query_ptr query = queryAt( idx ); + if ( query->numResults() ) + { + return query->results().first(); + } + + if ( itemsAway < 0 ) + itemsAway--; + else + itemsAway++; + + idx = siblingIndex( itemsAway ); + } + + return Tomahawk::result_ptr(); } @@ -89,3 +114,17 @@ PlaylistInterface::filterTracks( const QList& queries ) Pipeline::instance()->resolve( result ); return result; } + + +bool +PlaylistInterface::hasNextResult() const +{ + return !( siblingResult( 1 ).isNull() ); +} + + +bool +PlaylistInterface::hasPreviousResult() const +{ + return !( siblingResult( -1 ).isNull() ); +} diff --git a/src/libtomahawk/PlaylistInterface.h b/src/libtomahawk/PlaylistInterface.h index 396b68f3d..b7c69abc4 100644 --- a/src/libtomahawk/PlaylistInterface.h +++ b/src/libtomahawk/PlaylistInterface.h @@ -22,6 +22,7 @@ #include +#include "playlist/PlayableItem.h" #include "Typedefs.h" #include "DllMacro.h" #include "utils/Logger.h" @@ -45,20 +46,22 @@ public: virtual int trackCount() const = 0; virtual Tomahawk::result_ptr currentItem() const = 0; + virtual void setCurrentIndex( qint64 index ) = 0; - virtual bool hasNextItem() { return true; } - virtual bool hasPreviousItem() { return true; } - virtual Tomahawk::result_ptr nextItem(); - virtual Tomahawk::result_ptr previousItem(); + virtual bool hasNextResult() const; + virtual bool hasPreviousResult() const; + virtual Tomahawk::result_ptr nextResult() const; + virtual Tomahawk::result_ptr previousResult() const; - virtual Tomahawk::result_ptr siblingItem( int itemsAway, bool readOnly = false ) = 0; + virtual qint64 siblingIndex( int itemsAway ) const = 0; + virtual Tomahawk::result_ptr siblingResult( int itemsAway ) const; - virtual Tomahawk::query_ptr itemAt( unsigned int position ) const = 0; - virtual int indexOfResult( const Tomahawk::result_ptr& result ) const = 0; - virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const = 0; + virtual Tomahawk::result_ptr resultAt( qint64 index ) const = 0; + virtual Tomahawk::query_ptr queryAt( qint64 index ) const = 0; + virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const = 0; + virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const = 0; virtual PlaylistModes::RepeatMode repeatMode() const = 0; - virtual bool shuffled() const = 0; virtual PlaylistModes::ViewMode viewMode() const { return PlaylistModes::Unknown; } @@ -90,7 +93,9 @@ signals: void repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode mode ); void shuffleModeChanged( bool enabled ); void latchModeChanged( Tomahawk::PlaylistModes::LatchMode mode ); - void nextTrackReady(); + + void previousTrackAvailable(); + void nextTrackAvailable(); protected: virtual QList filterTracks( const QList& queries );