#
import gtk
import gobject
-import hildon
+try:
+ import hildon
+except:
+ import helldon as hildon
import util
+import datetime
import pango
import jamaendo
from settings import settings
import cgi
from songposition import SongPosition
-
+from listbox import ListDialog
+import colors
log = logging.getLogger(__name__)
class PlayerWindow(hildon.StackableWindow):
def __init__(self):
hildon.StackableWindow.__init__(self)
- self.set_title("jamaendo")
+ self.set_title("Jamaendo")
PlayerWindow.instance = self
self.player = the_player
self.playlist = the_player.playlist
- vbox = gtk.VBox()
+ vbox = gtk.VBox(False, 8)
- hbox = gtk.HBox(False, 8)
+ hbox = gtk.HBox(False)
self.cover = gtk.Image()
self.set_default_cover()
self.album = gtk.Label()
self.album.set_alignment(0,0)
self.album.set_ellipsize(pango.ELLIPSIZE_END)
+ self.playtime = gtk.Label()
+ self.playtime.set_alignment(1,0)
+ self.playtime.set_ellipsize(pango.ELLIPSIZE_END)
self.progress = SongPosition()
self.set_labels('', '', '', 0, 0)
vbox2.pack_start(self.track, True)
vbox2.pack_start(self.artist, True)
vbox2.pack_start(self.album, True)
+ vbox2.pack_start(self.playtime, False, True)
+ vbox2.pack_start(self.progress, False, True)
- hbox.pack_start(self.cover, False, True, 0)
+ hbox.set_border_width(8)
+ hbox.pack_start(self.cover, False, True, 8)
hbox.pack_start(vbox2, True, True, 0)
vbox.pack_start(hbox, True, True, 0)
vbox.pack_start(btns, False, True, 0)
- vbox.pack_start(self.progress, False)
-
self.add_stock_button(btns, gtk.STOCK_MEDIA_PREVIOUS, self.on_prev)
self.add_play_button(btns)
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)
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)
+ b.set_label("Add to playlist")
+ b.connect("clicked", self.on_add_to_playlist)
self.menu.append(b)
self.menu.show_all()
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)
self.playbtn.set_data('state', 'play')
def set_labels(self, track, artist, album, playlist_pos, playlist_size):
+
if self.playlist.radio_mode:
- ppstr = '<span size="small">Radio: %s</span>'%(cgi.escape(self.playlist.radio_name))
+ ppstr = 'Radio: %s'%(cgi.escape(self.playlist.radio_name))
+ elif playlist_size > 0:
+ ppstr = 'Track %s of %s'%(int(playlist_pos)+1, playlist_size)
else:
- ppstr = '<span size="small">Track %s of %s</span>'%(int(playlist_pos)+1, playlist_size)
+ ppstr = "No playlist"
+ ppstr = '<span font_desc="%s" foreground="%s">%s</span>'%(colors.SmallSystemFont(), colors.SecondaryTextColor(), ppstr)
self.playlist_pos.set_markup(ppstr)
- self.track.set_markup('<span size="x-large">%s</span>'%(cgi.escape(track)))
- self.artist.set_markup('<span size="large">%s</span>'%(cgi.escape(artist)))
- self.album.set_markup('<span foreground="#aaaaaa">%s</span>'%(cgi.escape(album)))
-
+ self.track.set_markup('<span font_desc="%s">%s</span>'%(colors.LargeSystemFont(), cgi.escape(track)))
+ 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)
+
+ 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
def clear_position(self):
self.progress.set_position(0)
+ def nanosecs_to_str(self, ns):
+ time_secs = int(float(ns)/1000000000.0)
+ if time_secs <= 59:
+ return "00:%02d"%(time_secs)
+ time_mins = int(time_secs/60.0)
+ time_secs -= time_mins*60
+ if time_mins <= 59:
+ return "%02d:%02d"%(time_mins, time_secs)
+
+ time_hrs = int(time_mins/60.0)
+ time_mins -= time_hrs*60
+ return "%d:%02d:%02d"%(time_hrs, time_secs, time_mins)
+
def set_song_position(self, time_elapsed, total_time):
value = (float(time_elapsed) / float(total_time)) if total_time else 0
self.progress.set_position(value)
+
+ txt = '<span font_desc="%s" foreground="%s">%s</span>' % \
+ (colors.XXLargeSystemFont(),
+ colors.SecondaryTextColor(),
+ self.nanosecs_to_str(time_elapsed)
+ )
+ self.playtime.set_markup(txt)
+
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:
+ 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,
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:
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.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)