[gnome-music/wip/merge: 36/343] grilo: Port from JavaScript to Python



commit b581db25c1e8e86ac67445595b2147c7aabd9db1
Author: Arnel A. Borja <arnelborja src gnome org>
Date:   Sat Jul 13 22:17:05 2013 +0800

    grilo: Port from JavaScript to Python

 gnome-music/grilo.py |   81 ++++++++++++++++++++++++++++++++++++++++++++++++++
 gnome-music/view.py  |    2 +-
 2 files changed, 82 insertions(+), 1 deletions(-)
---
diff --git a/gnome-music/grilo.py b/gnome-music/grilo.py
new file mode 100644
index 0000000..cd66252
--- /dev/null
+++ b/gnome-music/grilo.py
@@ -0,0 +1,81 @@
+from gi.repository import Grl
+
+from query import Query
+
+
+class Grilo():
+
+    METADATA_KEYS = [
+        Grl.METADATA_KEY_ID, Grl.METADATA_KEY_TITLE,
+        Grl.METADATA_KEY_ARTIST, Grl.METADATA_KEY_ALBUM,
+        Grl.METADATA_KEY_DURATION, Grl.METADATA_KEY_THUMBNAIL,
+        Grl.METADATA_KEY_CREATION_DATE]
+
+    def __init__(self):
+        self.registry = Grl.Registry.get_default()
+        self.registry.load_all_plugins()
+
+        self.sources = {}
+        self.tracker = None
+
+        self.registry.connect('source_added', self._onSourceAdded)
+        self.registry.connect('source_removed', self._onSourceRemoved)
+
+        if self.registry.load_all is False:
+            print('Failed to load plugins.')
+
+    def _onSourceAdded(self, pluginRegistry, mediaSource):
+        if mediaSource.sourceId == "grl-tracker-source":
+            ops = mediaSource.supported_operations()
+            if ops & Grl.SupportedOps.SEARCH:
+                print('Detected new source availabe: \'' +
+                      mediaSource.get_name() + '\' and it supports search')
+
+                self.sources[mediaSource.sourceId] = mediaSource
+                self.tracker = mediaSource
+
+                if self.tracker is not None:
+                    self.emit('ready')
+
+    def _onSourceRemoved(self):
+        print('source removed')
+
+    def populateArtists(self, offset, callback):
+        self.populateItems(Query.artist, offset, callback)
+
+    def populateAlbums(self, offset, callback, count=50):
+        self.populateItems(Query.album, offset, callback, count)
+
+    def populateSongs(self, offset, callback):
+        self.populateItems(Query.songs, offset, callback)
+
+    def populateItems(self, query, offset, callback, count=50):
+        options = Grl.OperationOptions(None)
+        options.set_flags(Grl.ResolutionFlags.FULL |
+                          Grl.ResolutionFlags.IDLE_RELAY)
+        options.set_skip(offset)
+        options.set_count(count)
+        self.tracker.query(query, self.METADATA_KEYS, options, callback)
+
+    def getAlbumSongs(self, album_id, callback):
+        query = Query.album_songs(album_id)
+        options = Grl.OperationOptions(None)
+        options.set_flags(Grl.ResolutionFlags.FULL |
+                          Grl.ResolutionFlags.IDLE_RELAY)
+        self.tracker.query(query, self.METADATA_KEYS, options, callback)
+
+    def _searchCallback(self):
+        print("yeah")
+
+    def search(self, q):
+        for source in self.sources:
+            print(source.get_name() + " - " + q)
+            source.search(q, [Grl.METADATA_KEY_ID], 0, 10,
+                          Grl.MetadataResolutionFlags.FULL |
+                          Grl.MetadataResolutionFlags.IDLE_RELAY,
+                          self._searchCallback, source)
+
+
+Grl.init(None, 0)
+
+grilo = Grilo()
diff --git a/gnome-music/view.py b/gnome-music/view.py
index 03a54a1..60e3efd 100644
--- a/gnome-music/view.py
+++ b/gnome-music/view.py
@@ -1,5 +1,5 @@
 from gi.repository import Gtk, GObject, Gd, Grl, Pango, GLib, GdkPixbuf
-import grilo
+from grilo import grilo
 import widgets as Widgets
 from query import Query
 import albumArtCache


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