From 882c94110e50e82c993b7d5f23c0f44be8db2d49 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 21 Dec 2019 21:55:24 +0100 Subject: [PATCH] Update temporary metadata when tags are changed --- src/playlist/playlistitem.cpp | 12 ++++++++++++ src/playlist/playlistitem.h | 1 + src/playlist/playlistmanager.cpp | 1 + 3 files changed, 14 insertions(+) diff --git a/src/playlist/playlistitem.cpp b/src/playlist/playlistitem.cpp index 977da22c0..67d9ae3f9 100644 --- a/src/playlist/playlistitem.cpp +++ b/src/playlist/playlistitem.cpp @@ -76,6 +76,18 @@ void PlaylistItem::SetTemporaryMetadata(const Song &metadata) { temp_metadata_ = metadata; } +void PlaylistItem::UpdateTemporaryMetadata(const Song &metadata) { + + Song old_metadata = temp_metadata_; + temp_metadata_ = metadata; + + // Keep samplerate, bitdepth and bitrate from the old metadata if it's not present in the new. + if (temp_metadata_.samplerate() <= 0 && old_metadata.samplerate() > 0) temp_metadata_.set_samplerate(old_metadata.samplerate()); + if (temp_metadata_.bitdepth() <= 0 && old_metadata.bitdepth() > 0) temp_metadata_.set_bitdepth(old_metadata.bitdepth()); + if (temp_metadata_.bitrate() <= 0 && old_metadata.bitrate() > 0) temp_metadata_.set_bitrate(old_metadata.bitrate()); + +} + void PlaylistItem::ClearTemporaryMetadata() { temp_metadata_ = Song(); } diff --git a/src/playlist/playlistitem.h b/src/playlist/playlistitem.h index 1e1a03ad3..9d607ada5 100644 --- a/src/playlist/playlistitem.h +++ b/src/playlist/playlistitem.h @@ -79,6 +79,7 @@ class PlaylistItem : public std::enable_shared_from_this { virtual QUrl Url() const = 0; void SetTemporaryMetadata(const Song &metadata); + void UpdateTemporaryMetadata(const Song &metadata); void ClearTemporaryMetadata(); bool HasTemporaryMetadata() const { return temp_metadata_.is_valid(); } diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index 0b4836fc9..7cf2e409e 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -469,6 +469,7 @@ void PlaylistManager::SongsDiscovered(const SongList &songs) { for (const PlaylistItemPtr item : items) { if (item->Metadata().directory_id() != song.directory_id()) continue; static_cast(item.get())->SetMetadata(song); + item->UpdateTemporaryMetadata(song); data.p->ItemChanged(item); } }