X-Git-Url: http://git.maemo.org/git/?p=jamaendo;a=blobdiff_plain;f=jamaui%2Fshowalbum.py;h=f1933d20d2465ab2d26c77836173b8747e7fed8b;hp=43256221f8e94793060c25ee9b8bd45a2e05a088;hb=2bd6a0126ba7de7db8249c65114c37ca9687dc28;hpb=facd2a5710fb05ac80d55ed8e1af8184fb496c02 diff --git a/jamaui/showalbum.py b/jamaui/showalbum.py index 4325622..f1933d2 100644 --- a/jamaui/showalbum.py +++ b/jamaui/showalbum.py @@ -23,14 +23,21 @@ # import gtk import cgi -import hildon +try: + import hildon +except: + import helldon as hildon import jamaendo +from player import Playlist from playerwindow import open_playerwindow from settings import settings from postoffice import postoffice import util import logging from albumlist import TrackList +from playlists import add_to_playlist +from fetcher import Fetcher + import webbrowser log = logging.getLogger(__name__) @@ -40,6 +47,7 @@ class ShowAlbum(hildon.StackableWindow): hildon.StackableWindow.__init__(self) self.set_title(album.artist_name) self.album = album + self.fetcher = None self.connect('destroy', self.on_destroy) @@ -55,10 +63,6 @@ class ShowAlbum(hildon.StackableWindow): self.download = self.make_imagebutton('download', self.on_download) self.favorite = self.make_imagebutton('favorite', self.on_favorite) self.license = self.make_imagebutton('license', self.on_license) - self.playbtn = hildon.GtkButton(gtk.HILDON_SIZE_FINGER_HEIGHT) - self.playbtn.set_label("Play album") - self.playbtn.set_border_width(0) - self.playbtn.connect('clicked', self.on_play) vbox2 = gtk.VBox() self.albumname = gtk.Label() @@ -68,13 +72,14 @@ class ShowAlbum(hildon.StackableWindow): self.tracks = TrackList(numbers=True) self.tracks.connect('row-activated', self.row_activated) - for track in jamaendo.get_tracks(album.ID): - self.tracks.add_track(track) + self.tracklist = [] + #self.tracklist = jamaendo.get_tracks(album.ID) + #for track in self.tracklist: + # self.tracks.add_track(track) top_hbox.pack_start(vbox1, False) top_hbox.pack_start(vbox2, True) vbox1.pack_start(self.cover, True) - vbox1.pack_start(self.playbtn, False) vbox1.pack_start(self.bbox, False) self.bbox.add(self.goto_artist) self.bbox.add(self.download) @@ -90,6 +95,7 @@ class ShowAlbum(hildon.StackableWindow): postoffice.notify('request-album-cover', self.album.ID, 300) self.create_menu() + self.start_track_fetcher() def create_menu(self): def on_player(*args): @@ -100,16 +106,47 @@ class ShowAlbum(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("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_destroy(self, wnd): postoffice.disconnect('album-cover', self) + if self.fetcher: + self.fetcher.stop() + self.fetcher = None + + def start_track_fetcher(self): + if self.fetcher: + self.fetcher.stop() + self.fetcher = None + self.fetcher = Fetcher(lambda: jamaendo.get_tracks(self.album.ID), self, + on_item = self.on_track_result, + on_ok = self.on_track_complete, + on_fail = self.on_track_complete) + self.fetcher.start() + + def on_track_result(self, wnd, item): + if wnd is self: + self.tracklist.append(item) + self.tracks.add_track(item) + + def on_track_complete(self, wnd, error=None): + if wnd is self: + self.fetcher.stop() + self.fetcher = None def on_album_cover(self, albumid, size, cover): if albumid == self.album.ID and size == 300: self.cover.set_from_file(cover) + + def on_add_to_playlist(self, button, user_data=None): + add_to_playlist(self, self.tracklist) + def make_imagebutton(self, name, cb): btn = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) btn.set_relief(gtk.RELIEF_NONE) @@ -148,9 +185,12 @@ class ShowAlbum(hildon.StackableWindow): self.open_item(self.album) def row_activated(self, treeview, path, view_column): + # TODO: wait for all tracks to load _id = self.tracks.get_track_id(path) - track = jamaendo.get_track(_id) - self.open_item(track) + playlist = Playlist(self.tracklist) + playlist.jump_to(_id) + wnd = open_playerwindow() + wnd.play_tracks(playlist) def open_item(self, item): if isinstance(item, jamaendo.Album):