diff --git a/src/core/song.cpp b/src/core/song.cpp index 7c749d57c..371177ae7 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -367,6 +367,7 @@ bool Song::save_embedded_cover_supported(const FileType filetype) { const QUrl &Song::stream_url() const { return d->stream_url_; } const QUrl &Song::effective_stream_url() const { return !d->stream_url_.isEmpty() && d->stream_url_.isValid() ? d->stream_url_ : d->url_; } const QImage &Song::image() const { return d->image_; } +bool Song::init_from_file() const { return d->init_from_file_; } const QString &Song::cue_path() const { return d->cue_path_; } bool Song::has_cue() const { return !d->cue_path_.isEmpty(); } diff --git a/src/core/song.h b/src/core/song.h index eef8f69d5..e361849b5 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -294,6 +294,7 @@ class Song { const QUrl &stream_url() const; const QUrl &effective_stream_url() const; const QImage &image() const; + bool init_from_file() const; // Pretty accessors QString PrettyTitle() const; diff --git a/src/core/songloader.cpp b/src/core/songloader.cpp index 3a59a3b45..37e260ba3 100644 --- a/src/core/songloader.cpp +++ b/src/core/songloader.cpp @@ -339,7 +339,7 @@ void SongLoader::EffectiveSongLoad(Song *song) { if (!song) return; - if (song->filetype() != Song::FileType_Unknown) { + if (song->init_from_file() && song->filetype() != Song::FileType_Unknown) { // Maybe we loaded the metadata already, for example from a cuesheet. return; } diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index f9cd90511..d99d515db 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -1190,7 +1190,7 @@ void Playlist::UpdateItems(SongList songs) { while (it.hasNext()) { const Song &song = it.next(); const PlaylistItemPtr &item = items_[i]; - if (item->Metadata().url() == song.url() && (item->Metadata().filetype() == Song::FileType_Unknown || item->Metadata().filetype() == Song::FileType_Stream || item->Metadata().filetype() == Song::FileType_CDDA)) { + if (item->Metadata().url() == song.url() && (item->Metadata().filetype() == Song::FileType_Unknown || item->Metadata().filetype() == Song::FileType_Stream || item->Metadata().filetype() == Song::FileType_CDDA || !item->Metadata().init_from_file())) { PlaylistItemPtr new_item; if (song.is_collection_song()) { new_item = std::make_shared(song);