From 53ca804c568d7ebd0dc2c93e04d20ef51f3bfc55 Mon Sep 17 00:00:00 2001 From: Ivan Frade Date: Wed, 26 Aug 2009 11:46:01 +0300 Subject: [PATCH] Added "trying" to download dialog The big name shows the last downloaded album art The small letters explain what are we trying to download now. It should help in some "stall" cases. --- src/download_dialog.py | 49 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/src/download_dialog.py b/src/download_dialog.py index eb03119..c71fa08 100644 --- a/src/download_dialog.py +++ b/src/download_dialog.py @@ -5,13 +5,17 @@ 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 () @@ -27,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) @@ -46,7 +50,6 @@ class MussorgskyAlbumArtDownloadDialog (gtk.Dialog): it = artist_albums_model.get_iter_first () while (it): - while (gtk.events_pending()): gtk.main_iteration() @@ -56,22 +59,27 @@ class MussorgskyAlbumArtDownloadDialog (gtk.Dialog): artist = artist_albums_model.get_value (it, 2) album = artist_albums_model.get_value (it, 3) + self.current_label.set_markup ("Trying: %s - %s" % (escape_html(artist), + escape_html(album))) + try: + while (gtk.events_pending()): + gtk.main_iteration() + + if (self.cancel): + break + (image, thumb) = self.downloader.get_album_art (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)) + thumb = None + self.set_title ("Downloading album art (%d/%d)" % (current, TOTAL)) - self.current_label.set_markup ("%s - %s" % (escape_html(artist), escape_html(album))) + self.previous_label.set_markup ("%s - %s" % (escape_html(artist), escape_html(album))) if (thumb): self.album_art.set_from_file (thumb) @@ -90,12 +98,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) -- 1.7.9.5