Misc code fixes
[maevies] / src / mvs-minfo-provider-service.c
index f35150a..43b67a9 100644 (file)
 
 #include "mvs-minfo-provider-service.h"
 #include "mvs-minfo-provider.h"
+#include "mvs-tmdb-movie-service.h"
+#include "mvs-tmdb-movie.h"
+#include "mvs-watc-movie-service.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)
 
@@ -45,6 +52,7 @@ mvs_minfo_provider_service_signals[LAST_SIGNAL] = { 0 };
 struct _MvsMInfoProviderServicePrivate {
         MvsMInfoProvider *minfo_provider;
         DBusGConnection *connection;
+        guint search_id;
 };
 
 gboolean
@@ -60,11 +68,57 @@ mvs_minfo_provider_service_query (MvsMInfoProviderService *self,
 #include "mvs-minfo-provider-service-glue.h"
 
 static void
-response_received_cb (MvsMInfoProvider *provider, gpointer response,
+response_received_cb (MvsMInfoProvider *provider, guint service, GList *list,
                       gpointer user_data)
 {
         MvsMInfoProviderService *self = MVS_MINFO_PROVIDER_SERVICE (user_data);
-        g_signal_emit (self, mvs_minfo_provider_service_signals[RESPONSE_RECEIVED], 0);
+        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);
+
+        /* TODO We left the movie var unused to keep a warning
+         * remembering that DBus objects aren't being freed
+         * when they aren't needed anymore */
+        for (iter = list; iter; iter = iter->next) {
+                if (MVS_IS_TMDB_MOVIE (iter->data)) {
+                        MvsTmdbMovie *tmdb_movie = MVS_TMDB_MOVIE (iter->data);
+                        gchar *uid_suffix = g_strdup_printf ("%d_%s",
+                                        self->priv->search_id,
+                                        mvs_tmdb_movie_get_id (tmdb_movie));
+
+                        MvsTmdbMovieService *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);
+                        MvsWatcMovieService *movie = mvs_watc_movie_service_new (
+                                        self->priv->connection,
+                                        watc_movie, uid_suffix);
+                        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, movie_interface, object_paths);
+        g_strfreev (object_paths);
+        g_free (movie_interface);
+        self->priv->search_id++;
 }
 
 static void
@@ -155,9 +209,11 @@ mvs_minfo_provider_service_class_init (MvsMInfoProviderServiceClass *klass)
                          0,
                          NULL,
                          NULL,
-                         g_cclosure_marshal_VOID__VOID,
+                         mvs_marshal_VOID__STRING_POINTER,
                          G_TYPE_NONE,
-                         0,
+                         2,
+                         G_TYPE_STRING,
+                         G_TYPE_STRV,
                          NULL);
 }
 
@@ -167,6 +223,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);