Movie Info Provider: Added async. query support
authorSimón Pena <spenap@gmail.com>
Sun, 16 May 2010 17:03:44 +0000 (19:03 +0200)
committerSimón Pena <spenap@gmail.com>
Sun, 16 May 2010 17:31:55 +0000 (19:31 +0200)
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
src/mvs-minfo-provider.h

index 868ae01..ca63a3d 100644 (file)
@@ -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
index 30bffa3..2d0a3e1 100644 (file)
@@ -20,6 +20,7 @@
 #define _MVS_MINFO_PROVIDER
 
 #include <glib-object.h>
+#include <libsoup/soup.h>
 
 G_BEGIN_DECLS