ui: Added support for fetching movie images
[maevies] / ui / maeviesui / maeviesui / gui.py
index beb191f..ae1393e 100644 (file)
@@ -19,6 +19,7 @@
 ###########################################################################
 
 import pygtk
+import os
 pygtk.require('2.0')
 import gtk
 import hildon
@@ -26,6 +27,8 @@ import pango
 import gobject
 
 from maeviesui.util import constants
+from maeviesui.util.asyncworker import AsyncWorker, AsyncItem
+from maeviesui.util.util import image_downloader
 from maeviesui.util.moviemanager import MovieManager
 
 class Maevies(hildon.StackableWindow):
@@ -222,7 +225,8 @@ class MoviesView(gtk.TreeView):
 
     def add_movies(self, movie_list):
         model = self.get_model()
-        model.add(movie_list)
+        if model:
+            model.add(movie_list)
 
     def get_movie_from_path(self, path):
         model = self.get_model()
@@ -259,6 +263,30 @@ class AboutDialog(gtk.Dialog):
 
 class MovieWindow(hildon.StackableWindow):
 
+    def _create_movie_image(self, movie):
+        image = gtk.Image()
+        image.set_from_pixbuf(gtk.IconTheme().load_icon('general_video',
+                                                        256, 0))
+        banner = hildon.hildon_banner_show_information_with_markup(self,
+                                                                   'ignored',
+                                                                   'Fetching movie cover')
+        banner.set_timeout(constants.TIMEOUT_TIME_MILLIS)
+        hildon.hildon_gtk_window_set_progress_indicator(self, True)
+
+        async_item = AsyncItem(image_downloader, (movie.get_images()[0].get_url(), '/tmp/' + movie.get_title()),
+                               self._set_downloaded_image, (image,))
+        self.async_worker.queue.put(async_item)
+        self.async_worker.start()
+
+        return image
+
+    def _set_downloaded_image(self, image, target, error):
+        image_file = os.path.abspath(target)
+        image.set_from_pixbuf(gtk.gdk.pixbuf_new_from_file_at_size(image_file,
+                                                                   256,
+                                                                   256))
+        hildon.hildon_gtk_window_set_progress_indicator(self, False)
+
     def _create_contents(self, movie):
         main_area = hildon.PannableArea()
 
@@ -267,9 +295,7 @@ class MovieWindow(hildon.StackableWindow):
         upper_content = gtk.HBox(False, 40)
         upper_content.set_border_width(20)
 
-        image = gtk.Image()
-        image.set_from_pixbuf(gtk.IconTheme().load_icon('mediaplayer_default_album',
-                                                        256, 0))
+        image = self._create_movie_image(movie)
 
         side_content = gtk.VBox(False, 30)
 
@@ -306,6 +332,7 @@ class MovieWindow(hildon.StackableWindow):
 
     def __init__(self, movie):
         super(MovieWindow, self).__init__()
+        self.async_worker = AsyncWorker()
         self.set_title('Movie info')
         self.add(self._create_contents(movie))
         self.show_all()