#include "mvs-minfo-provider.h"
+#define TMDB_API_KEY "249e1a42df9bee09fac5e92d3a51396b"
+#define TMDB_LANGUAGE "en"
+#define TMDB_FORMAT "xml"
+#define TMDB_METHOD "Movie.search"
+#define TMDB_BASE_URL "http://api.themoviedb.org/2.1/%s/%s/%s/%s/%s"
+
G_DEFINE_TYPE (MvsMInfoProvider, mvs_minfo_provider, G_TYPE_OBJECT)
enum {
PROP_0,
- PROP_QUERY,
+ PROP_FORMAT,
};
#define GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_MINFO_PROVIDER, MvsMInfoProviderPrivate))
struct _MvsMInfoProviderPrivate {
- gchar *query;
+ gchar *format;
};
+enum {
+ RESPONSE_RECEIVED,
+ LAST_SIGNAL
+};
+
+static guint
+signals[LAST_SIGNAL] = { 0 };
+
+
static void
mvs_minfo_provider_get_property (GObject *object, guint property_id,
GValue *value, GParamSpec *pspec)
MvsMInfoProvider *self = MVS_MINFO_PROVIDER (object);
switch (property_id) {
- /*case PROP_QUERY:
- g_value_set_string (value, self->priv->query);
- break;*/
+ case PROP_FORMAT:
+ g_value_set_string (value, self->priv->format);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
MvsMInfoProvider *self = MVS_MINFO_PROVIDER (object);
switch (property_id) {
+ case PROP_FORMAT:
+ mvs_minfo_provider_set_format (self,
+ g_value_get_string (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
mvs_minfo_provider_finalize (GObject *object)
{
MvsMInfoProvider *self = MVS_MINFO_PROVIDER (object);
- g_free (self->priv->query);
+
+ g_free (self->priv->format);
G_OBJECT_CLASS (mvs_minfo_provider_parent_class)->finalize (object);
}
object_class->set_property = mvs_minfo_provider_set_property;
object_class->finalize = mvs_minfo_provider_finalize;
- /* g_object_class_install_property
- (object_class, PROP_QUERY,
- g_param_spec_string ("query", "The query", "The query",
- NULL,
+ g_object_class_install_property
+ (object_class, PROP_FORMAT,
+ g_param_spec_string ("format", "The format", "The format",
+ TMDB_FORMAT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- */
+
+ signals[RESPONSE_RECEIVED] = g_signal_new ("response-received", MVS_TYPE_MINFO_PROVIDER,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0,
+ NULL);
}
static void
mvs_minfo_provider_init (MvsMInfoProvider *self)
{
self->priv = GET_PRIVATE (self);
- self->priv->query = NULL;
+ self->priv->format = NULL;
}
MvsMInfoProvider*
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
+mvs_minfo_provider_set_format (MvsMInfoProvider *self,
+ const gchar *format)
+{
+ g_return_val_if_fail (MVS_IS_MINFO_PROVIDER (self), FALSE);
+
+ g_free (self->priv->format);
+
+ self->priv->format = g_strdup (format);
+
+ return TRUE;
}