diff --git a/src/libtomahawk/playlist/collectionflatmodel.cpp b/src/libtomahawk/playlist/collectionflatmodel.cpp index 0d6b92fdf..02d56a351 100644 --- a/src/libtomahawk/playlist/collectionflatmodel.cpp +++ b/src/libtomahawk/playlist/collectionflatmodel.cpp @@ -24,27 +24,6 @@ CollectionFlatModel::~CollectionFlatModel() } -int -CollectionFlatModel::columnCount( const QModelIndex& parent ) const -{ - return TrackModel::columnCount( parent ); -} - - -QVariant -CollectionFlatModel::data( const QModelIndex& index, int role ) const -{ - return TrackModel::data( index, role ); -} - - -QVariant -CollectionFlatModel::headerData( int section, Qt::Orientation orientation, int role ) const -{ - return TrackModel::headerData( section, orientation, role ); -} - - void CollectionFlatModel::addCollections( const QList< collection_ptr >& collections ) { @@ -53,7 +32,7 @@ CollectionFlatModel::addCollections( const QList< collection_ptr >& collections { addCollection( col ); } - + // we are waiting for some to load if( !m_loadingCollections.isEmpty() ) emit loadingStarted(); @@ -72,17 +51,19 @@ CollectionFlatModel::addCollection( const collection_ptr& collection, bool sendN connect( collection.data(), SIGNAL( tracksRemoved( QList ) ), SLOT( onTracksRemoved( QList ) ) ); + if( sendNotifications ) + emit loadingStarted(); + if ( collection->isLoaded() ) + { onTracksAdded( collection->tracks() ); + } else { collection->tracks(); // data will arrive via signals - m_loadingCollections << collection.data(); - if( sendNotifications ) - emit loadingStarted(); } - + if ( collection->source()->isLocal() ) setTitle( tr( "Your Collection" ) ); else @@ -190,8 +171,6 @@ CollectionFlatModel::onTracksAdded( const QList& tracks ) // we are keeping track and are called as a slot m_loadingCollections.removeAll( qobject_cast< Collection* >( sender() ) ); } - if( m_loadingCollections.isEmpty() ) - emit loadingFinished(); bool kickOff = m_tracksToAdd.isEmpty(); m_tracksToAdd << tracks; @@ -206,7 +185,7 @@ CollectionFlatModel::onTracksAdded( const QList& tracks ) void CollectionFlatModel::processTracksToAdd() { - int chunkSize = 500000; + int chunkSize = 5000; int maxc = qMin( chunkSize, m_tracksToAdd.count() ); int c = rowCount( QModelIndex() ); @@ -218,7 +197,6 @@ CollectionFlatModel::processTracksToAdd() for( int i = 0; i < maxc; ++i ) { - plitem = new PlItem( *iter, m_rootItem ); plitem->index = createIndex( m_rootItem->children.count() - 1, 0, plitem ); @@ -229,6 +207,9 @@ CollectionFlatModel::processTracksToAdd() m_tracksToAdd.erase( m_tracksToAdd.begin(), iter ); + if ( m_tracksToAdd.isEmpty() && m_loadingCollections.isEmpty() ) + emit loadingFinished(); + //endResetModel(); emit endInsertRows(); qDebug() << Q_FUNC_INFO << rowCount( QModelIndex() ); @@ -278,7 +259,7 @@ CollectionFlatModel::onDataChanged() // emit itemSizeChanged( p->index ); if ( p ) - emit dataChanged( p->index, p->index.sibling( p->index.row(), columnCount() - 1 ) ); + emit dataChanged( p->index, p->index.sibling( p->index.row(), columnCount( QModelIndex() ) - 1 ) ); } diff --git a/src/libtomahawk/playlist/collectionflatmodel.h b/src/libtomahawk/playlist/collectionflatmodel.h index 5c1ffeb34..c2cf83d38 100644 --- a/src/libtomahawk/playlist/collectionflatmodel.h +++ b/src/libtomahawk/playlist/collectionflatmodel.h @@ -27,13 +27,8 @@ public: explicit CollectionFlatModel( QObject* parent = 0 ); ~CollectionFlatModel(); - int columnCount( const QModelIndex& parent = QModelIndex() ) const; - virtual int trackCount() const { return rowCount( QModelIndex() ) + m_tracksToAdd.count(); } - QVariant data( const QModelIndex& index, int role ) const; - QVariant headerData( int section, Qt::Orientation orientation, int role ) const; - void addCollections( const QList< Tomahawk::collection_ptr >& collections ); void addCollection( const Tomahawk::collection_ptr& collection, bool sendNotifications = true ); diff --git a/src/libtomahawk/playlist/playlistmanager.cpp b/src/libtomahawk/playlist/playlistmanager.cpp index faf1308e4..8e43d9c49 100644 --- a/src/libtomahawk/playlist/playlistmanager.cpp +++ b/src/libtomahawk/playlist/playlistmanager.cpp @@ -56,7 +56,7 @@ PlaylistManager::PlaylistManager( QObject* parent ) m_topbar = new TopBar(); m_infobar = new InfoBar(); m_stack = new QStackedWidget(); - + QFrame* line = new QFrame(); line->setFrameStyle( QFrame::HLine ); line->setStyleSheet( "border: 1px solid gray;" ); @@ -86,13 +86,14 @@ PlaylistManager::PlaylistManager( QObject* parent ) m_superCollectionView->setModel( m_superCollectionFlatModel ); m_superCollectionView->setFrameShape( QFrame::NoFrame ); m_superCollectionView->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + m_superCollectionView->proxyModel()->setShowOfflineResults( false ); m_superAlbumView = new AlbumView(); m_superAlbumModel = new AlbumModel( m_superAlbumView ); m_superAlbumView->setModel( m_superAlbumModel ); m_superAlbumView->setFrameShape( QFrame::NoFrame ); m_superAlbumView->setAttribute( Qt::WA_MacShowFocusRect, 0 ); - + m_stack->setContentsMargins( 0, 0, 0, 0 ); m_widget->setContentsMargins( 0, 0, 0, 0 ); m_widget->layout()->setContentsMargins( 0, 0, 0, 0 ); @@ -106,10 +107,10 @@ PlaylistManager::PlaylistManager( QObject* parent ) connect( m_topbar, SIGNAL( flatMode() ), SLOT( setTableMode() ) ); - + connect( m_topbar, SIGNAL( artistMode() ), SLOT( setTreeMode() ) ); - + connect( m_topbar, SIGNAL( albumMode() ), SLOT( setAlbumMode() ) ); } diff --git a/src/libtomahawk/playlist/trackmodel.h b/src/libtomahawk/playlist/trackmodel.h index 0cccabab7..45a3533ff 100644 --- a/src/libtomahawk/playlist/trackmodel.h +++ b/src/libtomahawk/playlist/trackmodel.h @@ -72,6 +72,7 @@ signals: void loadingStarted(); void loadingFinished(); + public slots: virtual void setCurrentItem( const QModelIndex& index ); diff --git a/src/libtomahawk/playlist/trackproxymodel.cpp b/src/libtomahawk/playlist/trackproxymodel.cpp index 86ec2376f..46012bfb5 100644 --- a/src/libtomahawk/playlist/trackproxymodel.cpp +++ b/src/libtomahawk/playlist/trackproxymodel.cpp @@ -14,6 +14,7 @@ TrackProxyModel::TrackProxyModel( QObject* parent ) , m_model( 0 ) , m_repeatMode( PlaylistInterface::NoRepeat ) , m_shuffled( false ) + , m_showOfflineResults( true ) { qsrand( QTime( 0, 0, 0 ).secsTo( QTime::currentTime() ) ); @@ -146,8 +147,8 @@ TrackProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParen if ( q->numResults() ) r = q->results().first(); -// if ( !r.isNull() && !r->collection()->source()->isOnline() ) -// return false; + if ( !m_showOfflineResults && !r.isNull() && !r->collection()->source()->isOnline() ) + return false; if ( filterRegExp().isEmpty() ) return true; diff --git a/src/libtomahawk/playlist/trackproxymodel.h b/src/libtomahawk/playlist/trackproxymodel.h index 7faab3086..5ced4b802 100644 --- a/src/libtomahawk/playlist/trackproxymodel.h +++ b/src/libtomahawk/playlist/trackproxymodel.h @@ -38,6 +38,9 @@ public: virtual PlaylistInterface::RepeatMode repeatMode() const { return m_repeatMode; } virtual bool shuffled() const { return m_shuffled; } + bool showOfflineResults() const { return m_showOfflineResults; } + void setShowOfflineResults( bool b ) { m_showOfflineResults = b; } + PlItem* itemFromIndex( const QModelIndex& index ) const { return sourceModel()->itemFromIndex( index ); } signals: @@ -60,6 +63,7 @@ private: TrackModel* m_model; RepeatMode m_repeatMode; bool m_shuffled; + bool m_showOfflineResults; }; #endif // TRACKPROXYMODEL_H