X-Git-Url: http://git.maemo.org/git/?p=jamaendo;a=blobdiff_plain;f=jamaui%2Fplayerwindow.py;h=2fd350a13ecd190c0dcc42ac1715818bfcbd695f;hp=ce1349441e620ef15af7a04285ae13dbb40e637c;hb=61536ca548691b15e7f63340a0fbfb5a3055d5be;hpb=facd2a5710fb05ac80d55ed8e1af8184fb496c02 diff --git a/jamaui/playerwindow.py b/jamaui/playerwindow.py index ce13494..2fd350a 100644 --- a/jamaui/playerwindow.py +++ b/jamaui/playerwindow.py @@ -23,9 +23,13 @@ # import gtk import gobject -import hildon +try: + import hildon +except: + import helldon as hildon import util import pango +import jamaendo from settings import settings from postoffice import postoffice from player import Playlist, the_player @@ -33,14 +37,19 @@ import logging import cgi from songposition import SongPosition - +from listbox import ListDialog +import colors log = logging.getLogger(__name__) class PlayerWindow(hildon.StackableWindow): + instance = None + def __init__(self): hildon.StackableWindow.__init__(self) self.set_title("jamaendo") + PlayerWindow.instance = self + self.connect('destroy', self.on_destroy) self.player = the_player @@ -51,19 +60,17 @@ class PlayerWindow(hildon.StackableWindow): hbox = gtk.HBox(False, 8) self.cover = gtk.Image() - tmp = util.find_resource('album.png') - if tmp: - self.cover.set_from_file(tmp) + self.set_default_cover() vbox2 = gtk.VBox() self.playlist_pos = gtk.Label() self.playlist_pos.set_alignment(1.0,0) self.track = gtk.Label() - self.track.set_alignment(0,0) + self.track.set_alignment(0,1) self.track.set_ellipsize(pango.ELLIPSIZE_END) self.artist = gtk.Label() - self.artist.set_alignment(0,0) + self.artist.set_alignment(0,0.5) self.artist.set_ellipsize(pango.ELLIPSIZE_END) self.album = gtk.Label() self.album.set_alignment(0,0) @@ -96,18 +103,11 @@ 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.volume = hildon.VVolumebar() - #self.volume.set_property('can-focus', False) - #self.volume.connect('level_changed', self.volume_changed_hildon) - #self.volume.connect('mute_toggled', self.mute_toggled) - #hbox.pack_start(self.volume, False) self.add(vbox) postoffice.connect('album-cover', self, self.set_album_cover) postoffice.connect(['next', 'prev', 'play', 'pause', 'stop'], self, self.on_state_changed) - #print "Created player window, playlist: %s" % (self.playlist) - self.on_state_changed() self.create_menu() @@ -116,14 +116,12 @@ class PlayerWindow(hildon.StackableWindow): self.menu = hildon.AppMenu() def to_artist(*args): - import jamaendo 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): - import jamaendo from showalbum import ShowAlbum track = self.playlist.current() album = jamaendo.get_album(int(track.album_id)) @@ -140,6 +138,11 @@ class PlayerWindow(hildon.StackableWindow): b.connect("clicked", to_album) self.menu.append(b) + b = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) + b.set_label("Add to playlist") + b.connect("clicked", self.on_add_to_playlist) + self.menu.append(b) + self.menu.show_all() self.set_app_menu(self.menu) @@ -163,12 +166,14 @@ class PlayerWindow(hildon.StackableWindow): return None def on_destroy(self, wnd): + PlayerWindow.instance = None self.stop_position_timer() postoffice.disconnect(['album-cover', 'next', 'prev', 'play', 'stop'], self) def add_stock_button(self, btns, stock, cb): btn = hildon.GtkButton(gtk.HILDON_SIZE_FINGER_HEIGHT) btn.set_relief(gtk.RELIEF_NONE) + btn.set_focus_on_click(False) sz = gtk.ICON_SIZE_BUTTON btn.set_image(gtk.image_new_from_stock(stock, sz)) btn.connect('clicked', cb) @@ -199,11 +204,24 @@ class PlayerWindow(hildon.StackableWindow): self.playbtn.set_data('state', 'play') def set_labels(self, track, artist, album, playlist_pos, playlist_size): - self.playlist_pos.set_markup('Track %s of %s'%(int(playlist_pos)+1, playlist_size)) - self.track.set_markup('%s'%(cgi.escape(track))) - self.artist.set_markup('%s'%(cgi.escape(artist))) - self.album.set_markup('%s'%(cgi.escape(album))) + if self.playlist.radio_mode: + ppstr = 'Radio: %s'%(cgi.escape(self.playlist.radio_name)) + else: + ppstr = 'Track %s of %s'%(colors.SmallSystemFont(), colors.SecondaryTextColor(), int(playlist_pos)+1, playlist_size) + self.playlist_pos.set_markup(ppstr) + self.track.set_markup('%s'%(colors.LargeSystemFont(), cgi.escape(track))) + self.artist.set_markup('%s'%(cgi.escape(artist))) + self.album.set_markup('%s'%(colors.SecondaryTextColor(), cgi.escape(album))) + + def show_banner(self, message, timeout = 2000): + banner = hildon.hildon_banner_show_information(self, '', message) + banner.set_timeout(2000) + + def on_add_to_playlist(self, button, user_data=None): + track = self.player.playlist.current() + from playlists import add_to_playlist + add_to_playlist(self, track) def volume_changed_hildon(self, widget): settings.volume = widget.get_level()/100.0 @@ -238,6 +256,12 @@ class PlayerWindow(hildon.StackableWindow): value = (float(time_elapsed) / float(total_time)) if total_time else 0 self.progress.set_position(value) + def set_default_cover(self): + tmp = util.find_resource('album.png') + if tmp: + log.debug("Setting cover to %s", tmp) + self.cover.set_from_file(tmp) + def update_state(self): item = self.playlist.current() if item: @@ -245,22 +269,41 @@ class PlayerWindow(hildon.StackableWindow): item.load() self.set_labels(item.name, item.artist_name, item.album_name, self.playlist.current_index(), self.playlist.size()) + self.set_default_cover() postoffice.notify('request-album-cover', int(item.album_id), 300) else: self.set_labels('', '', '', 0, 0) - tmp = util.find_resource('album.png') - if tmp: - self.cover.set_from_file(tmp) + self.set_default_cover() def set_album_cover(self, albumid, size, cover): if size == 300: playing = self.get_album_id() if playing and albumid and (int(playing) == int(albumid)): + log.debug("Setting cover to %s", cover) self.cover.set_from_file(cover) + def play_radio(self, radio_name, radio_id): + playlist = Playlist([]) + 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) + self.__play_tracks(playlist) + log.debug("Playlist current: %s, playing? %s", + playlist.current_index(), + self.player.playing()) + def play_tracks(self, tracks): + self.__play_tracks(tracks) + + def __play_tracks(self, tracks): self.clear_position() - self.playlist = Playlist(tracks) + if isinstance(tracks, Playlist): + self.playlist = tracks + else: + self.playlist = Playlist(tracks) + log.debug("Playing: %s", self.playlist) self.player.stop() self.player.play(self.playlist) @@ -280,6 +323,15 @@ class PlayerWindow(hildon.StackableWindow): self.player.stop() def open_playerwindow(): - player = PlayerWindow() - player.show_all() + if PlayerWindow.instance: + player = PlayerWindow.instance + stack = player.get_stack() + sz = stack.size() + windows = stack.pop(sz) + windows.remove(player) + windows.append(player) + stack.push_list(windows) + else: + player = PlayerWindow() + player.show_all() return player