Attempts to get osso backend working, foiled
authorKristoffer Grönlund <kristoffer.gronlund@purplescout.se>
Wed, 30 Dec 2009 10:43:06 +0000 (11:43 +0100)
committerKristoffer Grönlund <kristoffer.gronlund@purplescout.se>
Sat, 2 Jan 2010 23:37:44 +0000 (00:37 +0100)
jamaendo/api.py
jamaui/dbus.py [deleted file]
jamaui/player.py
jamaui/ui.py

index 452c8f3..75335a1 100644 (file)
@@ -117,7 +117,7 @@ class LocalDB(object):
         if artist is not None:
             for child in artist:
                 if child.tag == 'name':
         if artist is not None:
             for child in artist:
                 if child.tag == 'name':
-                    ret['artist'] = child.text
+                    ret['artist_name'] = child.text
                 elif child.tag == 'id':
                     ret['artist_id'] = int(child.text)
         for child in element:
                 elif child.tag == 'id':
                     ret['artist_id'] = int(child.text)
         for child in element:
@@ -194,16 +194,34 @@ class Query(object):
     cache_time = 60*60*24
     rate_limit = 1.0 # max queries per second
 
     cache_time = 60*60*24
     rate_limit = 1.0 # max queries per second
 
-    def __init__(self, order,
-                 select=['id', 'name', 'image', 'artist_name'],
+    def __init__(self,
+                 select=['id', 'name', 'image', 'artist_name', 'artist_id'],
                  request='album',
                  request='album',
-                 track=['track_album', 'album_artist'],
-                 count=5):
+                 track=['track_album', 'album_artist']):
         if request == 'track':
         if request == 'track':
-            self.url = "%s%s/%s/json/%s?n=%s&order=%s" % (_GET2, '+'.join(select), request, '+'.join(track), count, order)
+            self.url = "%s%s/%s/json/%s" % (_GET2, '+'.join(select), request, '+'.join(track))
         else:
         else:
-            self.url = "%s%s/%s/json/?n=%s&order=%s" % (_GET2, '+'.join(select), request, count, order)
+            self.url = "%s%s/%s/json/" % (_GET2, '+'.join(select), request)
 
 
+    def __call__(self, order=None, count=5, query=None, albumids=None):
+        return self.emit(order=order, count=count, query=query, albumids=albumids)
+
+    def emit(self, order=None, count=5, query=None, albumids=None):
+        """ratelimited query"""
+        self._ratelimit()
+        paramdict = {'n':count}
+        if order is not None:
+            paramdict['order'] = order
+        if query is not None:
+            paramdict['searchquery'] = query
+        if albumids is not None:
+            paramdict['album_id'] = " ".join(str(_id) for _id in albumids)
+        params = urllib.urlencode(paramdict)
+        url = self.url + "?%s" % (params)
+        f = urllib.urlopen(url)
+        ret = simplejson.load(f)
+        f.close()
+        return ret
 
     def _ratelimit(self):
         now = time.time()
 
     def _ratelimit(self):
         now = time.time()
@@ -211,13 +229,6 @@ class Query(object):
             time.sleep(self.rate_limit - (now - self.last_query))
         self.last_query = now
 
             time.sleep(self.rate_limit - (now - self.last_query))
         self.last_query = now
 
-    def __call__(self):
-        """ratelimited query"""
-        self._ratelimit()
-        f = urllib.urlopen(self.url)
-        ret = simplejson.load(f)
-        f.close()
-        return ret
 
     @staticmethod
     def album_cover(albumid, size=200):
 
     @staticmethod
     def album_cover(albumid, size=200):
@@ -236,14 +247,49 @@ class Query(object):
        return _GET2+ 'stream/track/redirect/?id=%d&streamencoding=mp31'%(trackid)
 
 class Queries(object):
        return _GET2+ 'stream/track/redirect/?id=%d&streamencoding=mp31'%(trackid)
 
 class Queries(object):
