[gnome-music/wip/mschraal/tracker-detection: 6/7] trackerwrapper: Make tracker-available an enum



commit c6207a343c839ee5f3b6ca2f07f8912f97a37bdd
Author: Marinus Schraal <mschraal gnome org>
Date:   Tue Jul 23 23:01:10 2019 +0200

    trackerwrapper: Make tracker-available an enum
    
    Add TrackerState enum to make it possible to indicate that Tracker is outdated
    with the tracker-available property.

 gnomemusic/coregrilo.py      | 14 ++++++++++----
 gnomemusic/trackerwrapper.py | 35 +++++++++++++++++------------------
 gnomemusic/window.py         |  5 ++++-
 3 files changed, 31 insertions(+), 23 deletions(-)
---
diff --git a/gnomemusic/coregrilo.py b/gnomemusic/coregrilo.py
index a3e2cf6e..ee2448c4 100644
--- a/gnomemusic/coregrilo.py
+++ b/gnomemusic/coregrilo.py
@@ -29,7 +29,7 @@ from gi.repository import Grl, GLib, GObject
 # from gnomemusic.grilowrappers.grldleynawrapper import GrlDLeynaWrapper
 from gnomemusic.grilowrappers.grlsearchwrapper import GrlSearchWrapper
 from gnomemusic.grilowrappers.grltrackerwrapper import GrlTrackerWrapper
-from gnomemusic.trackerwrapper import TrackerWrapper
+from gnomemusic.trackerwrapper import TrackerState, TrackerWrapper
 
 
 class CoreGrilo(GObject.GObject):
@@ -46,7 +46,7 @@ class CoreGrilo(GObject.GObject):
     _theaudiodb_api_key = "195003"
 
     cover_sources = GObject.Property(type=bool, default=False)
-    tracker_available = GObject.Property(type=bool, default=False)
+    tracker_available = GObject.Property(type=int)
 
     def __repr__(self):
         return "<CoreGrilo>"
@@ -62,6 +62,10 @@ class CoreGrilo(GObject.GObject):
         self._wrappers = {}
 
         self._tracker_wrapper = TrackerWrapper()
+        self._tracker_wrapper.bind_property(
+            "tracker-available", self, "tracker-available",
+            GObject.BindingFlags.SYNC_CREATE)
+
         self._tracker_wrapper.connect(
             "notify::tracker-available", self._on_tracker_available_changed)
 
@@ -78,8 +82,9 @@ class CoreGrilo(GObject.GObject):
         self._registry.load_all_plugins(True)
 
     def _on_tracker_available_changed(self, klass, value):
+        new_state = self._tracker_wrapper.props.tracker_available
         # FIXME:No removal support yet.
-        if self._tracker_wrapper.props.tracker_available:
+        if new_state == TrackerState.AVAILABLE:
             # FIXME: Look for a better way to just activate the Tracker
             # plugin.
             self._registry.load_all_plugins(True)
@@ -112,9 +117,10 @@ class CoreGrilo(GObject.GObject):
 
         new_wrapper = None
 
+        new_state = self._tracker_wrapper.props.tracker_available
         if (source.props.source_id == "grl-tracker-source"
                 and source.props.source_id not in self._wrappers.keys()
-                and self._tracker_wrapper.props.tracker_available):
+                and new_state == TrackerState.AVAILABLE):
             new_wrapper = GrlTrackerWrapper(
                 source, self._coremodel, self._coreselection, self)
             self._wrappers[source.props.source_id] = new_wrapper
diff --git a/gnomemusic/trackerwrapper.py b/gnomemusic/trackerwrapper.py
index 682f0d47..037ec2e3 100644
--- a/gnomemusic/trackerwrapper.py
+++ b/gnomemusic/trackerwrapper.py
@@ -21,6 +21,7 @@
 # code, but you are not obligated to do so.  If you do not wish to do so,
 # delete this exception statement from your version.
 
+from enum import IntEnum
 import logging
 
 from gi.repository import GLib, GObject, Tracker
@@ -28,6 +29,14 @@ from gi.repository import GLib, GObject, Tracker
 logger = logging.getLogger(__name__)
 
 
+class TrackerState(IntEnum):
+    """Tracker Status
+    """
+    AVAILABLE = 0
+    UNAVAILABLE = 1
+    OUTDATED = 2
+
+
 class TrackerWrapper(GObject.GObject):
     """Create a connection to an instance of Tracker"""
 
@@ -38,6 +47,8 @@ class TrackerWrapper(GObject.GObject):
         super().__init__()
 
         self._tracker = None
+        self._tracker_available = TrackerState.UNAVAILABLE
+
         Tracker.SparqlConnection.get_async(None, self._connection_async_cb)
 
     def _connection_async_cb(self, klass, result):
@@ -63,10 +74,10 @@ class TrackerWrapper(GObject.GObject):
     def _query_version_check(self, klass, result):
         try:
             klass.query_finish(result)
-            self._tracker_available = True
+            self._tracker_available = TrackerState.AVAILABLE
         except GLib.Error as error:
             logger.warning("Error: {}, {}".format(error.domain, error.message))
-            self._tracker_available = False
+            self._tracker_available = TrackerState.OUTDATED
 
         self.notify("tracker-available")
 
@@ -74,7 +85,9 @@ class TrackerWrapper(GObject.GObject):
     def tracker(self):
         return self._tracker
 
-    @GObject.Property(type=bool, default=False)
+    @GObject.Property(
+        type=int, default=TrackerState.UNAVAILABLE,
+        flags=GObject.ParamFlags.READABLE)
     def tracker_available(self):
         """Get Tracker availability.
 
@@ -82,20 +95,6 @@ class TrackerWrapper(GObject.GObject):
         if a query can be performed.
 
         :returns: tracker availability
-        :rtype: bool
+        :rtype: TrackerState
         """
         return self._tracker_available
-
-    @tracker_available.setter
-    def tracker_available(self, value):
-        """Set Tracker availability.
-
-        If a SparqlConnection has not been opened, Tracker availability
-        cannot be set to True.
-
-        :param bool value: new value
-        """
-        if self._tracker is None:
-            self._tracker_available = False
-        else:
-            self._tracker_available = value
diff --git a/gnomemusic/window.py b/gnomemusic/window.py
index 2b51cdee..e518f9e7 100644
--- a/gnomemusic/window.py
+++ b/gnomemusic/window.py
@@ -30,6 +30,7 @@ from gnomemusic.gstplayer import Playback
 from gnomemusic.mediakeys import MediaKeys
 from gnomemusic.player import RepeatMode
 from gnomemusic.search import Search
+from gnomemusic.trackerwrapper import TrackerState
 from gnomemusic.utils import View
 from gnomemusic.views.albumsview import AlbumsView
 from gnomemusic.views.artistsview import ArtistsView
@@ -184,7 +185,9 @@ class Window(Gtk.ApplicationWindow):
         # FIXME: Tracker just checks for TrackerWrapper right now.
         # It should also check for the viability of certain queries to
         # make sure we have a recent version available.
-        if not self._app.props.coremodel._grilo.props.tracker_available:
+        state = self._app.props.coremodel._grilo.props.tracker_available
+        if (state == TrackerState.UNAVAILABLE
+                or state == TrackerState.OUTDATED):
             self.views[View.EMPTY].props.state = EmptyView.State.NO_TRACKER
         elif did_initial_state:
             self.views[View.EMPTY].props.state = EmptyView.State.EMPTY


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