Set all columns in the model so the view is updated
[mussorgsky] / src / download_dialog.py
index 469272a..08bbc6e 100644 (file)
@@ -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,20 +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 ("<small>Trying: %s - %s</small>" % (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)
-                    artist_albums_model.set_value (it, 1, pixbuf)
-            except LookupError, e:
+                        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)
-                continue
-
-            self.status_label.set_text ("Retrieved (%d/%d)" % (current, TOTAL))
-            self.current_label.set_markup ("<b>%s - %s</b>" % (artist, album))
+                thumb = None
+            
+            self.set_title ("Downloading album art (%d/%d)" % (current, TOTAL))
+            self.previous_label.set_markup ("<b>%s - %s</b>" % (escape_html(real_artist), escape_html(album)))
               
             if (thumb):
                 self.album_art.set_from_file (thumb)
@@ -86,18 +102,25 @@ class MussorgskyAlbumArtDownloadDialog (gtk.Dialog):
 
 if __name__ == "__main__":
 
-    PAIRS_NO = [("Led Zeppelin", "Led Zeppelin IV"),
-             ("Pink Floyd", "The Wall"),
-             ("Deep purple", "Made in Japan"),
-             ("", "Freakin' out"),
-             ("Dinah Washington", "")]
+    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)