1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-21 08:19:42 +01:00

* Implemented new PlaylistInterface for various other ProxyModelInterfaces.

This commit is contained in:
Christian Muehlhaeuser 2012-11-28 04:50:01 +01:00
parent 04a4b87558
commit f8917de6a3
11 changed files with 122 additions and 129 deletions

View File

@ -52,26 +52,27 @@ AlbumPlaylistInterface::~AlbumPlaylistInterface()
}
Tomahawk::result_ptr
AlbumPlaylistInterface::siblingItem( int itemsAway, bool readOnly )
void
AlbumPlaylistInterface::setCurrentIndex( qint64 index )
{
Q_UNUSED( readOnly );
m_currentTrack = index;
m_currentItem = m_queries.at( index )->results().first();
}
int p = m_currentTrack;
qint64
AlbumPlaylistInterface::siblingIndex( int itemsAway ) const
{
qint64 p = m_currentTrack;
p += itemsAway;
if ( p < 0 )
return Tomahawk::result_ptr();
return -1;
if ( p >= m_queries.count() )
return Tomahawk::result_ptr();
return -1;
if ( !m_queries.at( p )->numResults() )
return siblingItem( itemsAway + 1 );
m_currentTrack = p;
m_currentItem = m_queries.at( p )->results().first();
return m_currentItem;
return p;
}
@ -82,30 +83,6 @@ AlbumPlaylistInterface::currentItem() const
}
bool
AlbumPlaylistInterface::hasNextItem()
{
int p = m_currentTrack;
p++;
if ( p < 0 || p >= m_queries.count() )
return false;
return true;
}
bool
AlbumPlaylistInterface::hasPreviousItem()
{
int p = m_currentTrack;
p--;
if ( p < 0 || p >= m_queries.count() )
return false;
return true;
}
bool
AlbumPlaylistInterface::setCurrentTrack( unsigned int albumpos )
{

View File

@ -44,14 +44,14 @@ public:
virtual int trackCount() const { return m_queries.count(); }
virtual Tomahawk::result_ptr siblingItem( int itemsAway, bool readOnly = false );
virtual void setCurrentIndex( qint64 index );
virtual qint64 siblingIndex( int itemsAway ) const;
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual bool hasNextItem();
virtual bool hasPreviousItem();
virtual Tomahawk::result_ptr currentItem() const;
virtual PlaylistModes::RepeatMode repeatMode() const { return PlaylistModes::NoRepeat; }
@ -71,8 +71,8 @@ private slots:
private:
QList< Tomahawk::query_ptr > m_queries;
result_ptr m_currentItem;
unsigned int m_currentTrack;
mutable result_ptr m_currentItem;
mutable qint64 m_currentTrack;
bool m_infoSystemLoaded;
bool m_databaseLoaded;

View File

@ -51,38 +51,27 @@ ArtistPlaylistInterface::~ArtistPlaylistInterface()
}
Tomahawk::result_ptr
ArtistPlaylistInterface::siblingItem( int itemsAway, bool readOnly )
void
ArtistPlaylistInterface::setCurrentIndex( qint64 index )
{
Q_UNUSED( readOnly );
int p = m_currentTrack;
p += itemsAway;
if ( p < 0 )
return Tomahawk::result_ptr();
if ( p >= m_queries.count() )
return Tomahawk::result_ptr();
if ( !m_queries.at( p )->numResults() )
return siblingItem( itemsAway + 1 );
m_currentTrack = p;
m_currentItem = m_queries.at( p )->results().first();
return m_currentItem;
m_currentTrack = index;
m_currentItem = m_queries.at( index )->results().first();
}
bool
ArtistPlaylistInterface::hasNextItem()
qint64
ArtistPlaylistInterface::siblingIndex( int itemsAway ) const
{
int p = m_currentTrack;
p++;
if ( p < 0 || p >= m_queries.count() )
return false;
qint64 p = m_currentTrack;
p += itemsAway;
return true;
if ( p < 0 )
return -1;
if ( p >= m_queries.count() )
return -1;
return p;
}

View File

@ -43,13 +43,13 @@ public:
virtual int trackCount() const { return m_queries.count(); }
virtual Tomahawk::result_ptr siblingItem( int itemsAway, bool readOnly = false );
virtual void setCurrentIndex( qint64 index );
virtual qint64 siblingIndex( int itemsAway ) const;
virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual bool hasNextItem();
virtual Tomahawk::result_ptr currentItem() const;
virtual PlaylistModes::RepeatMode repeatMode() const { return PlaylistModes::NoRepeat; }
@ -70,8 +70,8 @@ private:
Q_DISABLE_COPY( ArtistPlaylistInterface )
QList< Tomahawk::query_ptr > m_queries;
result_ptr m_currentItem;
unsigned int m_currentTrack;
mutable result_ptr m_currentItem;
mutable qint64 m_currentTrack;
bool m_infoSystemLoaded;
bool m_databaseLoaded;

