ui: Added support for displaying WATC service results
[maevies] / ui / maeviesui / util / moviemanager.py
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