[gnome-music/wip/mschraal/tracker-changed-signal: 1/3] grltrackerwrapper: Changed can be added to Music



commit 2b3e3de3a0d9808deb1ddc7a2f7a6fd1e9b2a5fe
Author: Marinus Schraal <mschraal gnome org>
Date:   Tue Jul 16 14:25:09 2019 +0200

    grltrackerwrapper: Changed can be added to Music
    
    The indexed paths by Tracker do not necessarily match the indexed paths
    by Music. If this is the case a CHANGED signal of Tracker may mean a
    ADDED signal to us.
    
    Lump together CHANGED and ADDED handling. If a Grl.Media id does not
    exist in the _hash, treat it as an addition. Otherwise treat it as
    changed.

 gnomemusic/grilowrappers/grltrackerwrapper.py | 48 ++++++++-------------------
 1 file changed, 14 insertions(+), 34 deletions(-)
---
diff --git a/gnomemusic/grilowrappers/grltrackerwrapper.py b/gnomemusic/grilowrappers/grltrackerwrapper.py
index 7242a32a..f439b67a 100644
--- a/gnomemusic/grilowrappers/grltrackerwrapper.py
+++ b/gnomemusic/grilowrappers/grltrackerwrapper.py
@@ -134,14 +134,15 @@ class GrlTrackerWrapper(GObject.GObject):
 
     def _on_content_changed(self, source, medias, change_type, loc_unknown):
         for media in medias:
-            if change_type == Grl.SourceChangeType.ADDED:
-                print("ADDED", media.get_id())
-                self._add_media(media)
+            # The Tracker indexed paths may differ from Music's paths.
+            # In that case Tracker will report it as 'changed', while
+            # it means 'added' to Music.
+            if (change_type == Grl.SourceChangeType.CHANGED
+                    or change_type == Grl.SourceChangeType.ADDED):
+                print("ADDED/CHANGED", media.get_id())
+                self._changed_media(media)
                 self._check_album_change(media)
                 self._check_artist_change(media)
-            elif change_type == Grl.SourceChangeType.CHANGED:
-                print("CHANGED", media.get_id())
-                self._changed_media(media)
             elif change_type == Grl.SourceChangeType.REMOVED:
                 print("REMOVED", media.get_id())
                 self._remove_media(media)
@@ -300,33 +301,6 @@ class GrlTrackerWrapper(GObject.GObject):
 
         return query
 
-    def _add_media(self, media):
-
-        def _add_media(source, op_id, media, user_data, error):
-            if error:
-                print("ERROR", error)
-                return
-
-            if not media:
-                return
-
-            # FIXME: Figure out why we get double additions.
-            if media.get_id() in self._hash.keys():
-                print("ALREADY ADDED")
-                return
-
-            song = CoreSong(media, self._coreselection, self._grilo)
-            self._model.append(song)
-            self._hash[media.get_id()] = song
-
-            print("UPDATE ID", media.get_id(), media.get_title())
-
-        options = self._fast_options.copy()
-
-        self._source.query(
-            self._song_media_query(media.get_id()), self.METADATA_KEYS,
-            options, _add_media)
-
     def _changed_media(self, media):
 
         def _update_changed_media(source, op_id, media, user_data, error):
@@ -337,7 +311,13 @@ class GrlTrackerWrapper(GObject.GObject):
             if not media:
                 return
 
-            self._hash[media.get_id()].update(media)
+            if media.get_id() not in self._hash:
+                print("Media not in hash", media.get_id())
+                song = CoreSong(media, self._coreselection, self._grilo)
+                self._model.append(song)
+                self._hash[media.get_id()] = song
+            else:
+                self._hash[media.get_id()].update(media)
 
         options = self._fast_options.copy()
 


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