1 # -*- coding: utf-8 -*-
3 ###########################################################################
5 # Copyright (C) 2010 Simón Pena <spenap@gmail.com>
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 ###########################################################################
25 from dbus.exceptions import DBusException
27 gobject.threads_init()
30 MINFO_PROVIDER_INTERFACE = 'com.simonpena.maevies.minfoprovider'
31 MINFO_PROVIDER_BUS_NAME = 'com.simonpena.maevies.minfoprovider'
32 TMDB_MOVIE_INTERFACE = 'com.simonpena.maevies.movie'
33 TMDB_MOVIE_BUS_NAME = 'com.simonpena.maevies.tmdbmovie'
39 def __init__(self, response_received_cb = None):
40 self.response_received_cb = response_received_cb
44 self._bus = dbus.SessionBus()
46 def _get_provider(self):
47 if not self._provider:
48 self._provider = self._create_minfo_provider()
51 def _create_minfo_provider(self):
52 provider_proxy = self._bus.get_object(MINFO_PROVIDER_BUS_NAME,
54 provider_interface = dbus.Interface(provider_proxy,
55 dbus_interface = MINFO_PROVIDER_INTERFACE)
56 provider_interface.connect_to_signal("ResponseReceived",
57 self._on_response_received)
58 return provider_interface
60 def query(self, movie_name = '', query_type = TMDB):
62 self._get_provider().Query(query_type, movie_name)
64 self._on_response_received([])
66 def _on_response_received(self, object_paths):
68 for path in object_paths:
69 movies.append(MovieProxy(self._bus, path))
71 if self.response_received_cb:
72 self.response_received_cb(movies)
76 def __init__(self, bus, object_path):
78 self.interface = self._create_movie_interface(object_path)
79 self.fields = ["Title", "Release date", "Rating", "Popularity"]
81 def _create_movie_interface(self, object_path):
82 proxy = self._bus.get_object(TMDB_MOVIE_BUS_NAME,
84 interface = dbus.Interface(proxy,
85 dbus_interface = TMDB_MOVIE_INTERFACE)
88 def get_value(self, field):
90 return self.get_title()
91 elif field == "Release date":
92 return self.get_released()
93 elif field == "Rating":
94 return self.get_rating()
95 elif field == "Popularity":
96 return self.get_popularity()
101 return self.interface.GetTitle()
103 def get_popularity(self):
104 return self.interface.GetPopularity()
106 def get_rating(self):
107 return self.interface.GetRating()
109 def get_released(self):
110 return self.interface.GetReleased()
113 return "<b>%(title)s</b>\n<small><i>Popularity: </i>%(popularity)s\
114 <i>Rating: </i>%(rating)s <i>Released: </i>%(released)s</small>" % {'title' : self.get_title(),
115 'popularity' : self.get_popularity(),
116 'rating' : self.get_rating(),
117 'released' : self.get_released()}
119 def get_overview(self):
120 return self.interface.GetOverview()
123 return self._get_placeholder_pixbuf()
125 def _get_placeholder_pixbuf(self):
126 pixbuf = gtk.IconTheme().load_icon('general_video_file', 48, 0)