import dbus
import gobject
from dbus import glib
-import random
import gtk
+from dbus.exceptions import DBusException
gobject.threads_init()
glib.init_threads()
class MovieManager:
- def __init__(self, callback):
- self.bus = dbus.SessionBus()
-
- self.minfo_provider = self.bus.get_object(MINFO_PROVIDER_BUS_NAME,
- '/MInfoProvider')
- self.minfo_interface = dbus.Interface(self.minfo_provider,
- dbus_interface = MINFO_PROVIDER_INTERFACE)
- self.minfo_interface.connect_to_signal("ResponseReceived",
- self._on_response_received)
- self.callback = callback
-
- def query(self, movie_name = '', query_type = TMDB):
- self.minfo_interface.Query(query_type, movie_name)
-
- def _on_response_received(self, object_paths, sender = None):
+ def __init__(self, response_received_cb=None):
+ self.response_received_cb = response_received_cb
+ self._bus = None
+ self._provider = None
+
+ self._bus = dbus.SessionBus()
+
+ def _get_provider(self):
+ if not self._provider:
+ self._provider = self._create_minfo_provider()
+ return self._provider
+
+ def _create_minfo_provider(self):
+ provider_proxy = self._bus.get_object(MINFO_PROVIDER_BUS_NAME,
+ '/MInfoProvider')
+ provider_interface = dbus.Interface(provider_proxy,
+ dbus_interface=MINFO_PROVIDER_INTERFACE)
+ provider_interface.connect_to_signal('ResponseReceived',
+ self._on_response_received)
+ return provider_interface
+
+ def query(self, movie_name='', query_type=TMDB):
+ try:
+ self._get_provider().Query(query_type, movie_name)
+ except DBusException:
+ self._on_response_received([])
+
+ def _on_response_received(self, object_paths):
movies = []
for path in object_paths:
- movies.append(self._create_from_path(path))
-
- self.callback(movies)
-
- def _create_from_path(self, object_path):
- dbus_movie = self.bus.get_object(TMDB_MOVIE_BUS_NAME,
- object_path)
- return MovieDecorator(dbus_movie.GetTitle(dbus_interface = TMDB_MOVIE_INTERFACE))
-
-class MovieDecorator:
-
- def __init__(self, name):
- self._name = name
- pass
-
- def get_name(self):
- return self._name
-
- def get_length(self):
- return "%sh:%sm" % (random.randrange(1, 2), random.randrange(0, 59))
-
- def get_score(self):
- return "%s" % (random.randrange(6, 9))
+ movies.append(MovieProxy(self._bus, path))
+
+ if self.response_received_cb:
+ self.response_received_cb(movies)
+
+class MovieImage:
+ def __init__(self, image_struct):
+ self._type, self._url, self._size, self._id = image_struct
+
+ def get_url(self):
+ return self._url
+
+ def get_id(self):
+ return self._id
+
+ def get_size(self):
+ return self._size
+
+ 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):
+ self._bus = bus
+ self.interface = self._create_movie_interface(object_path)
+ self.fields = ['Title', 'Release date', 'Rating', 'Popularity']
+ self._images = self._retrieve_images()
+
+ def _create_movie_interface(self, object_path):
+ proxy = self._bus.get_object(TMDB_MOVIE_BUS_NAME,
+ object_path)
+ interface = dbus.Interface(proxy,
+ dbus_interface=TMDB_MOVIE_INTERFACE)
+ return interface
+
+ def _retrieve_images(self):
+ images = { }
+ dbus_images = self.interface.GetImages()
+ 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):
+ if field == 'Title':
+ return self.get_title()
+ elif field == 'Release date':
+ return self.get_released()
+ elif field == 'Rating':
+ return self.get_rating()
+ elif field == 'Popularity':
+ return self.get_popularity()
+ else:
+ return ''
+
+ def get_title(self):
+ return self.interface.GetTitle()
+
+ def get_popularity(self):
+ return self.interface.GetPopularity()
+
+ def get_rating(self):
+ return self.interface.GetRating()
+
+ def get_image(self, type, size):
+ return self._images[type][size]
+
+ def get_released(self):
+ return self.interface.GetReleased()
def get_info(self):
- return "<b>%s</b>\n<small><i>Length: </i>%s || <i>Score: </i>%s</small>" % (
- self.get_name(),
- self.get_length(),
- self.get_score())
-
- def get_image(self):
+ return ('<b>%(title)s</b>\n<small><i>Popularity: </i>%(popularity)s'
+ ' <i>Rating: </i>%(rating)s <i>Released: </i>'
+ '%(released)s</small>' %
+ {'title' : self.get_title(),
+ 'popularity' : self.get_popularity(),
+ 'rating' : self.get_rating(),
+ 'released' : self.get_released()})
+
+ def get_overview(self):
+ return self.interface.GetOverview()
+
+ def get_placeholder_image(self):
return self._get_placeholder_pixbuf()
def _get_placeholder_pixbuf(self):