[gnome-music] playlists: Rewrite add_to_playlist to use Tracker queries



commit bd15995a081406f8dd594d0f6d3ca61dffb17cdc
Author: Arnel Borja <arnelborja src gnome org>
Date:   Wed Jun 4 00:27:40 2014 +0800

    playlists: Rewrite add_to_playlist to use Tracker queries

 gnomemusic/playlists.py |   54 ++++++++++++++++++++++++++--------------------
 1 files changed, 30 insertions(+), 24 deletions(-)
---
diff --git a/gnomemusic/playlists.py b/gnomemusic/playlists.py
index 7e3bb4f..5b1562c 100644
--- a/gnomemusic/playlists.py
+++ b/gnomemusic/playlists.py
@@ -21,7 +21,9 @@ class Playlists(GObject.GObject):
     __gsignals__ = {
         'playlist-created': (GObject.SIGNAL_RUN_FIRST, None, (Grl.Media,)),
         'playlist-deleted': (GObject.SIGNAL_RUN_FIRST, None, (Grl.Media,)),
-        'song-added-to-playlist': (GObject.SIGNAL_RUN_FIRST, None, (str, Grl.Media)),
+        'song-added-to-playlist': (
+            GObject.SIGNAL_RUN_FIRST, None, (Grl.Media, Grl.Media)
+        ),
         'song-removed-from-playlist': (GObject.SIGNAL_RUN_FIRST, None, (str, str)),
     }
     instance = None
@@ -90,32 +92,36 @@ class Playlists(GObject.GObject):
         return playlist_names
 
     @log
-    def add_to_playlist(self, playlist_name, uris):
-        parser = TotemPlParser.Parser()
-        playlist = TotemPlParser.Playlist()
-        pl_file = Gio.file_new_for_path(self.get_path_to_playlist(playlist_name))
-
-        def parse_callback(parser, uri, metadata, data):
-            _iter = playlist.append()
-            playlist.set_value(_iter, TotemPlParser.PARSER_FIELD_URI, uri)
-
-        def end_callback(parser, uri, data):
-            for uri in uris:
-                _iter = playlist.append()
-                playlist.set_value(_iter, TotemPlParser.PARSER_FIELD_URI, uri)
+    def add_to_playlist(self, playlist, items):
+        def get_callback(source, param, item, count, data, error):
+            if item:
+                self.emit('song-added-to-playlist', playlist, item)
 
-                def get_callback(source, param, item):
-                    self.emit('song-added-to-playlist', playlist_name, item)
-                grilo.get_media_from_uri(uri, get_callback)
+        def query_callback(conn, res, data):
+            cursor = conn.query_finish(res)
+            if not cursor or not cursor.next():
+                return
+            entry_id = cursor.get_integer(0)
+            grilo.get_playlist_song_with_id(
+                playlist.get_id(), entry_id, get_callback
+            )
 
-            parser.save(playlist, pl_file, playlist_name, TotemPlParser.ParserType.PLS)
+        def update_callback(conn, res, data):
+            entry_urn = conn.update_blank_finish(res)[0][0]['entry']
+            tracker.query_async(
+                Query.get_playlist_song_with_urn(entry_urn),
+                None, query_callback, None
+            )
 
-        parser.connect('entry-parsed', parse_callback, playlist)
-        parser.connect('playlist-ended', end_callback, playlist)
-        parser.parse_async(
-            GLib.filename_to_uri(self.get_path_to_playlist(playlist_name), None),
-            False, None, None, None
-        )
+        for item in items:
+            uri = item.get_url()
+            if not uri:
+                continue
+            tracker.update_blank_async(
+                Query.add_song_to_playlist(playlist.get_id(), uri),
+                GLib.PRIORITY_DEFAULT,
+                None, update_callback, None
+            )
 
     @log
     def remove_from_playlist(self, playlist_name, uris):


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