From f0411077f3583209241846780da0fa18c3b08872 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sim=C3=B3n=20Pena?= Date: Sun, 16 May 2010 19:03:44 +0200 Subject: [PATCH] Movie Info Provider: Added async. query support Asynchronous support for querying "The Movie Database" web service is added: * An URI is built with the appropriate params * The query is enqueued, and a callback function is added * The response is extracted, and temporarily printed, in the callback function --- src/mvs-minfo-provider.c | 60 +++++++++++++++++++++++++++++++++++++++++++++- src/mvs-minfo-provider.h | 1 + 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/mvs-minfo-provider.c b/src/mvs-minfo-provider.c index 868ae01..ca63a3d 100644 --- a/src/mvs-minfo-provider.c +++ b/src/mvs-minfo-provider.c @@ -111,11 +111,69 @@ mvs_minfo_provider_new (void) return g_object_new (MVS_TYPE_MINFO_PROVIDER, NULL); } +static void +parse_response (SoupSession *session, SoupMessage *message, + gpointer user_data) +{ + MvsMInfoProvider *self = MVS_MINFO_PROVIDER (user_data); + const gchar *mime = NULL; + + if (!SOUP_STATUS_IS_SUCCESSFUL (message->status_code) || + message->response_body->length <= 0) { + + g_print ("%s\n", message->reason_phrase); + } + else { + + mime = soup_message_headers_get_content_type + (message->response_headers, NULL); + + g_print ("Response OK. Mime type: %s\n", mime); + g_print ("Content:\n%s\n", message->response_body->data); + } + + g_signal_emit (self, signals[RESPONSE_RECEIVED], 0); +} + +static gchar * +get_query_uri (MvsMInfoProvider *self, const char *query) +{ + /* METHOD/LANGUAGE/FORMAT/APIKEY/MOVIENAME */ + gchar *uri = g_strdup_printf (TMDB_BASE_URL, TMDB_METHOD, + TMDB_LANGUAGE, + self->priv->format, + TMDB_API_KEY, + query); + + return uri; +} + gboolean mvs_minfo_provider_query (MvsMInfoProvider *self, const gchar *query) { - return FALSE; + g_return_val_if_fail (MVS_IS_MINFO_PROVIDER (self), FALSE); + + SoupSession *session = NULL; + SoupMessage *message = NULL; + gboolean message_queued = FALSE; + + gchar *uri = get_query_uri (self, query); + + g_return_val_if_fail (uri, FALSE); + + session = soup_session_async_new (); + message = soup_message_new ("GET", uri); + + if (message) { + soup_session_queue_message (session, message, + parse_response, self); + message_queued = TRUE; + } + + g_free (uri); + + return message_queued; } gboolean diff --git a/src/mvs-minfo-provider.h b/src/mvs-minfo-provider.h index 30bffa3..2d0a3e1 100644 --- a/src/mvs-minfo-provider.h +++ b/src/mvs-minfo-provider.h @@ -20,6 +20,7 @@ #define _MVS_MINFO_PROVIDER #include +#include G_BEGIN_DECLS -- 1.7.9.5