From 1f772081fd7b649a185d528aed7508ce0b6bf907 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Mon, 10 Aug 2020 00:32:57 +0200 Subject: [PATCH] Only update temporary metadata when set Fixes #507 --- src/collection/collectionplaylistitem.h | 1 + src/internet/internetplaylistitem.h | 1 + src/playlist/playlist.cpp | 12 ++---------- src/playlist/playlistitem.cpp | 2 ++ src/playlist/playlistitem.h | 1 + src/playlist/playlistmanager.cpp | 2 +- src/playlist/songplaylistitem.h | 5 ++++- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/collection/collectionplaylistitem.h b/src/collection/collectionplaylistitem.h index b6064b3e9..e0f232b0b 100644 --- a/src/collection/collectionplaylistitem.h +++ b/src/collection/collectionplaylistitem.h @@ -40,6 +40,7 @@ class CollectionPlaylistItem : public PlaylistItem { void Reload() override; Song Metadata() const override; + Song OriginalMetadata() const override { return song_; } void SetMetadata(const Song &song) { song_ = song; } QUrl Url() const override; diff --git a/src/internet/internetplaylistitem.h b/src/internet/internetplaylistitem.h index 279685452..c56991a83 100644 --- a/src/internet/internetplaylistitem.h +++ b/src/internet/internetplaylistitem.h @@ -40,6 +40,7 @@ class InternetPlaylistItem : public PlaylistItem { bool InitFromQuery(const SqlRow &query) override; Song Metadata() const override; + Song OriginalMetadata() const override { return metadata_; } QUrl Url() const override; void SetArtManual(const QUrl &cover_url) override; diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 5d2649ce1..57a0f9374 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -406,16 +406,8 @@ void Playlist::ItemReloadComplete(const QPersistentModelIndex &index) { if (index.isValid()) { PlaylistItemPtr item = item_at(index.row()); - if (item) { - - // Update temporary metadata for songs that are not in the collection. - // Songs that are in the collection is updated through the collection watcher/backend in playlist manager. - if (item->Metadata().source() != Song::Source_Collection) { - SongPlaylistItem *song_item = static_cast(item.get()); - if (song_item) { - song_item->UpdateTemporaryMetadata(song_item->DatabaseSongMetadata()); - } - } + if (item && item->HasTemporaryMetadata()) { // Update temporary metadata. + item->UpdateTemporaryMetadata(item->OriginalMetadata()); } emit dataChanged(index, index); diff --git a/src/playlist/playlistitem.cpp b/src/playlist/playlistitem.cpp index 04958ab44..5219a228e 100644 --- a/src/playlist/playlistitem.cpp +++ b/src/playlist/playlistitem.cpp @@ -76,6 +76,8 @@ void PlaylistItem::SetTemporaryMetadata(const Song &metadata) { void PlaylistItem::UpdateTemporaryMetadata(const Song &metadata) { + if (!temp_metadata_.is_valid()) return; + Song old_metadata = temp_metadata_; temp_metadata_ = metadata; diff --git a/src/playlist/playlistitem.h b/src/playlist/playlistitem.h index 075c4984c..7db03484d 100644 --- a/src/playlist/playlistitem.h +++ b/src/playlist/playlistitem.h @@ -73,6 +73,7 @@ class PlaylistItem : public std::enable_shared_from_this { QFuture BackgroundReload(); virtual Song Metadata() const = 0; + virtual Song OriginalMetadata() const = 0; virtual QUrl Url() const = 0; void SetTemporaryMetadata(const Song &metadata); diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index 36b227f28..d5b76a932 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -480,7 +480,7 @@ void PlaylistManager::SongsDiscovered(const SongList &songs) { for (PlaylistItemPtr item : items) { if (item->Metadata().directory_id() != song.directory_id()) continue; static_cast(item.get())->SetMetadata(song); - item->UpdateTemporaryMetadata(song); + if (item->HasTemporaryMetadata()) item->UpdateTemporaryMetadata(song); data.p->ItemChanged(item); } } diff --git a/src/playlist/songplaylistitem.h b/src/playlist/songplaylistitem.h index 2c331cd28..8b0ebebdd 100644 --- a/src/playlist/songplaylistitem.h +++ b/src/playlist/songplaylistitem.h @@ -41,12 +41,15 @@ class SongPlaylistItem : public PlaylistItem { void Reload() override; Song Metadata() const override; + Song OriginalMetadata() const override { return song_; } QUrl Url() const override; - Song DatabaseSongMetadata() const override { return song_; } void SetArtManual(const QUrl &cover_url) override; + protected: + Song DatabaseSongMetadata() const override { return song_; } + private: Song song_; };