From 04baa9ec0fb851ea04c8c61a67c191d09a88e9a0 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 12 Nov 2019 19:08:42 +0100 Subject: [PATCH] Remove album from pixmap cache when song is removed from library model --- src/library/librarymodel.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/library/librarymodel.cpp b/src/library/librarymodel.cpp index 6e7dd0461..23083cf9e 100644 --- a/src/library/librarymodel.cpp +++ b/src/library/librarymodel.cpp @@ -403,7 +403,25 @@ void LibraryModel::SongsDeleted(const SongList& songs) { if (node->parent != root_) parents << node->parent; - beginRemoveRows(ItemToIndex(node->parent), node->row, node->row); + QModelIndex idx = ItemToIndex(node->parent); + + // Remove from pixmap cache + const QString cache_key = AlbumIconPixmapCacheKey(idx); + QPixmapCache::remove(cache_key); + icon_cache_->remove(QUrl(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); song_nodes_.remove(song.id()); endRemoveRows(); @@ -783,6 +801,9 @@ void LibraryModel::BeginReset() { container_nodes_[2].clear(); divider_nodes_.clear(); pending_art_.clear(); + pending_cache_keys_.clear(); + QPixmapCache::clear(); + icon_cache_->clear(); smart_playlist_node_ = nullptr; root_ = new LibraryItem(this);