[gnome-music/wip/jfelder/grilo-misc-cleanups: 1/7] grilo: Factor out songs_available logic to TrackerWrapper
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/grilo-misc-cleanups: 1/7] grilo: Factor out songs_available logic to TrackerWrapper
- Date: Thu, 2 May 2019 13:39:08 +0000 (UTC)
commit 545608928905864315766c7e9d9b1f614e8e81ac
Author: Jean Felder <jfelder src gnome org>
Date: Wed Apr 3 12:04:35 2019 -0300
grilo: Factor out songs_available logic to TrackerWrapper
This allows to move all direct tracker usage to the same class.
Related: #166
gnomemusic/grilo.py | 36 +------------------------------
gnomemusic/trackerwrapper.py | 51 ++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 50 insertions(+), 37 deletions(-)
---
diff --git a/gnomemusic/grilo.py b/gnomemusic/grilo.py
index 6a90dec7..a424f45d 100644
--- a/gnomemusic/grilo.py
+++ b/gnomemusic/grilo.py
@@ -129,7 +129,6 @@ class Grilo(GObject.GObject):
self.tracker_sparql = self._tracker_wrapper.props.tracker
self._tracker_wrapper.bind_property(
"tracker-available", self, "tracker-available",
- GObject.BindingFlags.BIDIRECTIONAL |
GObject.BindingFlags.SYNC_CREATE)
self._find_sources()
@@ -485,42 +484,9 @@ class Grilo(GObject.GObject):
availability of songs.
:param callback: Function to call on result
"""
- def cursor_next_cb(conn, res, data):
- try:
- has_next = conn.next_finish(res)
- except GLib.Error as err:
- logger.warning("Error: {}, {}".format(err.__class__, err))
- callback(False)
- return
-
- if has_next:
- count = conn.get_integer(0)
-
- if count > 0:
- callback(True)
- return
-
- callback(False)
-
- def songs_query_cb(conn, res, data):
- try:
- cursor = conn.query_finish(res)
- except GLib.Error as err:
- logger.warning("Error: {}, {}".format(err.__class__, err))
- self.props.tracker_available = False
- callback(False)
- return
-
- cursor.next_async(None, cursor_next_cb, None)
-
# TODO: currently just checks tracker, should work with any
# queryable supported Grilo source.
- if not self.props.tracker_available:
- callback(False)
- return
-
- self.tracker_sparql.query_async(
- Query.all_songs_count(), None, songs_query_cb, None)
+ self._tracker_wrapper.local_songs_available(callback)
grilo = Grilo()
diff --git a/gnomemusic/trackerwrapper.py b/gnomemusic/trackerwrapper.py
index 38a1d14c..ddc8d620 100644
--- a/gnomemusic/trackerwrapper.py
+++ b/gnomemusic/trackerwrapper.py
@@ -23,7 +23,10 @@
import logging
-from gi.repository import GObject, Tracker
+from gi.repository import GLib, GObject, Tracker
+
+from gnomemusic import log
+from gnomemusic.query import Query
logger = logging.getLogger(__name__)
@@ -49,7 +52,8 @@ class TrackerWrapper(GObject.GObject):
def tracker(self):
return self._tracker
- @GObject.Property(type=bool, default=False)
+ @GObject.Property(
+ type=bool, default=False, flags=GObject.ParamFlags.READABLE)
def tracker_available(self):
"""Get Tracker availability.
@@ -74,3 +78,46 @@ class TrackerWrapper(GObject.GObject):
self._tracker_available = False
else:
self._tracker_available = value
+
+ @log
+ def local_songs_available(self, callback):
+ """Checks if there are any local songs available.
+
+ Calls a callback function with True or False depending on the
+ availability of songs.
+ :param callback: Function to call on result
+ """
+ def cursor_next_cb(conn, res, data):
+ try:
+ has_next = conn.next_finish(res)
+ except GLib.Error as err:
+ logger.warning("Error: {}, {}".format(err.__class__, err))
+ callback(False)
+ return
+
+ if has_next:
+ count = conn.get_integer(0)
+
+ if count > 0:
+ callback(True)
+ return
+
+ callback(False)
+
+ def songs_query_cb(conn, res, data):
+ try:
+ cursor = conn.query_finish(res)
+ except GLib.Error as err:
+ logger.warning("Error: {}, {}".format(err.__class__, err))
+ self.props.tracker_available = False
+ callback(False)
+ return
+
+ cursor.next_async(None, cursor_next_cb, None)
+
+ if not self.props.tracker_available:
+ callback(False)
+ return
+
+ self._tracker.query_async(
+ Query.all_songs_count(), None, songs_query_cb, None)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]