-    albums_this_week = Query(order='ratingweek_desc')
-    albums_all_time = Query(order='ratingtotal_desc')
-    albums_this_month = Query(order='ratingmonth_desc')
-    albums_today = Query(order='ratingday_desc')
-    playlists_all_time = Query(select=['id','name', 'user_idstr'], request='playlist', order='ratingtotal_desc')
-    tracks_this_month = Query(select=['id', 'name',
-                                      'stream',
-                                      'album_name', 'artist_name',
-                                      'album_id', 'artist_id'],
-                              request='track',
-                              order='ratingmonth_desc')
+    @staticmethod
+    def albums_this_week():
+        return Query().emit(order='ratingweek_desc')
+    @staticmethod
+    def albums_all_time():
+        return Query().emit(order='ratingtotal_desc')
+    @staticmethod
+    def albums_this_month():
+        return Query().emit(order='ratingmonth_desc')
+    @staticmethod
+    def albums_today():
+        return Query().emit(order='ratingday_desc')
+    @staticmethod
+    def playlists_all_time():
+        q = Query(select=['id','name', 'user_idstr'], request='playlist')
+        return q.emit(order='ratingtotal_desc')
+
+    @staticmethod
+    def tracks_this_month():
+        q = Query(select=['id', 'name',
+                          'stream',
+                          'album_name', 'artist_name',
+                          'album_id', 'artist_id'],
+                  request='track')
+        return q.emit(order='ratingmonth_desc')
+
+    @staticmethod
+    def search_albums(query):
+        q = Query()
+        return q.emit(order='searchweight_desc', query=query)
+
+    @staticmethod
+    def search_artists(query):
+        q = Query(request='artist', select=['id', 'name', 'image'])
+        return q.emit(order='searchweight_desc', query=query)
+
+    @staticmethod
+    def album_tracks(albumids, select=['id', 'name', 'numalbum']):
+        #http://api.jamendo.com/get2/id+name/track/jsonpretty/?album_id=33+46
+        q = Query(select=select,
+                  request='track')
+        ret = q.emit(albumids=albumids, count=100)
+        for track in ret:
+            track['mp3'] = Query.track_mp3(int(track['id']))
+            track['ogg'] = Query.track_ogg(int(track['id']))
+        return ret
diff --git a/jamaui/dbus.py b/jamaui/dbus.py
deleted file mode 100644 (file)
index 196e250..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Media player controls
-#dbus-send --print-reply --dest=com.nokia.mediaplayer /com/nokia/mediaplayer com.nokia.mediaplayer.mime_open string:"file:///$1"
-#dbus-send --dest=com.nokia.osso_media_server /com/nokia/osso_media_server com.nokia.osso_media_server.music.pause
-import dbus
-
index 703ac48..1ada454 100644 (file)
@@ -24,6 +24,7 @@ pygst.require('0.10')
 import gst
 import util
 import dbus
 import gst
 import util
 import dbus
+import dbus.service
 
 log = logging.getLogger(__name__)
 
 
 log = logging.getLogger(__name__)
 
index af49880..17cf158 100644 (file)
@@ -10,6 +10,7 @@ import util
 import logging
 import gobject
 
 import logging
 import gobject
 
+# we don't use the local DB...
 from jamaendo.api import LocalDB, Query, Queries, refresh_dump
 from jamaui.player import Player, Playlist
 
 from jamaendo.api import LocalDB, Query, Queries, refresh_dump
 from jamaui.player import Player, Playlist
 
@@ -192,10 +193,10 @@ class SearchWindow(hildon.StackableWindow):
     def on_search(self, w):
         txt = self.entry.get_text()
         print "Search for: %s" % (txt)
     def on_search(self, w):
         txt = self.entry.get_text()
         print "Search for: %s" % (txt)
-        db = LocalDB()
-        db.connect()
-        for album in db.search_albums(txt):
-            title = "%s - %s" % (album['artist'], album['name'])
+        #db = LocalDB()
+        #db.connect()
+        for album in Queries.search_albums(query=txt):
+            title = "%s - %s" % (album['artist_name'], album['name'])
             self.idmap[title] = album
             print "Found %s" % (album)
             self.results.append_text(title)
             self.idmap[title] = album
             print "Found %s" % (album)
             self.results.append_text(title)
@@ -204,17 +205,10 @@ class SearchWindow(hildon.StackableWindow):
         current_selection = results.get_current_text()
 
         album = self.idmap[current_selection]
         current_selection = results.get_current_text()
 
         album = self.idmap[current_selection]
-        selected = [album['id']]
+        selected = [int(album['id'])]
         print "Selected: %s" % (selected)
         print "Selected: %s" % (selected)
-        album = None
-        db = LocalDB()
-        db.connect()
-        for a in db.get_albums(selected):
-            album = a
-            break
-
-        if album:
-            tracks = album['tracks']
+        tracks = Queries.album_tracks(selected)
+        if tracks:
             print "Playing: %s" % (tracks)
             self.pwnd = PlayerWindow(tracks)
             self.pwnd.show_all()
             print "Playing: %s" % (tracks)
             self.pwnd = PlayerWindow(tracks)
             self.pwnd.show_all()
@@ -268,10 +262,11 @@ class Jamaui(object):
         player.connect("clicked", self.on_player)
         self.menu.append(player)
 
         player.connect("clicked", self.on_player)
         self.menu.append(player)
 
-        refresh = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
-        refresh.set_label("Refresh")
-        refresh.connect("clicked", self.on_refresh)
-        self.menu.append(refresh)
+        # Don't use localdb ATM
+        #refresh = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        #refresh.set_label("Refresh")
+        #refresh.connect("clicked", self.on_refresh)
+        #self.menu.append(refresh)
 
         menu_about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
         menu_about.set_label("About")
 
         menu_about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
         menu_about.set_label("About")