From 0f9772e17acfbdb4d9165f40080dfe9a5a222184 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 23 Oct 2010 04:33:47 +0200 Subject: [PATCH] * Reload playlist when a new revision is available. --- src/playlist/collectionflatmodel.cpp | 1 - src/playlist/playlistmodel.cpp | 20 ++++++++++++++++++-- src/playlist/playlistmodel.h | 2 ++ src/playlist/plitem.cpp | 5 ++++- src/playlist/trackmodel.h | 2 +- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/playlist/collectionflatmodel.cpp b/src/playlist/collectionflatmodel.cpp index 9d3592a7b..ae21885f8 100644 --- a/src/playlist/collectionflatmodel.cpp +++ b/src/playlist/collectionflatmodel.cpp @@ -16,7 +16,6 @@ CollectionFlatModel::CollectionFlatModel( QObject* parent ) CollectionFlatModel::~CollectionFlatModel() { - delete m_rootItem; } diff --git a/src/playlist/playlistmodel.cpp b/src/playlist/playlistmodel.cpp index b220f9dd8..2a0a5082c 100644 --- a/src/playlist/playlistmodel.cpp +++ b/src/playlist/playlistmodel.cpp @@ -16,7 +16,6 @@ PlaylistModel::PlaylistModel( QObject* parent ) PlaylistModel::~PlaylistModel() { - delete m_rootItem; } @@ -44,8 +43,16 @@ PlaylistModel::headerData( int section, Qt::Orientation orientation, int role ) void PlaylistModel::loadPlaylist( const Tomahawk::playlist_ptr& playlist ) { + if ( !m_playlist.isNull() ) + disconnect( m_playlist.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), this, SLOT( onRevisionLoaded( Tomahawk::PlaylistRevision ) ) ); + + emit beginRemoveRows( QModelIndex(), 0, rowCount( QModelIndex() ) - 1 ); + delete m_rootItem; + m_rootItem = new PlItem(); + emit endRemoveRows(); + m_playlist = playlist; -// connect( playlist.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), SLOT( onRevisionLoaded( Tomahawk::PlaylistRevision ) ) ); + connect( playlist.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), SLOT( onRevisionLoaded( Tomahawk::PlaylistRevision ) ) ); PlItem* plitem; QList entries = playlist->entries(); @@ -77,3 +84,12 @@ PlaylistModel::onDataChanged() // emit itemSizeChanged( p->index ); emit dataChanged( p->index, p->index.sibling( p->index.row(), columnCount() - 1 ) ); } + + +void +PlaylistModel::onRevisionLoaded( Tomahawk::PlaylistRevision revision ) +{ + qDebug() << Q_FUNC_INFO; + + loadPlaylist( m_playlist ); +} diff --git a/src/playlist/playlistmodel.h b/src/playlist/playlistmodel.h index 99bb1c140..10c133267 100644 --- a/src/playlist/playlistmodel.h +++ b/src/playlist/playlistmodel.h @@ -42,6 +42,8 @@ signals: private slots: void onDataChanged(); + void onRevisionLoaded( Tomahawk::PlaylistRevision revision ); + private: Tomahawk::playlist_ptr m_playlist; }; diff --git a/src/playlist/plitem.cpp b/src/playlist/plitem.cpp index 3b2b4d236..0e98432ad 100644 --- a/src/playlist/plitem.cpp +++ b/src/playlist/plitem.cpp @@ -9,7 +9,10 @@ using namespace Tomahawk; PlItem::~PlItem() { - parent->children.removeOne( this ); + qDeleteAll( children ); + + if ( parent ) + parent->children.removeOne( this ); } diff --git a/src/playlist/trackmodel.h b/src/playlist/trackmodel.h index 5eafc6c55..feae1fc9e 100644 --- a/src/playlist/trackmodel.h +++ b/src/playlist/trackmodel.h @@ -13,7 +13,7 @@ Q_OBJECT public: explicit TrackModel( QObject* parent = 0 ); - ~TrackModel(); + virtual ~TrackModel(); virtual QModelIndex index( int row, int column, const QModelIndex& parent ) const; virtual QModelIndex parent( const QModelIndex& child ) const;