[gnome-music/wip/carlosg/tracker3: 12/17] trackerwrapper: Make favorite property updates go through tracker
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/carlosg/tracker3: 12/17] trackerwrapper: Make favorite property updates go through tracker
- Date: Sun, 14 Jun 2020 17:52:01 +0000 (UTC)
commit 532d19c4ac71deaa0c6bf8a6729f17581de0076a
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Jun 14 15:50:51 2020 +0200
trackerwrapper: Make favorite property updates go through tracker
This property cannot be written back via grilo with the Tracker3 ownership
changes. This should be stored in the local store, thus it's better to
handle it via the trackerwrapper writeback methods.
gnomemusic/coresong.py | 4 ++--
gnomemusic/trackerwrapper.py | 31 +++++++++++++++++++++++++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
---
diff --git a/gnomemusic/coresong.py b/gnomemusic/coresong.py
index 56535e3b..cc3ebef9 100644
--- a/gnomemusic/coresong.py
+++ b/gnomemusic/coresong.py
@@ -101,8 +101,8 @@ class CoreSong(GObject.GObject):
return
self.props.media.set_favourite(self._favorite)
- self._coregrilo.writeback(
- self.props.media, [Grl.METADATA_KEY_FAVOURITE])
+ self._coregrilo.writeback_tracker(
+ self.props.media, deque(["favorite"]))
@GObject.Property(type=bool, default=False)
def selected(self):
diff --git a/gnomemusic/trackerwrapper.py b/gnomemusic/trackerwrapper.py
index 15fd49f3..29e86acf 100644
--- a/gnomemusic/trackerwrapper.py
+++ b/gnomemusic/trackerwrapper.py
@@ -565,6 +565,35 @@ class TrackerWrapper(GObject.GObject):
self._tracker.query_async(
query_album_exists, None, _album_exists_cb, None)
+ def _update_favorite(self, media):
+ if (media.get_favourite()):
+ update = """
+ INSERT DATA {
+ <%(urn)s> a nmm:MusicPiece ;
+ nao:hasTag nao:predefined-tag-favorite .
+ }
+ """.replace("\n", "").strip() % {
+ "urn": media.get_id(),
+ }
+ else:
+ update = """
+ DELETE DATA {
+ <%(urn)s> nao:hasTag nao:predefined-tag-favorite .
+ }
+ """.replace("\n", "").strip() % {
+ "urn": media.get_id(),
+ }
+
+ def _update_favorite_cb(conn, res):
+ try:
+ conn.update_finish(res)
+ except GLib.Error as e:
+ self._log.warning("Unable to update favorite: {}".format(
+ e.message))
+
+ self._tracker.update_async(
+ update, GLib.PRIORITY_LOW, None, _update_favorite_cb)
+
def _update_album(self, media, tags):
query_delete = """
DELETE {
@@ -652,6 +681,8 @@ class TrackerWrapper(GObject.GObject):
self._update_reference(media, MbReference.RELEASE, tags)
elif tag == "mb-release-group-id":
self._update_reference(media, MbReference.RELEASE_GROUP, tags)
+ elif tag == "favorite":
+ self._update_favorite(media)
else:
self._log.warning("Unknown tag: '{}'".format(tag))
self.update_tags(media, tags)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]