From 810239ecc8816db69418aa227da2102b8a08c315 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristoffer=20Gr=C3=B6nlund?= Date: Fri, 8 Jan 2010 11:52:50 +0100 Subject: [PATCH] Possibly buggy updates of show artist / show album to do background fetching --- jamaui/showalbum.py | 34 +++++++++++++++++++++++++++++++--- jamaui/showartist.py | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/jamaui/showalbum.py b/jamaui/showalbum.py index 218d998..07a0e6d 100644 --- a/jamaui/showalbum.py +++ b/jamaui/showalbum.py @@ -36,6 +36,7 @@ import util import logging from albumlist import TrackList from playlists import add_to_playlist +from fetcher import fetcher import webbrowser @@ -46,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) @@ -70,9 +72,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) @@ -92,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): @@ -111,6 +115,29 @@ class ShowAlbum(hildon.StackableWindow): 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(jamaendo.starred_radios, self, + on_item = self.on_radio_result, + on_ok = self.on_radio_complete, + on_fail = self.on_radio_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: @@ -158,6 +185,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) diff --git a/jamaui/showartist.py b/jamaui/showartist.py index 7b830c7..1a6557f 100644 --- a/jamaui/showartist.py +++ b/jamaui/showartist.py @@ -34,6 +34,7 @@ from postoffice import postoffice import util import gobject from playlists import add_to_playlist, show_banner +from fetcher import Fetcher import logging @@ -48,6 +49,9 @@ class ShowArtist(hildon.StackableWindow): self.set_title(artist.name) self.artist = artist + self.connect('destroy', self.on_destroy) + self.fetcher = None + top_hbox = gtk.HBox() self.image = gtk.Image() self.default_pixbuf = util.find_resource('album.png') @@ -76,12 +80,7 @@ class ShowArtist(hildon.StackableWindow): self.add(top_hbox) - try: - self.albumlist = jamaendo.get_albums(artist.ID) - for album in self.albumlist: - self.albums.add_album(album) - except jamaendo.JamendoAPIException: - log.exception("Failed in get_albums(%s)"%(artist.ID)) + self.albumlist = [] postoffice.connect('images', self, self.on_images) @@ -89,6 +88,32 @@ class ShowArtist(hildon.StackableWindow): postoffice.notify('request-images', [self.artist.image]) self.create_menu() + self.start_album_fetcher() + + def on_destroy(self, wnd): + if self.fetcher: + self.fetcher.stop() + self.fetcher = None + + def start_album_fetcher(self): + if self.fetcher: + self.fetcher.stop() + self.fetcher = None + self.fetcher = Fetcher(lambda: jamaendo.get_albums(self.artist.ID), self, + on_item = self.on_album_result, + on_ok = self.on_album_complete, + on_fail = self.on_album_complete) + self.fetcher.start() + + def on_album_result(self, wnd, item): + if wnd is self: + self.albums.add_album(item) + self.albumlist.append(item) + + def on_album_complete(self, wnd, error=None): + if wnd is self: + self.fetcher.stop() + self.fetcher = None def create_menu(self): def on_player(*args): -- 1.7.9.5