X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fdownload_dialog.py;h=08bbc6e34d53848b29b63bdba0de4e98f73255a1;hb=305d4095fb57f2a56c5c909a5ba329f653adfc0c;hp=16534ec046a50440c3382e4b05c7e2762973024c;hpb=96795006dadbaedf64912768d03f7421d7b9bbc3;p=mussorgsky diff --git a/src/download_dialog.py b/src/download_dialog.py index 16534ec..08bbc6e 100644 --- a/src/download_dialog.py +++ b/src/download_dialog.py @@ -1,22 +1,27 @@ #!/usr/bin/env python2.5 import gtk, gobject -from album_art import MussorgskyAlbumArt +from album_art_thread import MussorgskyAlbumArt +from utils import escape_html class MussorgskyAlbumArtDownloadDialog (gtk.Dialog): - def __init__ (self, parent): + def __init__ (self, parent, downloader=None): gtk.Dialog.__init__ (self, "Downloading album art", parent, gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT) ) - self.downloader = MussorgskyAlbumArt () + if (downloader): + self.downloader = downloader + else: + self.downloader = MussorgskyAlbumArt () + self.set_title ("Downloading album art") self.connect ("response", self.handle_response) - self.create_view () + self.__create_view () self.cancel = False - def create_view (self): + def __create_view (self): hbox = gtk.HBox (homogeneous=False) @@ -26,8 +31,8 @@ class MussorgskyAlbumArtDownloadDialog (gtk.Dialog): hbox.pack_start (self.album_art, expand=False, fill=True) labels = gtk.VBox () - self.status_label = gtk.Label ("") - labels.pack_start (self.status_label) + self.previous_label = gtk.Label ("") + labels.pack_start (self.previous_label) self.current_label = gtk.Label ("") labels.pack_start (self.current_label) @@ -45,7 +50,6 @@ class MussorgskyAlbumArtDownloadDialog (gtk.Dialog): it = artist_albums_model.get_iter_first () while (it): - while (gtk.events_pending()): gtk.main_iteration() @@ -54,22 +58,32 @@ class MussorgskyAlbumArtDownloadDialog (gtk.Dialog): artist = artist_albums_model.get_value (it, 2) album = artist_albums_model.get_value (it, 3) + + if (artist.find ('|') != -1): + real_artist = "Various artists" + else: + real_artist = artist + self.current_label.set_markup ("Trying: %s - %s" % (escape_html(real_artist), + escape_html(album))) try: - (image, thumb) = self.downloader.get_album_art (artist, album) + while (gtk.events_pending()): + gtk.main_iteration() + + if (self.cancel): + break + + (image, thumb) = self.downloader.get_album_art (real_artist, album) if thumb: - pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (thumb, 124, 124) + pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (thumb, 64, 64) artist_albums_model.set_value (it, 1, pixbuf) except Exception, e: print "Error processing %s - %s" % (artist, album) print str(e) - self.album_art.set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG) - current += 1 - it = artist_albums_model.iter_next (it) - continue - - self.status_label.set_text ("Retrieved (%d/%d)" % (current, TOTAL)) - self.current_label.set_markup ("%s - %s" % (artist, album)) + thumb = None + + self.set_title ("Downloading album art (%d/%d)" % (current, TOTAL)) + self.previous_label.set_markup ("%s - %s" % (escape_html(real_artist), escape_html(album))) if (thumb): self.album_art.set_from_file (thumb) @@ -88,12 +102,25 @@ class MussorgskyAlbumArtDownloadDialog (gtk.Dialog): if __name__ == "__main__": + import time + import random + class MockDownloader: + def __init__ (self): + self.alt = [("../hendrix.jpeg", "../hendrix-thumb.jpeg"), + ("../hoover.jpeg", "../hoover-thumb.jpeg"), + ("../backbeat.jpeg", "../backbeat-thumb.jpeg"), + ("../dylan.jpeg", "../dylan-thumb.jpeg")] + self.counter = 0 + def get_album_art (self, artist, album, force=False): + time.sleep (3) + return self.alt [random.randint (0, len (self.alt)-1)] + PAIRS_store = gtk.ListStore (str, gtk.gdk.Pixbuf, str, str) for i in range (0, 100): PAIRS_store.append (("blablabal", None, "Artist %d" % i, "Album %d" %i)) def clicked_button (self): - aadd = MussorgskyAlbumArtDownloadDialog (w) + aadd = MussorgskyAlbumArtDownloadDialog (w, MockDownloader ()) aadd.show_all () aadd.do_the_job (PAIRS_store)