1 #!/usr/bin/env python2.5
3 from album_art import MussorgskyAlbumArt
5 class MussorgskyAlbumArtDownloadDialog (gtk.Dialog):
7 def __init__ (self, parent):
8 gtk.Dialog.__init__ (self,
9 "Downloading album art", parent,
10 gtk.DIALOG_DESTROY_WITH_PARENT,
11 (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)
13 self.downloader = MussorgskyAlbumArt ()
14 self.set_title ("Downloading album art")
15 self.connect ("response", self.handle_response)
19 def create_view (self):
21 hbox = gtk.HBox (homogeneous=False)
23 self.album_art = gtk.Image ()
24 self.album_art.set_size_request (124, 124)
26 hbox.pack_start (self.album_art, expand=False, fill=True)
29 self.status_label = gtk.Label ("")
30 labels.pack_start (self.status_label)
31 self.current_label = gtk.Label ("")
32 labels.pack_start (self.current_label)
34 hbox.pack_start (labels, expand=True, fill=False)
39 def do_the_job (self, artist_albums_model):
41 each row: ("Visible text", pixbuf, Artist, Album)
43 TOTAL = len (artist_albums_model)
46 it = artist_albums_model.get_iter_first ()
49 while (gtk.events_pending()):
55 artist = artist_albums_model.get_value (it, 2)
56 album = artist_albums_model.get_value (it, 3)
59 (image, thumb) = self.downloader.get_album_art (artist, album)
61 pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (thumb, 124, 124)
62 artist_albums_model.set_value (it, 1, pixbuf)
64 print "Error processing %s - %s" % (artist, album)
66 self.album_art.set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG)
69 self.status_label.set_text ("Retrieved (%d/%d)" % (current, TOTAL))
70 self.current_label.set_markup ("<b>%s - %s</b>" % (artist, album))
73 self.album_art.set_from_file (thumb)
75 self.album_art.set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG)
78 it = artist_albums_model.iter_next (it)
81 def handle_response (self, widget, response_id):
82 if (response_id == gtk.RESPONSE_DELETE_EVENT):
83 print "Cancel the work!"
87 if __name__ == "__main__":
89 PAIRS_store = gtk.ListStore (str, gtk.gdk.Pixbuf, str, str)
90 for i in range (0, 100):
91 PAIRS_store.append (("blablabal", None, "Artist %d" % i, "Album %d" %i))
93 def clicked_button (self):
94 aadd = MussorgskyAlbumArtDownloadDialog (w)
96 aadd.do_the_job (PAIRS_store)
101 button = gtk.Button ("click")
102 button.connect ("clicked", clicked_button)