[gnome-music/wip/mschraal/duration-fixes: 1/3] corealbum: Rework duration calculation



commit 783e68a78a3e8fa2531d492821b005a6956f3737
Author: Marinus Schraal <mschraal gnome org>
Date:   Sat Jul 20 02:25:30 2019 +0200

    corealbum: Rework duration calculation
    
    On every list item change in CoreAlbum a new notify signal was added, this
    mistake caused a signal storm after a few changes.
    
    Fixing this bug allowed for more natural duration calculation in CoreAlbum and
    CoreDisc.

 gnomemusic/corealbum.py |  9 +++++++--
 gnomemusic/coredisc.py  | 11 +++--------
 2 files changed, 10 insertions(+), 10 deletions(-)
---
diff --git a/gnomemusic/corealbum.py b/gnomemusic/corealbum.py
index 0301e624..4df16ae1 100644
--- a/gnomemusic/corealbum.py
+++ b/gnomemusic/corealbum.py
@@ -69,12 +69,17 @@ class CoreAlbum(GObject.GObject):
 
         return self._model
 
-    def _on_list_items_changed(self, model, pos, removed, added):
+    def _on_list_items_changed(self, model, position, removed, added):
         with self.freeze_notify():
             for coredisc in model:
-                coredisc.connect("notify::duration", self._on_duration_changed)
                 coredisc.props.selected = self.props.selected
 
+            if added > 0:
+                for i in list(range(added)):
+                    coredisc = model[position + i]
+                    coredisc.connect(
+                            "notify::duration", self._on_duration_changed)
+
     def _on_duration_changed(self, coredisc, duration):
         duration = 0
 
diff --git a/gnomemusic/coredisc.py b/gnomemusic/coredisc.py
index c3139174..f4089830 100644
--- a/gnomemusic/coredisc.py
+++ b/gnomemusic/coredisc.py
@@ -77,16 +77,12 @@ class CoreDisc(GObject.GObject):
 
     def _on_disc_changed(self, model, position, removed, added):
         with self.freeze_notify():
+            duration = 0
             for coresong in model:
                 coresong.props.selected = self._selected
+                duration += coresong.props.duration
 
-    def _update_duration(self):
-        duration = 0
-
-        for coresong in self.props.model:
-            duration += coresong.props.duration
-
-        self.props.duration = duration
+            self.props.duration = duration
 
     def _disc_sort(self, song_a, song_b):
         return song_a.props.track_number - song_b.props.track_number
@@ -116,7 +112,6 @@ class CoreDisc(GObject.GObject):
                     return
                 model_filter.set_filter_func(_filter_func)
                 self._old_album_ids = album_ids
-                self._update_duration()
                 return
 
             album_ids.append(media.get_source() + media.get_id())


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