From fc95fbb997c01f31b0d231025dabc0a7abce5744 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sim=C3=B3n=20Pena?= Date: Sun, 20 Jun 2010 21:53:13 +0200 Subject: [PATCH] ui: Added support for displaying WATC service results * Created a GenericMovie class so TmdbMovie and WatcMovie inherit from it. * Disabled getting the MovieInfo view from a WATC movie * Checked movie image fetching behaviour so it takes into account movies without posters --- ui/maeviesui/maeviesui/gui.py | 42 +++++++------- ui/maeviesui/util/moviemanager.py | 116 +++++++++++++++++++++++++++++-------- 2 files changed, 113 insertions(+), 45 deletions(-) diff --git a/ui/maeviesui/maeviesui/gui.py b/ui/maeviesui/maeviesui/gui.py index 0fb52fd..51a580f 100644 --- a/ui/maeviesui/maeviesui/gui.py +++ b/ui/maeviesui/maeviesui/gui.py @@ -29,7 +29,7 @@ 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 +from maeviesui.util.moviemanager import MovieManager, TmdbMovie, TmdbMovieImage moviemanager = MovieManager() @@ -185,7 +185,8 @@ class ResultsWindow(hildon.StackableWindow): def _row_activated_cb(self, view, path, column): movie = view.get_movie_from_path(path) - MovieWindow(movie) + if isinstance(movie, TmdbMovie): + MovieWindow(movie) def start_search(self, search_term, search_category): self._show_banner(search_term, search_category) @@ -267,28 +268,27 @@ class MovieWindow(hildon.StackableWindow): def _fetch_movie_image(self, movie): image = gtk.Image() - + image.set_from_pixbuf(gtk.IconTheme().load_icon('general_video', + 256, 0)) 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, + if isinstance(movie_image, TmdbMovieImage): + 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() + else: + 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 diff --git a/ui/maeviesui/util/moviemanager.py b/ui/maeviesui/util/moviemanager.py index 23fbcd6..4cab594 100644 --- a/ui/maeviesui/util/moviemanager.py +++ b/ui/maeviesui/util/moviemanager.py @@ -31,6 +31,8 @@ MINFO_PROVIDER_INTERFACE = 'com.simonpena.maevies.minfoprovider' MINFO_PROVIDER_BUS_NAME = 'com.simonpena.maevies.minfoprovider' TMDB_MOVIE_INTERFACE = 'com.simonpena.maevies.tmdbmovie' TMDB_MOVIE_BUS_NAME = 'com.simonpena.maevies.tmdbmovie' +WATC_MOVIE_INTERFACE = 'com.simonpena.maevies.watcmovie' +WATC_MOVIE_BUS_NAME = 'com.simonpena.maevies.watcmovie' TMDB = 0 WATC = 1 @@ -68,14 +70,15 @@ class MovieManager: if interface == TMDB_MOVIE_INTERFACE: for path in object_paths: - movies.append(MovieProxy(self._bus, path)) - else: - pass + movies.append(TmdbMovie(self._bus, path)) + elif interface == WATC_MOVIE_INTERFACE: + for path in object_paths: + movies.append(WatcMovie(self._bus, path)) if self.response_received_cb: self.response_received_cb(movies) -class MovieImage: +class TmdbMovieImage: def __init__(self, image_struct): self._type, self._url, self._size, self._id = image_struct @@ -97,26 +100,96 @@ class MovieImage: str += '\t%s\n' % field return str -class MovieProxy: +class GenericMovie(object): - def __init__(self, bus, object_path): + def __init__(self, bus): self._bus = bus - self.interface = self._create_movie_interface(object_path) - self.fields = ['Title', 'Release date', 'Rating', 'Popularity'] - self._images = self._retrieve_images() + pass - def _create_movie_interface(self, object_path): - proxy = self._bus.get_object(TMDB_MOVIE_BUS_NAME, - object_path) + def _create_interface(self, bus_name, bus_interface, object_path): + proxy = self._bus.get_object(bus_name, + object_path) interface = dbus.Interface(proxy, - dbus_interface=TMDB_MOVIE_INTERFACE) + dbus_interface=bus_interface) return interface + def get_title(self): + return '' + + def get_info(self): + return '' + + def get_value(self, field): + return '' + + def get_image(self, type=None, size=None): + return self.get_placeholder_image() + + def get_placeholder_image(self): + return self._get_placeholder_pixbuf() + + def _get_placeholder_pixbuf(self): + pixbuf = gtk.IconTheme().load_icon('general_video_file', 48, 0) + return pixbuf + +class WatcMovie(GenericMovie): + + def __init__(self, bus, object_path): + super(WatcMovie, self).__init__(bus) + self.interface = self._create_interface(WATC_MOVIE_BUS_NAME, + WATC_MOVIE_INTERFACE, + object_path) + self.fields = ['Name', 'Year', 'Stingers'] + + def get_value(self, field): + if field == 'Name': + return self.get_title() + elif field == 'Year': + return self.get_year() + elif field == 'Stingers': + return self.get_stingers() + super(WatcMovie, self).get_value() + + def get_title(self): + return self.interface.GetName() + + def get_year(self): + return self.interface.GetYear() + + def get_stingers(self): + return self.interface.GetStingers() + + def get_info(self): + stingers = self.get_stingers() + has_stingers = '' + if stingers == 0: + has_stingers = 'Unknown' + elif stingers == 1: + has_stingers = 'Yes' + elif stingers == 2: + has_stingers = 'No' + + return ('%(title)s\nYear: %(year)s' + ' Has stingers: %(stingers)s' % + {'title' : self.get_title(), + 'year' : self.get_year(), + 'stingers' : has_stingers}) + +class TmdbMovie(GenericMovie): + + def __init__(self, bus, object_path): + super(TmdbMovie, self).__init__(bus) + self.interface = self._create_interface(TMDB_MOVIE_BUS_NAME, + TMDB_MOVIE_INTERFACE, + object_path) + self.fields = ['Title', 'Release date', 'Rating', 'Popularity'] + self._images = self._retrieve_images() + def _retrieve_images(self): images = { } dbus_images = self.interface.GetImages() for dbus_image in dbus_images: - image = MovieImage(dbus_image) + image = TmdbMovieImage(dbus_image) if not images.has_key(image.get_type()): images[image.get_type()] = {} images[image.get_type()][image.get_size()] = image @@ -131,8 +204,7 @@ class MovieProxy: return self.get_rating() elif field == 'Popularity': return self.get_popularity() - else: - return '' + super(TmdbMovie, self).get_value() def get_title(self): return self.interface.GetTitle() @@ -144,7 +216,10 @@ class MovieProxy: return self.interface.GetRating() def get_image(self, type, size): - return self._images[type][size] + if self._images.has_key(type) and self._images[type].has_key(size): + return self._images[type][size] + else: + return None def get_released(self): return self.interface.GetReleased() @@ -160,10 +235,3 @@ class MovieProxy: def get_overview(self): return self.interface.GetOverview() - - def get_placeholder_image(self): - return self._get_placeholder_pixbuf() - - def _get_placeholder_pixbuf(self): - pixbuf = gtk.IconTheme().load_icon('general_video_file', 48, 0) - return pixbuf -- 1.7.9.5