X-Git-Url: http://git.maemo.org/git/?p=jamaendo;a=blobdiff_plain;f=jamaui%2Fshowalbum.py;h=7d0eed3394b00ff994d822654a766b6e808f271f;hp=688022ddd771f78548ad8d40c8611aaccca464a0;hb=f738313567e28f7b01e0d90df1840fe90d2c30df;hpb=38cb45f4c0c4231bda9a0466ad29e5804ced0f0a diff --git a/jamaui/showalbum.py b/jamaui/showalbum.py index 688022d..7d0eed3 100644 --- a/jamaui/showalbum.py +++ b/jamaui/showalbum.py @@ -23,7 +23,10 @@ # 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 @@ -31,7 +34,12 @@ from settings import settings from postoffice import postoffice import util import logging +import thread +import gobject from albumlist import TrackList +from playlists import add_to_playlist +from fetcher import Fetcher + import webbrowser log = logging.getLogger(__name__) @@ -41,6 +49,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) @@ -65,9 +74,10 @@ class ShowAlbum(hildon.StackableWindow): self.tracks = TrackList(numbers=True) self.tracks.connect('row-activated', self.row_activated) - self.tracklist = jamaendo.get_tracks(album.ID) - for track in self.tracklist: - 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) @@ -87,6 +97,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): @@ -97,16 +108,46 @@ 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) @@ -120,8 +161,19 @@ class ShowAlbum(hildon.StackableWindow): return btn def on_goto_artist(self, btn): - artist = jamaendo.get_artist(int(self.album.artist_id)) - self.open_item(artist) + def threadfun(wnd, artist_id): + try: + artist = jamaendo.get_artist(artist_id) + def oncomplete(wnd, artist): + wnd.open_item(artist) + hildon.hildon_gtk_window_set_progress_indicator(wnd, 0) + gobject.idle_add(oncomplete, wnd, artist) + except: + def onfail(wnd): + hildon.hildon_gtk_window_set_progress_indicator(wnd, 0) + gobject.idle_add(onfail, wnd) + hildon.hildon_gtk_window_set_progress_indicator(self, 1) + thread.start_new_thread(threadfun, (self, int(self.album.artist_id))) def on_download(self, btn): banner = hildon.hildon_banner_show_information(self, '', "Opening in web browser") @@ -145,6 +197,7 @@ 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) playlist = Playlist(self.tracklist) playlist.jump_to(_id)