diff --git a/src/playlist/playlistitem.cpp b/src/playlist/playlistitem.cpp index 977da22c..67d9ae3f 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 1e1a03ad..9d607ada 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 0b4836fc..7cf2e409 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); } }