ui: Added support for displaying WATC service results
authorSimón Pena <spenap@gmail.com>
Sun, 20 Jun 2010 19:53:13 +0000 (21:53 +0200)
committerSimón Pena <spenap@gmail.com>
Sun, 20 Jun 2010 19:53:13 +0000 (21:53 +0200)
* 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
ui/maeviesui/util/moviemanager.py

index 0fb52fd..51a580f 100644 (file)
@@ -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
 
index 23fbcd6..4cab594 100644 (file)
@@ -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 ('<b>%(title)s</b>\n<small><i>Year: </i>%(year)s'
+                '    <i>Has stingers: </i>%(stingers)s</small>' %
+                {'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