mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-06 06:07:37 +02:00
* Allow to set PlaybackLogs when inserting items to PlayableModel.
This commit is contained in:
@@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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() )
|
||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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 );
|
||||||
@@ -168,7 +169,7 @@ private slots:
|
|||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
@@ -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 )
|
||||||
{
|
{
|
||||||
|
@@ -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 );
|
||||||
|
|
||||||
|
@@ -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 );
|
||||||
|
@@ -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:
|
||||||
|
Reference in New Issue
Block a user