diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 62dcb7cee..4c2493867 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -2057,7 +2057,7 @@ void MainWindow::EditTagDialogAccepted() { // FIXME: This is really lame but we don't know what rows have changed. ui_->playlist->view()->update(); - app_->playlist_manager()->current()->ScheduleSave(); + app_->playlist_manager()->current()->ScheduleSaveAsync(); } diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index b01e2dbcc..0b385d224 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -459,7 +459,7 @@ void Playlist::ItemReloadComplete(const QPersistentModelIndex &idx, const Song & if (metadata_edit) { emit EditingFinished(id_, idx); } - ScheduleSave(); + ScheduleSaveAsync(); } } @@ -1429,7 +1429,18 @@ void Playlist::SetCurrentIsPaused(const bool paused) { } -void Playlist::ScheduleSave() const { +void Playlist::ScheduleSaveAsync() { + + if (QThread::currentThread() == thread()) { + ScheduleSave(); + } + else { + metaObject()->invokeMethod(this, "ScheduleSave", Qt::QueuedConnection); + } + +} + +void Playlist::ScheduleSave() { if (!backend_ || is_loading_) return; @@ -1437,7 +1448,7 @@ void Playlist::ScheduleSave() const { } -void Playlist::Save() const { +void Playlist::Save() { if (!backend_ || is_loading_) return; @@ -2240,7 +2251,7 @@ void Playlist::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult & if (item && item->Metadata() == song && (!item->Metadata().art_manual_is_valid() || (result.type == AlbumCoverLoaderResult::Type_ManuallyUnset && !item->Metadata().has_manually_unset_cover()))) { qLog(Debug) << "Updating art manual for local song" << song.title() << song.album() << song.title() << "to" << result.album_cover.cover_url << "in playlist."; item->SetArtManual(result.album_cover.cover_url); - ScheduleSave(); + ScheduleSaveAsync(); } } diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 4efe8ac7c..da5835145 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -185,8 +185,8 @@ class Playlist : public QAbstractListModel { static bool set_column_value(Song &song, Column column, const QVariant &value); // Persistence - void ScheduleSave() const; void Restore(); + void ScheduleSaveAsync(); // Accessors QSortFilterProxyModel *proxy() const; @@ -383,7 +383,8 @@ class Playlist : public QAbstractListModel { void ItemReloadComplete(const QPersistentModelIndex &idx, const Song &old_metadata, const bool metadata_edit); void ItemsLoaded(); void SongInsertVetoListenerDestroyed(); - void Save() const; + void ScheduleSave(); + void Save(); private: bool is_loading_;