Add tracker backend using DBus for envs without GI
authorIvan Frade <ivan.frade@gmail.com>
Wed, 22 Jun 2011 14:53:28 +0000 (17:53 +0300)
committerIvan Frade <ivan.frade@gmail.com>
Wed, 22 Jun 2011 14:53:28 +0000 (17:53 +0300)
src/qml/tracker_backend_dbus.py [new file with mode: 0644]

diff --git a/src/qml/tracker_backend_dbus.py b/src/qml/tracker_backend_dbus.py
new file mode 100644 (file)
index 0000000..d4fdb19
--- /dev/null
@@ -0,0 +1,45 @@
+import dbus
+import os
+
+TRACKER = "org.freedesktop.Tracker1"
+TRACKER_OBJ = "/org/freedesktop/Tracker1/Resources"
+
+# (album name, artist1|artist2|... , number of artists)
+ALBUM_ARTISTS_COUNTER = """
+SELECT nie:title (?album) nmm:artistName (?artist) COUNT (?artist)
+WHERE
+    {
+     ?album a nmm:MusicAlbum ; 
+            nmm:albumArtist ?artist .
+    }
+GROUP BY ?album
+"""
+
+class TrackerBackendDBus:
+
+    def __init__ (self):
+        self.dbus = dbus.SessionBus ()
+        self.tracker = self.dbus.get_object (TRACKER, TRACKER_OBJ)
+        self.resources = dbus.Interface (self.tracker,
+                                         "org.freedesktop.Tracker1.Resources")
+
+    def get_all_albums (self):
+        results = self.resources.SparqlQuery (ALBUM_ARTISTS_COUNTER)
+        return self.__iter_results (results)
+
+    def __iter_results (self, results):
+        for (title, artist, counter) in results:
+            print "Executed the yield", counter
+            if int(counter) > 1:
+                yield (unicode(title), "Various artists")
+            else:
+                yield (unicode(title), unicode(artist))
+
+
+if __name__ == "__main__":
+    b = TrackerBackendDBus ()
+    for pair in b.get_all_albums ():
+        print "Outter loop"
+        print pair
+    print "ok"
+