[gnome-music/wip/mschraal/playlists-fixes: 1/5] coremodel: Splice playlist model on changes



commit 72c225b8eef9ccba222045c170cc5b52972e9e47
Author: Marinus Schraal <mschraal gnome org>
Date:   Sat Feb 22 16:23:24 2020 +0100

    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:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]