Misc code fixes
[maevies] / src / mvs-minfo-provider.c
index 4cb405a..63b6687 100644 (file)
@@ -23,6 +23,7 @@
 #include <json-glib/json-glib.h>
 
 #include "mvs-tmdb-movie.h"
+#include "mvs-tmdb-image.h"
 #include "mvs-watc-movie.h"
 
 #define TMDB_API_KEY "249e1a42df9bee09fac5e92d3a51396b"
@@ -118,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
@@ -143,21 +147,62 @@ mvs_minfo_provider_new (void)
         return g_object_new (MVS_TYPE_MINFO_PROVIDER, NULL);
 }
 
+static MvsTmdbImage*
+create_tmdb_image (xmlNodePtr node)
+{
+        MvsTmdbImage *image = mvs_tmdb_image_new ();
+        gchar *value = NULL;
+        int i;
+
+        /* <image type="poster"
+         * url="http://....jpg"
+         * size="original"
+         * id="4bc91...e007304"/> */
+
+        for (i = 0; i < LAST_FIELD; i ++) {
+
+                const gchar *image_field = mvs_tmdb_image_get_field (i);
+
+                value = xmlGetProp (node, image_field);
+                g_object_set (image, image_field, value, NULL);
+
+                g_free (value);
+        }
+
+        return image;
+}
+
 static MvsTmdbMovie*
 create_tmdb_movie (xmlNodePtr node)
 {
         xmlNodePtr cur_node = NULL;
         MvsTmdbMovie *movie_info = mvs_tmdb_movie_new ();
+        GList *image_list = NULL;
 
         /* We use the loop to append each property to the movie object */
         for (cur_node = node; cur_node; cur_node = cur_node->next) {
                 if (cur_node->type == XML_ELEMENT_NODE) {
-                        gchar *value = xmlNodeGetContent (cur_node);
-
-                        g_object_set (movie_info, cur_node->name, value, NULL);
-                        g_free (value);
+                        gchar *value = NULL;
+
+                        if (g_strcmp0 (cur_node->name, "images") == 0) {
+                                xmlNodePtr cur_image = NULL;
+                                for (cur_image = cur_node->children; cur_image;
+                                                cur_image = cur_image->next) {
+
+                                        MvsTmdbImage *tmdb_image = create_tmdb_image (cur_image);
+                                        image_list = g_list_append (image_list, tmdb_image);
+                                }
+                        }
+                        else {
+                                value = xmlNodeGetContent (cur_node);
+                                g_object_set (movie_info, cur_node->name, value, NULL);
+                                g_free (value);
+                        }
                 }
         }
+
+        mvs_tmdb_movie_set_images (movie_info, image_list);
+
         return movie_info;
 }
 
@@ -191,7 +236,7 @@ parse_xml (const char *xml_data, goffset length)
                         NULL,
                         NULL,
                         XML_PARSE_NOBLANKS | XML_PARSE_RECOVER);
-        g_return_if_fail (document);
+        g_return_val_if_fail (document, NULL);
 
         xmlXPathContextPtr context_ptr = xmlXPathNewContext (document);
 
@@ -275,6 +320,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) {
@@ -287,15 +333,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 *
@@ -323,6 +373,7 @@ get_query_uri (MvsMInfoProvider *self, const char *query)
                 g_warning ("Service unsupported\n");
         }
 
+        g_message ("%s", uri);
         return uri;
 }