1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-06 14:16:32 +02:00

* Allow to set PlaybackLogs when inserting items to PlayableModel.

This commit is contained in:
Christian Muehlhaeuser
2013-04-22 09:26:49 +02:00
parent e905a4b617
commit 3dab38eade
6 changed files with 65 additions and 39 deletions

View File

@@ -173,36 +173,36 @@ PlayableModel::queryData( const query_ptr& query, int column, int role ) const
switch ( column ) switch ( column )
{ {
case Artist: case Artist:
return query->artist(); return query->track()->artist();
break; break;
case Name: case Name:
case Track: case Track:
return query->track(); return query->track()->track();
break; break;
case Album: case Album:
return query->album(); return query->track()->album();
break; break;
case Composer: case Composer:
return query->composer(); return query->track()->composer();
break; break;
case Duration: case Duration:
return TomahawkUtils::timeToString( query->duration() ); return TomahawkUtils::timeToString( query->track()->duration() );
break; break;
case AlbumPos: case AlbumPos:
{ {
QString tPos; QString tPos;
if ( query->albumpos() != 0 ) if ( query->track()->albumpos() != 0 )
{ {
tPos = QString::number( query->albumpos() ); tPos = QString::number( query->track()->albumpos() );
if ( query->discnumber() == 0 ) if ( query->track()->discnumber() == 0 )
return tPos; return tPos;
else else
return QString( "%1.%2" ).arg( QString::number( query->discnumber() ) ) return QString( "%1.%2" ).arg( QString::number( query->track()->discnumber() ) )
.arg( tPos ); .arg( tPos );
} }
} }
@@ -252,7 +252,7 @@ PlayableModel::queryData( const query_ptr& query, int column, int role ) const
return tr( "Bad match" ); return tr( "Bad match" );
if ( score > 0.0 ) if ( score > 0.0 )
return tr( "Very bad match" ); return tr( "Very bad match" );
return tr( "Not available" ); return tr( "Not available" );
break; break;
} }
@@ -306,7 +306,7 @@ PlayableModel::data( const QModelIndex& index, int role ) const
{ {
if ( !entry->query().isNull() ) if ( !entry->query().isNull() )
{ {
return queryData( entry->query()->displayQuery(), index.column(), role ); return queryData( entry->query(), index.column(), role );
} }
else if ( !entry->artist().isNull() ) else if ( !entry->artist().isNull() )
{ {
@@ -571,7 +571,7 @@ PlayableModel::queries() const
template <typename T> template <typename T>
void void
PlayableModel::insertInternal( const QList< T >& items, int row ) PlayableModel::insertInternal( const QList< T >& items, int row, const QList< Tomahawk::PlaybackLog >& logs )
{ {
if ( !items.count() ) if ( !items.count() )
{ {
@@ -594,6 +594,10 @@ PlayableModel::insertInternal( const QList< T >& items, int row )
{ {
plitem = new PlayableItem( item, m_rootItem, row + i ); plitem = new PlayableItem( item, m_rootItem, row + i );
plitem->index = createIndex( row + i, 0, plitem ); plitem->index = createIndex( row + i, 0, plitem );
if ( logs.count() > i )
plitem->setPlaybackLog( logs.at( i ) );
i++; i++;
/* if ( item->id() == currentItemUuid() ) /* if ( item->id() == currentItemUuid() )
@@ -635,7 +639,7 @@ PlayableModel::removeIndex( const QModelIndex& index, bool moreToCome )
{ {
if ( index == m_currentIndex ) if ( index == m_currentIndex )
setCurrentIndex( QModelIndex() ); setCurrentIndex( QModelIndex() );
emit beginRemoveRows( index.parent(), index.row(), index.row() ); emit beginRemoveRows( index.parent(), index.row(), index.row() );
delete item; delete item;
emit endRemoveRows(); emit endRemoveRows();
@@ -823,6 +827,19 @@ PlayableModel::appendQueries( const QList< Tomahawk::query_ptr >& queries )
} }
void
PlayableModel::appendTracks( const QList< Tomahawk::track_ptr >& tracks, const QList< Tomahawk::PlaybackLog >& logs )
{
QList< Tomahawk::query_ptr > queries;
foreach ( const track_ptr& track, tracks )
{
queries << track->toQuery();
}
insertQueries( queries, rowCount( QModelIndex() ), logs );
}
void void
PlayableModel::insertArtist( const Tomahawk::artist_ptr& artist, int row ) PlayableModel::insertArtist( const Tomahawk::artist_ptr& artist, int row )
{ {
@@ -868,9 +885,9 @@ PlayableModel::insertAlbums( const QList< Tomahawk::album_ptr >& albums, int row
void void
PlayableModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int row ) PlayableModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int row, const QList< Tomahawk::PlaybackLog >& logs )
{ {
insertInternal( queries, row ); insertInternal( queries, row, logs );
} }
@@ -924,17 +941,17 @@ void
PlayableModel::onQueryResolved( bool hasResults ) PlayableModel::onQueryResolved( bool hasResults )
{ {
Q_UNUSED( hasResults ); Q_UNUSED( hasResults );
Tomahawk::Query* q = qobject_cast< Query* >( sender() ); Tomahawk::Query* q = qobject_cast< Query* >( sender() );
if ( !q ) if ( !q )
{ {
// Track has been removed from the playlist by now // Track has been removed from the playlist by now
return; return;
} }
Tomahawk::query_ptr query = q->weakRef().toStrongRef(); Tomahawk::query_ptr query = q->weakRef().toStrongRef();
PlayableItem* item = itemFromQuery( query ); PlayableItem* item = itemFromQuery( query );
if ( item ) if ( item )
{ {
emit indexResolved( item->index ); emit indexResolved( item->index );

View File

@@ -131,6 +131,7 @@ public slots:
virtual void clear(); virtual void clear();
virtual void appendTracks( const QList< Tomahawk::track_ptr >& tracks, const QList< Tomahawk::PlaybackLog >& logs = QList< Tomahawk::PlaybackLog >() );
virtual void appendQueries( const QList< Tomahawk::query_ptr >& queries ); virtual void appendQueries( const QList< Tomahawk::query_ptr >& queries );
virtual void appendArtists( const QList< Tomahawk::artist_ptr >& artists ); virtual void appendArtists( const QList< Tomahawk::artist_ptr >& artists );
virtual void appendAlbums( const QList< Tomahawk::album_ptr >& albums ); virtual void appendAlbums( const QList< Tomahawk::album_ptr >& albums );
@@ -138,7 +139,7 @@ public slots:
virtual void appendArtist( const Tomahawk::artist_ptr& artist ); virtual void appendArtist( const Tomahawk::artist_ptr& artist );
virtual void appendAlbum( const Tomahawk::album_ptr& album ); virtual void appendAlbum( const Tomahawk::album_ptr& album );
virtual void insertQueries( const QList< Tomahawk::query_ptr >& queries, int row = 0 ); virtual void insertQueries( const QList< Tomahawk::query_ptr >& queries, int row = 0, const QList< Tomahawk::PlaybackLog >& logs = QList< Tomahawk::PlaybackLog >() );
virtual void insertArtists( const QList< Tomahawk::artist_ptr >& artists, int row = 0 ); virtual void insertArtists( const QList< Tomahawk::artist_ptr >& artists, int row = 0 );
virtual void insertAlbums( const QList< Tomahawk::album_ptr >& albums, int row = 0 ); virtual void insertAlbums( const QList< Tomahawk::album_ptr >& albums, int row = 0 );
virtual void insertQuery( const Tomahawk::query_ptr& query, int row = 0 ); virtual void insertQuery( const Tomahawk::query_ptr& query, int row = 0 );
@@ -162,13 +163,13 @@ private slots:
void onQueryBecamePlayable( bool playable ); void onQueryBecamePlayable( bool playable );
void onQueryResolved( bool hasResults ); void onQueryResolved( bool hasResults );
void onPlaybackStarted( const Tomahawk::result_ptr& result ); void onPlaybackStarted( const Tomahawk::result_ptr& result );
void onPlaybackStopped(); void onPlaybackStopped();
private: private:
template <typename T> template <typename T>
void insertInternal( const QList< T >& items, int row ); void insertInternal( const QList< T >& items, int row, const QList< Tomahawk::PlaybackLog >& logs = QList< Tomahawk::PlaybackLog >() );
Qt::Alignment columnAlignment( int column ) const; Qt::Alignment columnAlignment( int column ) const;

View File

@@ -214,7 +214,7 @@ PlaylistModel::insertArtists( const QList< Tomahawk::artist_ptr >& artists, int
void void
PlaylistModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int row ) PlaylistModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int row, const QList< Tomahawk::PlaybackLog >& logs )
{ {
QList< Tomahawk::plentry_ptr > entries; QList< Tomahawk::plentry_ptr > entries;
foreach ( const query_ptr& query, queries ) foreach ( const query_ptr& query, queries )
@@ -224,7 +224,7 @@ PlaylistModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int r
plentry_ptr entry = plentry_ptr( new PlaylistEntry() ); plentry_ptr entry = plentry_ptr( new PlaylistEntry() );
entry->setDuration( query->displayQuery()->duration() ); entry->setDuration( query->track()->duration() );
entry->setLastmodified( 0 ); entry->setLastmodified( 0 );
QString annotation = ""; QString annotation = "";
if ( !query->property( "annotation" ).toString().isEmpty() ) if ( !query->property( "annotation" ).toString().isEmpty() )
@@ -237,12 +237,12 @@ PlaylistModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int r
entries << entry; entries << entry;
} }
insertEntries( entries, row ); insertEntries( entries, row, logs );
} }
void void
PlaylistModel::insertEntries( const QList< Tomahawk::plentry_ptr >& entries, int row ) PlaylistModel::insertEntries( const QList< Tomahawk::plentry_ptr >& entries, int row, const QList< Tomahawk::PlaybackLog >& logs )
{ {
if ( !entries.count() ) if ( !entries.count() )
{ {
@@ -271,6 +271,10 @@ PlaylistModel::insertEntries( const QList< Tomahawk::plentry_ptr >& entries, int
{ {
plitem = new PlayableItem( entry, rootItem(), row + i ); plitem = new PlayableItem( entry, rootItem(), row + i );
plitem->index = createIndex( row + i, 0, plitem ); plitem->index = createIndex( row + i, 0, plitem );
if ( logs.count() > i )
plitem->setPlaybackLog( logs.at( i ) );
i++; i++;
if ( entry->query()->id() == currentItemUuid() ) if ( entry->query()->id() == currentItemUuid() )
@@ -434,7 +438,12 @@ void
PlaylistModel::endPlaylistChanges() PlaylistModel::endPlaylistChanges()
{ {
if ( m_playlist.isNull() || !m_playlist->author()->isLocal() ) if ( m_playlist.isNull() || !m_playlist->author()->isLocal() )
{
m_savedInsertPos = -1;
m_savedInsertTracks.clear();
m_savedRemoveTracks.clear();
return; return;
}
if ( m_changesOngoing ) if ( m_changesOngoing )
{ {

View File

@@ -67,8 +67,8 @@ public slots:
virtual void insertAlbums( const QList< Tomahawk::album_ptr >& album, int row = 0 ); virtual void insertAlbums( const QList< Tomahawk::album_ptr >& album, int row = 0 );
virtual void insertArtists( const QList< Tomahawk::artist_ptr >& artist, int row = 0 ); virtual void insertArtists( const QList< Tomahawk::artist_ptr >& artist, int row = 0 );
virtual void insertQueries( const QList< Tomahawk::query_ptr >& queries, int row = 0 ); virtual void insertQueries( const QList< Tomahawk::query_ptr >& queries, int row = 0, const QList< Tomahawk::PlaybackLog >& logs = QList< Tomahawk::PlaybackLog >() );
virtual void insertEntries( const QList< Tomahawk::plentry_ptr >& entries, int row = 0 ); virtual void insertEntries( const QList< Tomahawk::plentry_ptr >& entries, int row = 0, const QList< Tomahawk::PlaybackLog >& logs = QList< Tomahawk::PlaybackLog >() );
virtual void removeIndex( const QModelIndex& index, bool moreToCome = false ); virtual void removeIndex( const QModelIndex& index, bool moreToCome = false );

View File

@@ -58,8 +58,8 @@ RecentlyPlayedModel::loadHistory()
DatabaseCommand_PlaybackHistory* cmd = new DatabaseCommand_PlaybackHistory( m_source ); DatabaseCommand_PlaybackHistory* cmd = new DatabaseCommand_PlaybackHistory( m_source );
cmd->setLimit( m_limit ); cmd->setLimit( m_limit );
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), connect( cmd, SIGNAL( tracks( QList<Tomahawk::track_ptr>, QList<Tomahawk::PlaybackLog> ) ),
SLOT( appendQueries( QList<Tomahawk::query_ptr> ) ), Qt::QueuedConnection ); SLOT( appendTracks( QList<Tomahawk::track_ptr>, QList<Tomahawk::PlaybackLog> ) ), Qt::QueuedConnection );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
} }
@@ -101,25 +101,24 @@ RecentlyPlayedModel::setSource( const Tomahawk::source_ptr& source )
void void
RecentlyPlayedModel::onSourceAdded( const Tomahawk::source_ptr& source ) RecentlyPlayedModel::onSourceAdded( const Tomahawk::source_ptr& source )
{ {
connect( source.data(), SIGNAL( playbackFinished( Tomahawk::query_ptr ) ), SLOT( onPlaybackFinished( Tomahawk::query_ptr ) ), Qt::UniqueConnection ); connect( source.data(), SIGNAL( playbackFinished( Tomahawk::track_ptr, unsigned int, unsigned int ) ), SLOT( onPlaybackFinished( Tomahawk::track_ptr, unsigned int, unsigned int ) ), Qt::UniqueConnection );
} }
void void
RecentlyPlayedModel::onPlaybackFinished( const Tomahawk::query_ptr& query ) RecentlyPlayedModel::onPlaybackFinished( const Tomahawk::track_ptr& track, unsigned int playtime, unsigned int secsPlayed )
{ {
int count = trackCount(); int count = trackCount();
unsigned int playtime = query->playedBy().second;
if ( count ) if ( count )
{ {
PlayableItem* oldestItem = itemFromIndex( index( count - 1, 0, QModelIndex() ) ); PlayableItem* oldestItem = itemFromIndex( index( count - 1, 0, QModelIndex() ) );
if ( oldestItem->query()->playedBy().second >= playtime ) if ( oldestItem->playbackLog().timestamp >= playtime )
return; return;
PlayableItem* youngestItem = itemFromIndex( index( 0, 0, QModelIndex() ) ); PlayableItem* youngestItem = itemFromIndex( index( 0, 0, QModelIndex() ) );
if ( youngestItem->query()->playedBy().second <= playtime ) if ( youngestItem->playbackLog().timestamp <= playtime )
insertQuery( query, 0 ); insertQuery( track->toQuery(), 0 );
else else
{ {
for ( int i = 0; i < count - 1; i++ ) for ( int i = 0; i < count - 1; i++ )
@@ -127,16 +126,16 @@ RecentlyPlayedModel::onPlaybackFinished( const Tomahawk::query_ptr& query )
PlayableItem* item1 = itemFromIndex( index( i, 0, QModelIndex() ) ); PlayableItem* item1 = itemFromIndex( index( i, 0, QModelIndex() ) );
PlayableItem* item2 = itemFromIndex( index( i + 1, 0, QModelIndex() ) ); PlayableItem* item2 = itemFromIndex( index( i + 1, 0, QModelIndex() ) );
if ( item1->query()->playedBy().second >= playtime && item2->query()->playedBy().second <= playtime ) if ( item1->playbackLog().timestamp >= playtime && item2->playbackLog().timestamp <= playtime )
{ {
insertQuery( query, i + 1 ); insertQuery( track->toQuery(), i + 1 );
break; break;
} }
} }
} }
} }
else else
insertQuery( query, 0 ); insertQuery( track->toQuery(), 0 );
if ( trackCount() > (int)m_limit ) if ( trackCount() > (int)m_limit )
remove( m_limit ); remove( m_limit );

View File

@@ -47,7 +47,7 @@ private slots:
void onSourcesReady(); void onSourcesReady();
void onSourceAdded( const Tomahawk::source_ptr& source ); void onSourceAdded( const Tomahawk::source_ptr& source );
void onPlaybackFinished( const Tomahawk::query_ptr& query ); void onPlaybackFinished( const Tomahawk::track_ptr& track, unsigned int playtime, unsigned int secsPlayed );
void loadHistory(); void loadHistory();
private: private: