From daf8341b63425279f5e1c8cd5f2f1dbe6c7a1008 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sim=C3=B3n=20Pena?= Date: Sun, 20 Jun 2010 17:22:59 +0200 Subject: [PATCH] ui: Improved image fetching * The 'mid' size of the poster image is downloaded now * If we find it already fetched, we don't download it again --- ui/maeviesui/maeviesui/gui.py | 49 +++++++++++++++++++++++-------------- ui/maeviesui/util/moviemanager.py | 21 +++++++++++----- 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/ui/maeviesui/maeviesui/gui.py b/ui/maeviesui/maeviesui/gui.py index ae1393e..4fd83f3 100644 --- a/ui/maeviesui/maeviesui/gui.py +++ b/ui/maeviesui/maeviesui/gui.py @@ -246,7 +246,7 @@ class MoviesListStore(gtk.ListStore): def add(self, movies_found): self.clear() for movie in movies_found: - row = {self.IMAGE_COLUMN: movie.get_image(), + row = {self.IMAGE_COLUMN: movie.get_placeholder_image(), self.INFO_COLUMN: movie.get_info(), self.MOVIE_COLUMN: movie, } @@ -263,28 +263,39 @@ class AboutDialog(gtk.Dialog): class MovieWindow(hildon.StackableWindow): - def _create_movie_image(self, movie): + def _fetch_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() + movie_image = movie.get_image('poster', 'mid') + image_file = os.path.abspath('/tmp/' + movie_image.get_id() + '.jpg') + + if os.path.isfile(image_file): + image.set_from_pixbuf(gtk.gdk.pixbuf_new_from_file_at_size(image_file, + 256, + 256)) + else: + image.set_from_pixbuf(gtk.IconTheme().load_icon('general_video', + 256, 0)) + banner = hildon.hildon_banner_show_information_with_markup(self, + 'ignored', + 'Fetching movie poster') + banner.set_timeout(constants.TIMEOUT_TIME_MILLIS) + hildon.hildon_gtk_window_set_progress_indicator(self, True) + + async_item = AsyncItem(image_downloader, (movie_image.get_url(), + '/tmp/' + movie_image.get_id()), + self._set_fetched_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)) + def _set_fetched_image(self, image, target, error): + if not 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): @@ -295,7 +306,7 @@ class MovieWindow(hildon.StackableWindow): upper_content = gtk.HBox(False, 40) upper_content.set_border_width(20) - image = self._create_movie_image(movie) + image = self._fetch_movie_image(movie) side_content = gtk.VBox(False, 30) diff --git a/ui/maeviesui/util/moviemanager.py b/ui/maeviesui/util/moviemanager.py index 8cfc617..bee0472 100644 --- a/ui/maeviesui/util/moviemanager.py +++ b/ui/maeviesui/util/moviemanager.py @@ -87,6 +87,12 @@ class MovieImage: def get_type(self): return self._type + def __str__(self): + str = '' + for field in [self._id, self._url, self._type, self._size]: + str += '\t%s\n' % field + return str + class MovieProxy: def __init__(self, bus, object_path): @@ -103,10 +109,13 @@ class MovieProxy: return interface def _retrieve_images(self): - images = [] + images = { } dbus_images = self.interface.GetImages() - for image in dbus_images: - images.append(MovieImage(image)) + for dbus_image in dbus_images: + image = MovieImage(dbus_image) + if not images.has_key(image.get_type()): + images[image.get_type()] = {} + images[image.get_type()][image.get_size()] = image return images def get_value(self, field): @@ -130,8 +139,8 @@ class MovieProxy: def get_rating(self): return self.interface.GetRating() - def get_images(self): - return self._images + def get_image(self, type, size): + return self._images[type][size] def get_released(self): return self.interface.GetReleased() @@ -148,7 +157,7 @@ class MovieProxy: def get_overview(self): return self.interface.GetOverview() - def get_image(self): + def get_placeholder_image(self): return self._get_placeholder_pixbuf() def _get_placeholder_pixbuf(self): -- 1.7.9.5