diff --git a/src/collection/collectionmodel.cpp b/src/collection/collectionmodel.cpp index 73fb32d37..483c9980a 100644 --- a/src/collection/collectionmodel.cpp +++ b/src/collection/collectionmodel.cpp @@ -125,6 +125,8 @@ CollectionModel::CollectionModel(CollectionBackend *backend, Application *app, Q backend_->UpdateTotalArtistCountAsync(); backend_->UpdateTotalAlbumCountAsync(); + QPixmapCache::setCacheLimit(61440); + } CollectionModel::~CollectionModel() { delete root_; } @@ -419,9 +421,21 @@ void CollectionModel::SongsDeleted(const SongList &songs) { if (node->parent != root_) parents << node->parent; + // Remove from pixmap cache QModelIndex idx = ItemToIndex(node->parent); const QString cache_key = AlbumIconPixmapCacheKey(idx); QPixmapCache::remove(cache_key); + if (pending_cache_keys_.contains(cache_key)) pending_cache_keys_.remove(cache_key); + + // Remove from pending art loading + QMapIterator i(pending_art_); + while (i.hasNext()) { + i.next(); + if (i.value().first == node) { + pending_art_.remove(i.key()); + break; + } + } beginRemoveRows(idx, node->row, node->row); node->parent->Delete(node->row); @@ -460,6 +474,22 @@ void CollectionModel::SongsDeleted(const SongList &songs) { else container_nodes_[node->container_level].remove(node->key); + // Remove from pixmap cache + QModelIndex idx = ItemToIndex(node->parent); + const QString cache_key = AlbumIconPixmapCacheKey(idx); + QPixmapCache::remove(cache_key); + if (pending_cache_keys_.contains(cache_key)) pending_cache_keys_.remove(cache_key); + + // Remove from pending art loading + QMapIterator i(pending_art_); + while (i.hasNext()) { + i.next(); + if (i.value().first == node) { + pending_art_.remove(i.key()); + break; + } + } + // It was empty - delete it beginRemoveRows(ItemToIndex(node->parent), node->row, node->row); node->parent->Delete(node->row); @@ -567,6 +597,8 @@ void CollectionModel::AlbumCoverLoaded(const quint64 id, const QUrl &cover_url, } const QModelIndex idx = ItemToIndex(item); + if (!idx.isValid()) return; + emit dataChanged(idx, idx); } @@ -798,6 +830,8 @@ void CollectionModel::BeginReset() { container_nodes_[2].clear(); divider_nodes_.clear(); pending_art_.clear(); + pending_cache_keys_.clear(); + QPixmapCache::clear(); root_ = new CollectionItem(this); root_->compilation_artist_node_ = nullptr;