View File

@ -46,14 +46,14 @@ public:
virtual int trackCount() const;
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); }
virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual bool hasNextItem() { return false; }
virtual Tomahawk::result_ptr currentItem() const { return m_currentItem; }
virtual Tomahawk::result_ptr siblingItem( int /*itemsAway*/, bool /*readOnly*/ ) { return result_ptr(); }
virtual qint64 siblingIndex( int /*itemsAway*/ ) const { return -1; }
virtual PlaylistModes::RepeatMode repeatMode() const { return PlaylistModes::NoRepeat; }
virtual bool shuffled() const { return false; }

View File

@ -50,18 +50,27 @@ SourcePlaylistInterface::~SourcePlaylistInterface()
}
Tomahawk::result_ptr
SourcePlaylistInterface::siblingItem( int itemsAway, bool readOnly )
void
SourcePlaylistInterface::setCurrentIndex( qint64 index )
{
Q_UNUSED( index );
}
qint64
SourcePlaylistInterface::siblingIndex( int itemsAway ) const
{
Q_UNUSED( itemsAway );
Q_UNUSED( readOnly );
return nextItem();
if ( nextResult() )
return 0;
else
return -1;
}
Tomahawk::result_ptr
SourcePlaylistInterface::nextItem()
SourcePlaylistInterface::nextResult() const
{
tDebug( LOGEXTRA ) << Q_FUNC_INFO;
if ( !sourceValid() )
@ -70,7 +79,7 @@ SourcePlaylistInterface::nextItem()
m_currentItem = Tomahawk::result_ptr();
return m_currentItem;
}
else if ( !hasNextItem() )
else if ( !hasNextResult() )
{
tDebug( LOGEXTRA ) << Q_FUNC_INFO << "This song was already fetched or the source isn't playing anything";
return Tomahawk::result_ptr();
@ -95,7 +104,7 @@ SourcePlaylistInterface::currentItem() const
bool
SourcePlaylistInterface::sourceValid()
SourcePlaylistInterface::sourceValid() const
{
tDebug( LOGEXTRA ) << Q_FUNC_INFO;
if ( m_source.isNull() || m_source.data()->currentTrack().isNull() )
@ -106,7 +115,7 @@ SourcePlaylistInterface::sourceValid()
bool
SourcePlaylistInterface::hasNextItem()
SourcePlaylistInterface::hasNextResult() const
{
if ( !sourceValid() )
return false;
@ -157,6 +166,25 @@ SourcePlaylistInterface::resolvingFinished( bool hasResults )
if ( hasResults )
{
m_gotNextItem = true;
emit nextTrackReady();
emit nextTrackAvailable();
}
}
Tomahawk::query_ptr
SourcePlaylistInterface::queryAt( qint64 index ) const
{
Q_UNUSED( index );
Tomahawk::result_ptr res = nextResult();
return res->toQuery();
}
Tomahawk::result_ptr
SourcePlaylistInterface::resultAt( qint64 index ) const
{
Q_UNUSED( index );
return nextResult();
}

View File

@ -43,14 +43,16 @@ public:
virtual int trackCount() const { return 1; }
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual void setCurrentIndex( qint64 index );
virtual Tomahawk::result_ptr resultAt( qint64 index ) const;
virtual Tomahawk::query_ptr queryAt( qint64 index ) const;
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual Tomahawk::result_ptr siblingItem( int itemsAway, bool readOnly = false );
virtual bool sourceValid();
virtual bool hasNextItem();
virtual Tomahawk::result_ptr nextItem();
virtual qint64 siblingIndex( int itemsAway ) const;
virtual bool sourceValid() const;
virtual bool hasNextResult() const;
virtual Tomahawk::result_ptr nextResult() const;
virtual Tomahawk::result_ptr currentItem() const;
virtual PlaylistModes::RepeatMode repeatMode() const { return PlaylistModes::NoRepeat; }
@ -78,8 +80,8 @@ private slots:
private:
QWeakPointer< Tomahawk::Source > m_source;
Tomahawk::result_ptr m_currentItem;
bool m_gotNextItem;
mutable Tomahawk::result_ptr m_currentItem;
mutable bool m_gotNextItem;
};
}; // ns

