Refactor: retrieve the album art inside the dialog
authorIvan Frade <ivan.frade@gmail.com>
Tue, 25 Aug 2009 18:16:36 +0000 (21:16 +0300)
committerIvan Frade <ivan.frade@gmail.com>
Tue, 25 Aug 2009 18:16:36 +0000 (21:16 +0300)
First step to show the dialog while downloading the stuff.

src/aa_selection_dialog.py
src/album_art_panel.py

index 8b0fbce..aaa1910 100644 (file)
@@ -1,15 +1,32 @@
 import hildon
 import gtk
+from album_art import MussorgskyAlbumArt
 
 class AlbumArtSelectionDialog (gtk.Dialog):
 
-    def __init__ (self, parent, size):
+    def __init__ (self, parent, artist, album, size, downloader=None):
+        """
+        parent window, amount of images to offer
+        Optionally downloader (for testing porpouses)
+        """
         gtk.Dialog.__init__ (self,
                              "Select album art", parent,
                              gtk.DIALOG_DESTROY_WITH_PARENT,
                              (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))
-        self.__create_view (size)
+        self.artist = artist
+        self.album = album
         self.size = size
+        self.__create_view (size)
+
+        if (downloader):
+            self.downloader = downloader
+        else:
+            self.downloader = MussorgskyAlbumArt ()
+        self.paths = self.downloader.get_alternatives (album, artist, 4)
+        self.selection_img = None
+        self.selection_thumb = None
+        self.__populate (self.paths)
+
 
     def __create_view (self, size):
         hbox = gtk.HBox (homogeneous=True)
@@ -31,7 +48,7 @@ class AlbumArtSelectionDialog (gtk.Dialog):
 
         self.vbox.add (hbox)
 
-    def populate (self, paths):
+    def __populate (self, paths):
 
         for i in range (0, self.size):
             if (len(paths) > i):
@@ -41,21 +58,35 @@ class AlbumArtSelectionDialog (gtk.Dialog):
                 self.images[i].set_from_stock (gtk.STOCK_CDROM, gtk.ICON_SIZE_DIALOG)
 
     def click_on_img (self, widget, event, position):
+        self.selection_img, self.selection_thumb = self.downloader.save_alternative (self.artist,
+                                                                                     self.album,
+                                                                                     self.paths[position])
         self.response (position)
 
+    def get_selection (self):
+        return (self.selection_img, self.selection_thumb)
+
+    
+
 if __name__ == "__main__":
 
-    ALTERNATIVES = ["../hendrix.jpeg", "../hoover.jpeg", "../dylan.jpeg"]
+    class MockDownloader:
+        def __init__ (self):
+            self.alt = ["../hendrix.jpeg", "../hoover.jpeg", "../dylan.jpeg"]
+        def get_alternatives (self, album, artist, amount):
+            return self.alt [0:amount]
+        def save_alternative (self, artist, album, img):
+            return ("/home/user/.cache/media-art/" + img, "/home/user/.thumbnails/normal/" + img)
+                              
 
     def clicked_button (self):
-        aadd = AlbumArtSelectionDialog (w, 4)
+        aadd = AlbumArtSelectionDialog (w, "rory gallagher", "irish tour", 4, MockDownloader (ALTERNATIVES))
         aadd.show_all ()
-        aadd.populate (ALTERNATIVES)
         response = aadd.run ()
         if response == gtk.RESPONSE_CLOSE or response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_REJECT:
             print "Noooo"
         else:
-            print "Selected", response
+            print "Selected", aadd.get_selection ()
         aadd.hide ()
         
     w = gtk.Window ()
index 6788d19..cbb7074 100644 (file)
@@ -3,7 +3,6 @@ import hildon
 import gtk, gobject
 from album_art_spec import getCoverArtThumbFileName
 from download_dialog import MussorgskyAlbumArtDownloadDialog
-from album_art import MussorgskyAlbumArt
 from utils import escape_html
 from aa_selection_dialog import AlbumArtSelectionDialog
 
@@ -68,19 +67,13 @@ class MussorgskyAlbumArtPanel (hildon.StackableWindow):
         it = treeview.get_model ().get_iter (path)
         album = treeview.get_model ().get_value (it, 3)
         artist = treeview.get_model ().get_value (it, 2)
-        if (not self.downloader):
-            self.downloader = MussorgskyAlbumArt ()
-        
-        dialog = AlbumArtSelectionDialog (self, 4)    
-        dialog.show_all ()
 
-        paths = self.downloader.get_alternatives (album, artist, 4)        
-        dialog.populate (paths)
+        dialog = AlbumArtSelectionDialog (self, artist, album, 4)
+        dialog.show_all ()
         
         response = dialog.run ()
         if (response > -1):
-            assert response < len (paths)
-            (img, thumb) = self.downloader.save_alternative (artist, album, paths[response])
+            (img, thumb) = dialog.get_selection ()
             pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (thumb, 64, 64)
             treeview.get_model ().set (it, 1, pixbuf)
         dialog.destroy ()