From 72c225b8eef9ccba222045c170cc5b52972e9e47 Mon Sep 17 00:00:00 2001 From: Marinus Schraal Date: Sat, 22 Feb 2020 16:23:24 +0100 Subject: [PATCH] coremodel: Splice playlist model on changes When reacting to the items-changed signal on the current playlist model, all items were removed & added one at a time. This would result in changes possibly stopping the playing playlist, as the playlist could effectively become empty. Instead make the signal handler smarter and splice the changes in one go. --- gnomemusic/coremodel.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/gnomemusic/coremodel.py b/gnomemusic/coremodel.py index 17eb5167..be395d07 100644 --- a/gnomemusic/coremodel.py +++ b/gnomemusic/coremodel.py @@ -232,10 +232,7 @@ class CoreModel(GObject.GObject): return def _on_items_changed(model, position, removed, added): - if removed > 0: - for i in list(range(removed)): - self._playlist_model.remove(position) - + songs_list = [] if added > 0: for i in list(range(added)): coresong = model[position + i] @@ -243,8 +240,6 @@ class CoreModel(GObject.GObject): coresong.props.media, self._coreselection, self.props.grilo) - self._playlist_model.insert(position + i, song) - song.bind_property( "state", coresong, "state", GObject.BindingFlags.SYNC_CREATE) @@ -253,6 +248,10 @@ class CoreModel(GObject.GObject): GObject.BindingFlags.BIDIRECTIONAL | GObject.BindingFlags.SYNC_CREATE) + songs_list.append(song) + + self._playlist_model.splice(position, removed, songs_list) + played_states = [SongWidget.State.PLAYING, SongWidget.State.PLAYED] for song in self._playlist_model: if song.props.state in played_states: -- GitLab