1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-07-31 11:20:22 +02:00

* Moved prev/next check into PlaylistInterface.

This commit is contained in:
Christian Muehlhaeuser
2012-12-04 03:12:27 +01:00
parent 5e4940cb8d
commit e4c66de0fd
2 changed files with 65 additions and 4 deletions

View File

@@ -30,6 +30,9 @@ PlaylistInterface::PlaylistInterface ()
: QObject() : QObject()
, m_latchMode( PlaylistModes::StayOnSong ) , m_latchMode( PlaylistModes::StayOnSong )
, m_finished( false ) , m_finished( false )
, m_prevAvail( false )
, m_nextAvail( false )
, m_currentIndex( -1 )
{ {
m_id = uuid(); m_id = uuid();
} }
@@ -55,9 +58,9 @@ PlaylistInterface::nextResult() const
Tomahawk::result_ptr Tomahawk::result_ptr
PlaylistInterface::siblingResult( int itemsAway ) const PlaylistInterface::siblingResult( int itemsAway, qint64 rootIndex ) const
{ {
qint64 idx = siblingIndex( itemsAway ); qint64 idx = siblingIndex( itemsAway, rootIndex );
qint64 safetyCheck = -1; qint64 safetyCheck = -1;
// If safetyCheck equals idx, this means the interface keeps returning the same item and we won't discover anything new - abort // If safetyCheck equals idx, this means the interface keeps returning the same item and we won't discover anything new - abort
@@ -168,3 +171,55 @@ PlaylistInterface::hasPreviousResult() const
{ {
return ( siblingResult( -1 ) ); return ( siblingResult( -1 ) );
} }
void
PlaylistInterface::onItemsChanged()
{
if ( QThread::currentThread() != thread() )
{
QMetaObject::invokeMethod( this, "onItemsChanged", Qt::QueuedConnection );
return;
}
Tomahawk::result_ptr prevResult = siblingResult( -1, m_currentIndex );
Tomahawk::result_ptr nextResult = siblingResult( 1, m_currentIndex );
if ( prevResult )
{
bool avail = prevResult->toQuery()->playable();
if ( avail != m_prevAvail )
{
m_prevAvail = avail;
emit previousTrackAvailable();
}
}
else if ( m_prevAvail )
{
m_prevAvail = false;
emit previousTrackAvailable();
}
if ( nextResult )
{
bool avail = nextResult->toQuery()->playable();
if ( avail != m_nextAvail )
{
m_nextAvail = avail;
emit nextTrackAvailable();
}
}
else if ( m_nextAvail )
{
m_nextAvail = false;
emit nextTrackAvailable();
}
}
void
PlaylistInterface::setCurrentIndex( qint64 index )
{
m_currentIndex = index;
onItemsChanged();
}

View File

@@ -46,7 +46,7 @@ public:
virtual int trackCount() const = 0; virtual int trackCount() const = 0;
virtual Tomahawk::result_ptr currentItem() const = 0; virtual Tomahawk::result_ptr currentItem() const = 0;
virtual void setCurrentIndex( qint64 index ) = 0; virtual void setCurrentIndex( qint64 index );
virtual bool hasNextResult() const; virtual bool hasNextResult() const;
virtual bool hasPreviousResult() const; virtual bool hasPreviousResult() const;
@@ -54,7 +54,7 @@ public:
virtual Tomahawk::result_ptr previousResult() const; virtual Tomahawk::result_ptr previousResult() const;
virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const = 0; virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const = 0;
virtual Tomahawk::result_ptr siblingResult( int itemsAway ) const; virtual Tomahawk::result_ptr siblingResult( int itemsAway, qint64 rootIndex = -1 ) const;
virtual Tomahawk::result_ptr resultAt( qint64 index ) const = 0; virtual Tomahawk::result_ptr resultAt( qint64 index ) const = 0;
virtual Tomahawk::query_ptr queryAt( qint64 index ) const = 0; virtual Tomahawk::query_ptr queryAt( qint64 index ) const = 0;
@@ -100,11 +100,17 @@ signals:
void previousTrackAvailable(); void previousTrackAvailable();
void nextTrackAvailable(); void nextTrackAvailable();
protected slots:
virtual void onItemsChanged();
protected: protected:
virtual QList<Tomahawk::query_ptr> filterTracks( const QList<Tomahawk::query_ptr>& queries ); virtual QList<Tomahawk::query_ptr> filterTracks( const QList<Tomahawk::query_ptr>& queries );
PlaylistModes::LatchMode m_latchMode; PlaylistModes::LatchMode m_latchMode;
bool m_finished; bool m_finished;
mutable bool m_prevAvail;
mutable bool m_nextAvail;
mutable qint64 m_currentIndex;
private: private:
Q_DISABLE_COPY( PlaylistInterface ) Q_DISABLE_COPY( PlaylistInterface )