X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmvs-minfo-provider.c;h=63b6687dcfba0165343409cd21100019b27c2f92;hb=bfa6bea282c11329290d8263b1c95582aa6bce69;hp=4cb405a9fd703480ce4b751372b08c19037d1bd9;hpb=764bb2bddc41b353e0f799ffae1404a74da6a8ed;p=maevies diff --git a/src/mvs-minfo-provider.c b/src/mvs-minfo-provider.c index 4cb405a..63b6687 100644 --- a/src/mvs-minfo-provider.c +++ b/src/mvs-minfo-provider.c @@ -23,6 +23,7 @@ #include #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; + + /* */ + + 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; }