Initial support for multiple query services
authorSimón Pena <spenap@gmail.com>
Sun, 20 Jun 2010 17:38:21 +0000 (19:38 +0200)
committerSimón Pena <spenap@gmail.com>
Sun, 20 Jun 2010 17:38:21 +0000 (19:38 +0200)
* The signal is updated to carry the interface
* The array of object paths is built for the WATC movies
* The service is read from the movie info provider

src/mvs-minfo-provider-service.c
src/mvs-minfo-provider.c
ui/maeviesui/maeviesui/gui.py
ui/maeviesui/util/moviemanager.py

index 56a3e38..f6cf604 100644 (file)
 #include "mvs-minfo-provider.h"
 #include "mvs-tmdb-movie-service.h"
 #include "mvs-tmdb-movie.h"
+#include "mvs-watc-movie.h"
 #include "mvs-marshal.h"
 
 #define MINFO_PROVIDER_SERVICE_OBJECT_PATH "/MInfoProvider"
 #define MINFO_PROVIDER_SERVICE_NAME "com.simonpena.maevies.minfoprovider"
 #define TMDB_MOVIE_INTERFACE "com.simonpena.maevies.tmdbmovie"
+#define WATC_MOVIE_INTERFACE "com.simonpena.maevies.watcmovie"
 
 G_DEFINE_TYPE (MvsMInfoProviderService, mvs_minfo_provider_service, G_TYPE_OBJECT)
 
