Fixed the final two synchronous calls I could find
[jamaendo] / jamaui / playerwindow.py
index ae6e803..fcf9ff3 100644 (file)
@@ -47,7 +47,7 @@ class PlayerWindow(hildon.StackableWindow):
 
     def __init__(self):
         hildon.StackableWindow.__init__(self)
-        self.set_title("jamaendo")
+        self.set_title("Jamaendo")
 
         PlayerWindow.instance = self
 
@@ -108,6 +108,8 @@ class PlayerWindow(hildon.StackableWindow):
         self.add_stock_button(btns, gtk.STOCK_MEDIA_STOP, self.on_stop)
         self.add_stock_button(btns, gtk.STOCK_MEDIA_NEXT, self.on_next)
 
+        self.controls = btns
+
         self.add(vbox)
 
         postoffice.connect('album-cover', self, self.set_album_cover)
@@ -120,27 +122,35 @@ class PlayerWindow(hildon.StackableWindow):
     def create_menu(self):
         self.menu = hildon.AppMenu()
 
-        def to_artist(*args):
+        def to_artist():
             from showartist import ShowArtist
-            track = self.playlist.current()
-            artist = jamaendo.get_artist(int(track.artist_id))
-            wnd = ShowArtist(artist)
-            wnd.show_all()
-        def to_album(*args):
+            try:
+                hildon.hildon_gtk_window_set_progress_indicator(self, 1)
+                track = self.playlist.current()
+                artist = jamaendo.get_artist(int(track.artist_id))
+                wnd = ShowArtist(artist)
+                wnd.show_all()
+            finally:
+                hildon.hildon_gtk_window_set_progress_indicator(self, 0)
+        def to_album():
             from showalbum import ShowAlbum
-            track = self.playlist.current()
-            album = jamaendo.get_album(int(track.album_id))
-            wnd = ShowAlbum(album)
-            wnd.show_all()
+            try:
+                hildon.hildon_gtk_window_set_progress_indicator(self, 1)
+                track = self.playlist.current()
+                album = jamaendo.get_album(int(track.album_id))
+                wnd = ShowAlbum(album)
+                wnd.show_all()
+            finally:
+                hildon.hildon_gtk_window_set_progress_indicator(self, 0)
 
         b = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
         b.set_label("Artist")
-        b.connect("clicked", to_artist)
+        b.connect("clicked", lambda w: gobject.idle_add(to_artist))
         self.menu.append(b)
 
         b = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
         b.set_label("Album")
-        b.connect("clicked", to_album)
+        b.connect("clicked", lambda w: gobject.idle_add(to_album))
         self.menu.append(b)
 
         b = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
@@ -222,6 +232,14 @@ class PlayerWindow(hildon.StackableWindow):
         self.artist.set_markup('%s'%(cgi.escape(artist)))
         self.album.set_markup('<span foreground="%s">%s</span>'%(colors.SecondaryTextColor(), cgi.escape(album)))
 
+        if not track:
+            txt = '<span font_desc="%s" foreground="%s">%s</span>' % \
+                (colors.XXLargeSystemFont(),
+                 colors.SecondaryTextColor(),
+                 '00:00'
+                 )
+            self.playtime.set_markup(txt)
+
     def show_banner(self, message, timeout = 2000):
         banner = hildon.hildon_banner_show_information(self, '', message)
         banner.set_timeout(2000)
@@ -294,6 +312,7 @@ class PlayerWindow(hildon.StackableWindow):
     def update_state(self):
         item = self.playlist.current()
         if item:
+            hildon.hildon_gtk_window_set_progress_indicator(self, 0)
             if not item.name:
                 item.load()
             self.set_labels(item.name, item.artist_name, item.album_name,
@@ -303,6 +322,10 @@ class PlayerWindow(hildon.StackableWindow):
         else:
             self.set_labels('', '', '', 0, 0)
             self.set_default_cover()
+        state = bool(item)
+        for btn in self.controls:
+            if isinstance(btn, hildon.GtkButton):
+                btn.set_sensitive(state)
 
     def set_album_cover(self, albumid, size, cover):
         if size == 300:
@@ -316,12 +339,11 @@ class PlayerWindow(hildon.StackableWindow):
         playlist.radio_mode = True
         playlist.radio_name = radio_name
         playlist.radio_id = radio_id
-        playlist.add(jamaendo.get_radio_tracks(playlist.radio_id))
-        log.debug("Playing radio: %s", playlist)
+        hildon.hildon_gtk_window_set_progress_indicator(self, 1)
         self.__play_tracks(playlist)
-        log.debug("Playlist current: %s, playing? %s",
-                  playlist.current_index(),
-                  self.player.playing())
+        #log.debug("Playlist current: %s, playing? %s",
+        #          playlist.current_index(),
+        #          self.player.playing())
 
     def play_tracks(self, tracks):
         self.__play_tracks(tracks)