4 * This file is part of maevies
5 * Copyright (C) 2010 Simón Pena <spenap@gmail.com>
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation; either version 3 of the
10 * License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
19 #include "mvs-minfo-provider.h"
21 #define TMDB_API_KEY "249e1a42df9bee09fac5e92d3a51396b"
22 #define TMDB_LANGUAGE "en"
23 #define TMDB_FORMAT "xml"
24 #define TMDB_METHOD "Movie.search"
25 #define TMDB_BASE_URL "http://api.themoviedb.org/2.1/%s/%s/%s/%s/%s"
27 G_DEFINE_TYPE (MvsMInfoProvider, mvs_minfo_provider, G_TYPE_OBJECT)
34 #define GET_PRIVATE(o) \
35 (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_MINFO_PROVIDER, MvsMInfoProviderPrivate))
37 struct _MvsMInfoProviderPrivate {
47 signals[LAST_SIGNAL] = { 0 };
51 mvs_minfo_provider_get_property (GObject *object, guint property_id,
52 GValue *value, GParamSpec *pspec)
54 MvsMInfoProvider *self = MVS_MINFO_PROVIDER (object);
56 switch (property_id) {
58 g_value_set_string (value, self->priv->format);
61 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
66 mvs_minfo_provider_set_property (GObject *object, guint property_id,
67 const GValue *value, GParamSpec *pspec)
69 MvsMInfoProvider *self = MVS_MINFO_PROVIDER (object);
71 switch (property_id) {
73 mvs_minfo_provider_set_format (self,
74 g_value_get_string (value));
77 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
82 mvs_minfo_provider_finalize (GObject *object)
84 MvsMInfoProvider *self = MVS_MINFO_PROVIDER (object);
86 g_free (self->priv->format);
88 G_OBJECT_CLASS (mvs_minfo_provider_parent_class)->finalize (object);
92 mvs_minfo_provider_class_init (MvsMInfoProviderClass *klass)
94 GObjectClass *object_class = G_OBJECT_CLASS (klass);
96 g_type_class_add_private (klass, sizeof (MvsMInfoProviderPrivate));
98 object_class->get_property = mvs_minfo_provider_get_property;
99 object_class->set_property = mvs_minfo_provider_set_property;
100 object_class->finalize = mvs_minfo_provider_finalize;
102 g_object_class_install_property
103 (object_class, PROP_FORMAT,
104 g_param_spec_string ("format", "The format", "The format",
106 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
108 signals[RESPONSE_RECEIVED] = g_signal_new ("response-received", MVS_TYPE_MINFO_PROVIDER,
113 g_cclosure_marshal_VOID__VOID,
120 mvs_minfo_provider_init (MvsMInfoProvider *self)
122 self->priv = GET_PRIVATE (self);
123 self->priv->format = NULL;
127 mvs_minfo_provider_new (void)
129 return g_object_new (MVS_TYPE_MINFO_PROVIDER, NULL);
133 parse_response (SoupSession *session, SoupMessage *message,
136 MvsMInfoProvider *self = MVS_MINFO_PROVIDER (user_data);
137 const gchar *mime = NULL;
139 if (!SOUP_STATUS_IS_SUCCESSFUL (message->status_code) ||
140 message->response_body->length <= 0) {
142 g_print ("%s\n", message->reason_phrase);
146 mime = soup_message_headers_get_content_type
147 (message->response_headers, NULL);
149 g_print ("Response OK. Mime type: %s\n", mime);
150 g_print ("Content:\n%s\n", message->response_body->data);
153 g_signal_emit (self, signals[RESPONSE_RECEIVED], 0);
157 get_query_uri (MvsMInfoProvider *self, const char *query)
159 /* METHOD/LANGUAGE/FORMAT/APIKEY/MOVIENAME */
160 gchar *uri = g_strdup_printf (TMDB_BASE_URL, TMDB_METHOD,
170 mvs_minfo_provider_query (MvsMInfoProvider *self,
173 g_return_val_if_fail (MVS_IS_MINFO_PROVIDER (self), FALSE);
175 SoupSession *session = NULL;
176 SoupMessage *message = NULL;
177 gboolean message_queued = FALSE;
179 gchar *uri = get_query_uri (self, query);
181 g_return_val_if_fail (uri, FALSE);
183 session = soup_session_async_new ();
184 message = soup_message_new ("GET", uri);
187 soup_session_queue_message (session, message,
188 parse_response, self);
189 message_queued = TRUE;
194 return message_queued;
198 mvs_minfo_provider_set_format (MvsMInfoProvider *self,
201 g_return_val_if_fail (MVS_IS_MINFO_PROVIDER (self), FALSE);
203 g_free (self->priv->format);
205 self->priv->format = g_strdup (format);