View File

@ -41,11 +41,13 @@ public:
query_ptr track() const { return m_track; }
void setQuery( const query_ptr& track ) { m_track = track; }
virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); }
virtual result_ptr currentItem() const { return result_ptr(); }
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual PlaylistModes::RepeatMode repeatMode() const { return PlaylistModes::NoRepeat; }
virtual void setRepeatMode( PlaylistModes::RepeatMode ) {}
@ -53,7 +55,7 @@ public:
virtual bool shuffled() const { return false; }
virtual void setShuffled( bool ) {}
virtual result_ptr siblingItem( int, bool ) { return result_ptr(); }
virtual qint64 siblingIndex( int ) const { return -1; }
virtual int trackCount() const { return 1; }
virtual QList< query_ptr > tracks() { return QList< query_ptr >(); }

View File

@ -57,11 +57,13 @@ public:
virtual bool shuffled() const { return m_w->ui->tracksViewLeft->proxyModel()->playlistInterface()->shuffled(); }
// Do nothing
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); }
virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual Tomahawk::result_ptr currentItem() const { return Tomahawk::result_ptr(); }
virtual Tomahawk::result_ptr siblingItem( int, bool ) { return Tomahawk::result_ptr(); }
virtual qint64 siblingIndex( int ) const { return -1; }
virtual int trackCount() const { return 0; }
virtual QList< Tomahawk::query_ptr > tracks() { return QList< Tomahawk::query_ptr >(); }
@ -86,14 +88,6 @@ public slots:
m_w->ui->artistsViewLeft->proxyModel()->playlistInterface()->setShuffled( enabled );
}
signals:
void repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode mode );
void shuffleModeChanged( bool enabled );
void trackCountChanged( unsigned int tracks );
void sourceTrackCountChanged( unsigned int tracks );
void nextTrackReady();
private slots:
void anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode mode )
{

View File

@ -47,11 +47,13 @@ public:
virtual Tomahawk::PlaylistModes::RepeatMode repeatMode() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->repeatMode(); }
virtual bool shuffled() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->shuffled(); }
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); }
virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual Tomahawk::result_ptr currentItem() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->currentItem(); }
virtual Tomahawk::result_ptr siblingItem( int itemsAway, bool readOnly ) { return m_w->ui->tracks->proxyModel()->playlistInterface()->siblingItem( itemsAway, readOnly ); }
virtual qint64 siblingIndex( int itemsAway ) const { return m_w->ui->tracks->proxyModel()->playlistInterface()->siblingIndex( itemsAway ); }
virtual int trackCount() const { return m_w->ui->tracks->proxyModel()->playlistInterface()->trackCount(); }
virtual QList< Tomahawk::query_ptr > tracks() { return m_w->ui->tracks->proxyModel()->playlistInterface()->tracks(); }

View File

@ -59,11 +59,13 @@ public:
virtual bool shuffled() const { return m_w->ui->albums->proxyModel()->playlistInterface()->shuffled(); }
// Do nothing
virtual Tomahawk::query_ptr itemAt( unsigned int position ) const { Q_UNUSED( position ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual int indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual int indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual void setCurrentIndex( qint64 index ) { Q_UNUSED( index ); }
virtual Tomahawk::result_ptr resultAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::result_ptr(); }
virtual Tomahawk::query_ptr queryAt( qint64 index ) const { Q_UNUSED( index ); Q_ASSERT( false ); return Tomahawk::query_ptr(); }
virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const { Q_UNUSED( result ); Q_ASSERT( false ); return -1; }
virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const { Q_UNUSED( query ); Q_ASSERT( false ); return -1; }
virtual Tomahawk::result_ptr currentItem() const { return Tomahawk::result_ptr(); }
virtual Tomahawk::result_ptr siblingItem( int, bool ) { return Tomahawk::result_ptr(); }
virtual qint64 siblingIndex( int ) const { return -1; }
virtual int trackCount() const { return 0; }
virtual QList< Tomahawk::query_ptr > tracks() { return QList< Tomahawk::query_ptr >(); }
virtual int unfilteredTrackCount() const { return 0; }
@ -92,9 +94,6 @@ public slots:
m_w->ui->topHits->proxyModel()->playlistInterface()->setShuffled( enabled );
}
signals:
void nextTrackReady();
private slots:
void anyRepeatModeChanged( Tomahawk::PlaylistModes::RepeatMode mode )
{