From: Kristoffer Grönlund Date: Wed, 30 Dec 2009 10:43:06 +0000 (+0100) Subject: Attempts to get osso backend working, foiled X-Git-Url: http://git.maemo.org/git/?p=jamaendo;a=commitdiff_plain;h=134c8caceae0c385366a1d5c1f9e6a3dd239057b Attempts to get osso backend working, foiled --- diff --git a/jamaendo/api.py b/jamaendo/api.py index 452c8f3..75335a1 100644 --- a/jamaendo/api.py +++ b/jamaendo/api.py @@ -117,7 +117,7 @@ class LocalDB(object): 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: @@ -194,16 +194,34 @@ class Query(object): 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', - track=['track_album', 'album_artist'], - count=5): + track=['track_album', 'album_artist']): 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: - 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() @@ -211,13 +229,6 @@ class Query(object): 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): @@ -236,14 +247,49 @@ class Query(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 index 196e250..0000000 --- a/jamaui/dbus.py +++ /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 - diff --git a/jamaui/player.py b/jamaui/player.py index 703ac48..1ada454 100644 --- a/jamaui/player.py +++ b/jamaui/player.py @@ -24,6 +24,7 @@ pygst.require('0.10') import gst import util import dbus +import dbus.service log = logging.getLogger(__name__) diff --git a/jamaui/ui.py b/jamaui/ui.py index af49880..17cf158 100644 --- a/jamaui/ui.py +++ b/jamaui/ui.py @@ -10,6 +10,7 @@ import util 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 @@ -192,10 +193,10 @@ class SearchWindow(hildon.StackableWindow): 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) @@ -204,17 +205,10 @@ class SearchWindow(hildon.StackableWindow): current_selection = results.get_current_text() album = self.idmap[current_selection] - selected = [album['id']] + selected = [int(album['id'])] 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() @@ -268,10 +262,11 @@ class Jamaui(object): 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")