@@ -65,7 +67,7 @@ mvs_minfo_provider_service_query (MvsMInfoProviderService *self,
 #include "mvs-minfo-provider-service-glue.h"
 
 static void
-response_received_cb (MvsMInfoProvider *provider, GList *list,
+response_received_cb (MvsMInfoProvider *provider, guint service, GList *list,
                       gpointer user_data)
 {
         MvsMInfoProviderService *self = MVS_MINFO_PROVIDER_SERVICE (user_data);
@@ -73,9 +75,13 @@ response_received_cb (MvsMInfoProvider *provider, GList *list,
         GError *error = NULL;
         GList *iter = NULL;
         gchar  **object_paths= g_new0 (gchar*, g_list_length (list) + 1);
-        gchar *movie_interface = g_strdup (TMDB_MOVIE_INTERFACE);
+        gchar *movie_interface = NULL;
         guint i = 0;
 
+        movie_interface = service == MVS_SERVICE_TMDB ?
+                        g_strdup (TMDB_MOVIE_INTERFACE):
+                        g_strdup (WATC_MOVIE_INTERFACE);
+
         for (iter = list; iter; iter = iter->next) {
                 if (MVS_IS_TMDB_MOVIE (iter->data)) {
                         MvsTmdbMovie *tmdb_movie = MVS_TMDB_MOVIE (iter->data);
@@ -89,6 +95,16 @@ response_received_cb (MvsMInfoProvider *provider, GList *list,
                                         uid_suffix);
                         g_free (uid_suffix);
                 }
+                else if (MVS_IS_WATC_MOVIE (iter->data)) {
+                        MvsWatcMovie *watc_movie = MVS_WATC_MOVIE (iter->data);
+                        gchar *uid_suffix = g_strdup_printf ("%d_%d",
+                                        self->priv->search_id,
+                                        i);
+                        /* TODO: create watc_movie service */
+                        object_paths[i] = g_strdup_printf ("/WATCMovie/%s",
+                                        uid_suffix);
+                        g_free (uid_suffix);
+                }
                 i++;
         }
         object_paths[i] = NULL;
index afc18c4..48db5cb 100644 (file)
@@ -119,15 +119,18 @@ mvs_minfo_provider_class_init (MvsMInfoProviderClass *klass)
                                       TMDB_FORMAT,
                                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
-        signals[RESPONSE_RECEIVED] = g_signal_new ("response-received", MVS_TYPE_MINFO_PROVIDER,
+        signals[RESPONSE_RECEIVED] = g_signal_new ("response-received",
+                        MVS_TYPE_MINFO_PROVIDER,
                         G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
                         0,
                         NULL,
                         NULL,
-                        g_cclosure_marshal_VOID__POINTER,
+                        g_cclosure_marshal_VOID__UINT_POINTER,
                         G_TYPE_NONE,
-                        1,
-                        G_TYPE_POINTER);
+                        2,
+                        G_TYPE_UINT,
+                        G_TYPE_POINTER,
+                        NULL);
 }
 
 static void
@@ -315,6 +318,7 @@ process_response_cb (SoupSession *session, SoupMessage *message,
         MvsMInfoProvider *self = MVS_MINFO_PROVIDER (user_data);
         const gchar *mime = NULL;
         GList *list = NULL;
+        guint service;
 
         if (!SOUP_STATUS_IS_SUCCESSFUL (message->status_code) ||
                         message->response_body->length <= 0) {
@@ -327,15 +331,19 @@ process_response_cb (SoupSession *session, SoupMessage *message,
                                 (message->response_headers, NULL);
                 g_message ("Mime type: %s\n", mime);
 
-                if (g_strcmp0 (mime, "text/xml") == 0)
+                if (g_strcmp0 (mime, "text/xml") == 0) {
                         list = parse_xml (message->response_body->data,
                                         message->response_body->length);
-                else if (g_strcmp0 (mime, "application/json") == 0)
+                        service = MVS_SERVICE_TMDB;
+                }
+                else if (g_strcmp0 (mime, "application/json") == 0) {
                         list = parse_json (message->response_body->data,
                                         message->response_body->length);
+                        service = MVS_SERVICE_WATC;
+                }
         }
 
-        g_signal_emit (self, signals[RESPONSE_RECEIVED], 0, list);
+        g_signal_emit (self, signals[RESPONSE_RECEIVED], 0, service, list);
 }
 
 static gchar *
index 4fd83f3..0fb52fd 100644 (file)
@@ -31,6 +31,8 @@ from maeviesui.util.asyncworker import AsyncWorker, AsyncItem
 from maeviesui.util.util import image_downloader
 from maeviesui.util.moviemanager import MovieManager
 
+moviemanager = MovieManager()
+
 class Maevies(hildon.StackableWindow):
 
     ACTION_SEARCH = 0
@@ -112,10 +114,10 @@ class Maevies(hildon.StackableWindow):
 
 class SearchDialog(gtk.Dialog):
 
-    _search_fields = [
-           'Movies',
-           'People',
-           ]
+    TMDB_SEARCH = 0
+    WATC_SEARCH = 1
+    search_fields = {TMDB_SEARCH:'TMDb',
+                      WATC_SEARCH:'WATC'}
 
     def __init__(self, parent):
         super(SearchDialog, self).__init__(parent=parent,
@@ -143,13 +145,13 @@ class SearchDialog(gtk.Dialog):
     def _create_picker_button(self):
         self._picker_button = hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT,
                                                   hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
-        self._picker_button.set_title('Search for')
+        self._picker_button.set_title('Search on')
 
         selector = hildon.TouchSelector(text=True)
         selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
 
-        for field in self._search_fields:
-            selector.append_text(field)
+        for search_method in [self.TMDB_SEARCH, self.WATC_SEARCH]:
+            selector.append_text(self.search_fields[search_method])
 
         self._picker_button.set_selector(selector)
         self._picker_button.set_active(0)
@@ -160,7 +162,7 @@ class SearchDialog(gtk.Dialog):
         return self._search_entry.get_text()
 
     def get_search_category(self):
-        return self._search_fields[self._picker_button.get_active()]
+        return self._picker_button.get_active()
 
 class ResultsWindow(hildon.StackableWindow):
 
@@ -170,7 +172,7 @@ class ResultsWindow(hildon.StackableWindow):
 
         self.add(self._create_contents())
 
-        self.moviemanager = MovieManager(response_received_cb=self._response_received_cb)
+        moviemanager.response_received_cb = self._response_received_cb
         self.show_all()
 
     def _create_contents(self):
@@ -188,15 +190,15 @@ class ResultsWindow(hildon.StackableWindow):
     def start_search(self, search_term, search_category):
         self._show_banner(search_term, search_category)
         hildon.hildon_gtk_window_set_progress_indicator(self, True)
-        self.moviemanager.query(search_term)
+        moviemanager.query(search_term, search_category)
 
     def _response_received_cb(self, movies):
         self._movies_view.add_movies(movies)
         hildon.hildon_gtk_window_set_progress_indicator(self, False)
 
     def _show_banner(self, search_term, search_category):
-        message = ('Searching <i>%(category)s</i> for <i>%(term)s</i>' %
-                   {'category': search_category,
+        message = ('Searching on <i>%(category)s</i> for <i>%(term)s</i>' %
+                   {'category': SearchDialog.search_fields[search_category],
                     'term' : search_term})
         banner = hildon.hildon_banner_show_information_with_markup(self,
                                                                    'ignored',
index 3879fe0..23fbcd6 100644 (file)
@@ -65,8 +65,12 @@ class MovieManager:
 
     def _on_response_received(self, interface, object_paths):
         movies = []
-        for path in object_paths:
-            movies.append(MovieProxy(self._bus, path))
+
+        if interface == TMDB_MOVIE_INTERFACE:
+            for path in object_paths:
+                movies.append(MovieProxy(self._bus, path))
+        else:
+            pass
 
         if self.response_received_cb:
             self.response_received_cb(movies)