[gnome-music/wip/mschraal/core: 40/86] coresong: Make favorites really work
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/mschraal/core: 40/86] coresong: Make favorites really work
- Date: Fri, 7 Jun 2019 15:30:33 +0000 (UTC)
commit c80731d52edd69120a3b8913af8e7bce1e6cc972
Author: Marinus Schraal <mschraal gnome org>
Date: Wed May 8 22:45:26 2019 +0200
coresong: Make favorites really work
gnomemusic/coregrilo.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++
gnomemusic/coresong.py | 14 ++++++++++++
2 files changed, 72 insertions(+)
---
diff --git a/gnomemusic/coregrilo.py b/gnomemusic/coregrilo.py
index 2ea4cf65..91f918c1 100644
--- a/gnomemusic/coregrilo.py
+++ b/gnomemusic/coregrilo.py
@@ -54,6 +54,64 @@ class CoreGrilo(GObject.GObject):
self._tracker_source = source
self._tracker_initial_fill(source)
print(self._tracker_source, "added")
+ self._tracker_source.connect(
+ "content-changed", self._on_content_changed)
+
+ def _on_content_changed(self, source, medias, change_type, loc_unknown):
+ print("Content changed")
+
+ for media in medias:
+ if change_type == Grl.SourceChangeType.CHANGED:
+ print("CHANGED", media.get_id())
+ self._requery_media(media.get_id())
+
+ def _requery_media(self, grilo_id):
+ query = """
+ SELECT DISTINCT
+ rdf:type(?song)
+ ?song AS ?tracker_urn
+ nie:title(?song) AS ?title
+ tracker:id(?song) AS ?id
+ ?song
+ nie:url(?song) AS ?url
+ nie:title(?song) AS ?title
+ nmm:artistName(nmm:performer(?song)) AS ?artist
+ nie:title(nmm:musicAlbum(?song)) AS ?album
+ nfo:duration(?song) AS ?duration
+ nie:usageCounter(?song) AS ?play_count
+ nmm:trackNumber(?song) AS ?track_number
+ nmm:setNumber(nmm:musicAlbumDisc(?song)) AS ?album_disc_number
+ ?tag AS ?favourite
+ WHERE {
+ ?song a nmm:MusicPiece .
+ OPTIONAL {
+ ?song nao:hasTag ?tag .
+ FILTER (?tag = nao:predefined-tag-favorite)
+ }
+ FILTER ( tracker:id(?song) = %(grilo_id)s )
+ }
+ """.replace('\n', ' ').strip() % {
+ 'grilo_id': grilo_id
+ }
+
+ # print("query", query)
+ print("grilo id", grilo_id)
+
+ options = self._fast_options.copy()
+
+ self._tracker_source.query(
+ query, self.METADATA_KEYS, options, self._update_media)
+
+ def _update_media(self, source, op_id, media, user_data, error):
+ if error:
+ print("ERROR", error)
+ return
+
+ if not media:
+ print("NO MEDIA", source, op_id, media, error)
+ return
+
+ self._table[media.get_id()].update(media)
def _on_source_removed(self, registry, source):
print("removed", source.props.source_id)
diff --git a/gnomemusic/coresong.py b/gnomemusic/coresong.py
index c11d3fd1..577b05e0 100644
--- a/gnomemusic/coresong.py
+++ b/gnomemusic/coresong.py
@@ -56,3 +56,17 @@ class CoreSong(GObject.GObject):
self._media.set_favourite(self._favorite)
grilo.toggle_favorite(self._media, True)
+
+ @log
+ def update(self, media):
+ self._media = media
+
+ self.props.album = utils.get_album_title(media)
+ self.props.album_disc_number = self._media.get_album_disc_number()
+ self.props.artist = utils.get_artist_name(media)
+ self.props.favorite = self._media.get_favourite()
+ self.props.play_count = self._media.get_play_count()
+ self.props.title = utils.get_media_title(self._media)
+ self.props.track_number = self._media.get_track_number()
+ self.props.url = self._media.get_url()
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]