Fixed test to support signals carrying service
[maevies] / src / mvs-minfo-provider-service.c
index 1e6e049..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)
 
@@ -47,6 +51,7 @@ mvs_minfo_provider_service_signals[LAST_SIGNAL] = { 0 };
 struct _MvsMInfoProviderServicePrivate {
         MvsMInfoProvider *minfo_provider;
         DBusGConnection *connection;
+        guint search_id;
 };
 
 gboolean
@@ -62,30 +67,53 @@ 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);
-        MvsTMDBMovieService *movie = NULL;
+        MvsTmdbMovieService *movie = NULL;
         GError *error = NULL;
         GList *iter = NULL;
         gchar  **object_paths= g_new0 (gchar*, g_list_length (list) + 1);
+        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);
-
-                        mvs_tmdb_movie_print (tmdb_movie);
-                        movie = mvs_tmdb_movie_service_new (self->priv->connection, tmdb_movie, i);
-                        object_paths[i] = g_strdup_printf ("/TMDBMovie/%d", i);
+                        gchar *uid_suffix = g_strdup_printf ("%d_%s",
+                                        self->priv->search_id,
+                                        mvs_tmdb_movie_get_id (tmdb_movie));
+
+                        movie = mvs_tmdb_movie_service_new (self->priv->connection,
+                                        tmdb_movie, uid_suffix);
+                        object_paths[i] = g_strdup_printf ("/TMDBMovie/%s",
+                                        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;
 
-        g_signal_emit (self, mvs_minfo_provider_service_signals[RESPONSE_RECEIVED], 0, object_paths);
+        g_signal_emit (self, mvs_minfo_provider_service_signals[RESPONSE_RECEIVED],
+                       0, movie_interface, object_paths);
         g_strfreev (object_paths);
+        g_free (movie_interface);
+        self->priv->search_id++;
 }
 
 static void
@@ -176,9 +204,10 @@ mvs_minfo_provider_service_class_init (MvsMInfoProviderServiceClass *klass)
                          0,
                          NULL,
                          NULL,
-                         g_cclosure_marshal_VOID__POINTER,
+                         mvs_marshal_VOID__STRING_POINTER,
                          G_TYPE_NONE,
-                         1,
+                         2,
+                         G_TYPE_STRING,
                          G_TYPE_STRV,
                          NULL);
 }
@@ -189,6 +218,7 @@ mvs_minfo_provider_service_init (MvsMInfoProviderService *self)
         self->priv = GET_PRIVATE (self);
         self->priv->minfo_provider = mvs_minfo_provider_new ();
         self->priv->connection = NULL;
+        self->priv->search_id = 0;
 
         g_signal_connect (self->priv->minfo_provider, "response-received",
                           G_CALLBACK (response_received_cb), self);