Oops, my rate limiting was all broken...
authorKristoffer Grönlund <kristoffer.gronlund@purplescout.se>
Wed, 6 Jan 2010 16:53:25 +0000 (17:53 +0100)
committerKristoffer Grönlund <kristoffer.gronlund@purplescout.se>
Wed, 6 Jan 2010 16:53:25 +0000 (17:53 +0100)
jamaendo/api.py
jamaui/ossohelper.py
jamaui/playlists.py
jamaui/showartist.py

index 7792c33..44cec73 100644 (file)
@@ -240,23 +240,26 @@ _CACHED_COVERS = 2048
 
 # TODO: cache queries?
 
-class Query(object):
-    rate_limit = 1.1 # seconds between queries
+class Ratelimit(object):
+    rate_limit = 1.0 # seconds between queries
     last_query = time.time() - 1.5
 
     @classmethod
-    def _ratelimit(cls):
+    def ratelimit(cls):
         now = time.time()
-        if now - cls.last_query < cls.rate_limit:
+        if (now - cls.last_query) < cls.rate_limit:
             time.sleep(cls.rate_limit - (now - cls.last_query))
-        cls.last_query = now
+        cls.last_query = time.time()
+
+_ratelimit = Ratelimit.ratelimit
 
+class Query(object):
     def __init__(self):
         pass
 
     def _geturl(self, url):
+        _ratelimit()
         log.info("%s", url)
-        Query._ratelimit()
         try:
             ret = simplejson.loads(curlGET(url))
         except Exception, e:
index ec81665..c7cbde2 100644 (file)
@@ -71,13 +71,13 @@ def application_exit():
     """
     Osso application exit.
     """
-    if __osso_application__ is not None and __osso_context__ is not None:
-        try:
-            #__osso_application__.close()
-            __osso_context__.close()
-        except Exception, err:
-            __log.warning('application end could not be sent: %s' % err)
-        __log.debug('osso application end sent')
+    #if __osso_application__ is not None and __osso_context__ is not None:
+    #    try:
+    #        #__osso_application__.close()
+    #        __osso_context__.close()
+    #    except Exception, err:
+    #        __log.warning('application end could not be sent: %s' % err)
+    #    __log.debug('osso application end sent')
 # application_exit
 
 def application_top(app_name):
index a7a46d3..cd8edac 100644 (file)
@@ -43,6 +43,8 @@ def _show_banner(parent, message, timeout = 2000):
     banner = hildon.hildon_banner_show_information(parent, '', message)
     banner.set_timeout(2000)
 
+show_banner = _show_banner
+
 from listbox import ListDialog
 
 def add_to_playlist(wnd, track):
@@ -121,14 +123,16 @@ class PlaylistsWindow(hildon.StackableWindow):
         player.set_label("Open player")
         player.connect("clicked", on_player)
         self.menu.append(player)
-        player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
-        player.set_label("Manage playlists")
-        player.connect("clicked", self.on_manage_playlists)
-        self.menu.append(player)
-        player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
-        player.set_label("Export...")
-        player.connect("clicked", self.on_export_playlists)
-        self.menu.append(player)
+        # bah, I haven't decided how I want to do this yet
+        # lets just hide it for now
+        #player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        #player.set_label("Manage playlists")
+        #player.connect("clicked", self.on_manage_playlists)
+        #self.menu.append(player)
+        #player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        #player.set_label("Export...")
+        #player.connect("clicked", self.on_export_playlists)
+        #self.menu.append(player)
         self.menu.show_all()
         self.set_app_menu(self.menu)
 
index 9b0e9ba..7b830c7 100644 (file)
@@ -33,6 +33,7 @@ from albumlist import AlbumList
 from postoffice import postoffice
 import util
 import gobject
+from playlists import add_to_playlist, show_banner
 
 import logging
 
@@ -76,7 +77,8 @@ class ShowArtist(hildon.StackableWindow):
         self.add(top_hbox)
 
         try:
-            for album in jamaendo.get_albums(artist.ID):
+            self.albumlist = jamaendo.get_albums(artist.ID)
+            for album in self.albumlist:
                 self.albums.add_album(album)
         except jamaendo.JamendoAPIException:
             log.exception("Failed in get_albums(%s)"%(artist.ID))
@@ -86,6 +88,36 @@ class ShowArtist(hildon.StackableWindow):
         if self.artist.image:
             postoffice.notify('request-images', [self.artist.image])
 
+        self.create_menu()
+
+    def create_menu(self):
+        def on_player(*args):
+            from playerwindow import open_playerwindow
+            open_playerwindow()
+        self.menu = hildon.AppMenu()
+        player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        player.set_label("Open player")
+        player.connect("clicked", on_player)
+        self.menu.append(player)
+        player = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+        player.set_label("Add to playlist")
+        player.connect("clicked", self.on_add_to_playlist)
+        self.menu.append(player)
+        self.menu.show_all()
+        self.set_app_menu(self.menu)
+
+    def on_add_to_playlist(self, button, user_data=None):
+        if self.albumlist:
+            try:
+                tracklist = []
+                for album in self.albumlist:
+                    tracklist.extend(jamaendo.get_tracks(album.ID))
+                add_to_playlist(self, tracklist)
+            except jamaendo.JamendoAPIException:
+                log.exception("Failed to get track list for artist %s", self.artist.ID)
+        else:
+            show_banner(self, "Error when opening track list")
+
     def get_pixbuf(self, img):
         try:
             return gtk.gdk.pixbuf_new_from_file_at_size(img,