[gnome-music/wip/mschraal/tracker-detection: 1/2] trackerwrapper: Make tracker-available an enum
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/mschraal/tracker-detection: 1/2] trackerwrapper: Make tracker-available an enum
- Date: Tue, 23 Jul 2019 22:07:09 +0000 (UTC)
commit a6d545f0e89d94b2847f7a5ec603eed499f18815
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]