summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2022-07-06 11:00:42 +0200
committerBastien Nocera <hadess@hadess.net>2022-07-06 13:00:06 +0200
commit9e9468aab5b8a1fc331bbd125bc6def8ab55b682 (patch)
treeb3c49bf9373dd5d4ef5fc412517920d816deee49
parentd40e8edd188bdcdc8246b601f19531c9a8151296 (diff)
downloadgrilo-plugins-9e9468aab5b8a1fc331bbd125bc6def8ab55b682.tar.gz
tmdb: Port to GUri and remove libsoup dependency
-rw-r--r--meson.build2
-rw-r--r--src/tmdb/grl-tmdb-request.c55
-rw-r--r--src/tmdb/grl-tmdb.c17
3 files changed, 53 insertions, 21 deletions
diff --git a/meson.build b/meson.build
index 5d20f1a..55c93ea 100644
--- a/meson.build
+++ b/meson.build
@@ -141,7 +141,7 @@ plugins = [ # NAME, REQ_DEPS, OPT_DEPS
['raitv', [grilo_net_dep, libxml_dep], []],
['shoutcast', [grilo_net_dep, libxml_dep], []],
['thetvdb', [grilo_net_dep, libxml_dep, libarchive_dep, gom_dep], []],
- ['tmdb', [json_glib_dep, libsoup24_dep, grilo_net_dep], []],
+ ['tmdb', [json_glib_dep, grilo_net_dep], []],
['tracker', [tracker_sparql_dep], []],
['tracker3', [tracker3_dep], []],
['youtube', [grilo_net_dep, libxml_dep, libgdata_dep, totem_plparser_dep], []],
diff --git a/src/tmdb/grl-tmdb-request.c b/src/tmdb/grl-tmdb-request.c
index 5d2e550..c17ba8b 100644
--- a/src/tmdb/grl-tmdb-request.c
+++ b/src/tmdb/grl-tmdb-request.c
@@ -28,7 +28,6 @@
#include <grilo.h>
#include <net/grl-net.h>
-#include <libsoup/soup.h>
#include <json-glib/json-glib.h>
#include "grl-tmdb-request.h"
@@ -84,7 +83,7 @@ struct _GrlTmdbRequestPrivate {
char *uri;
char *api_key;
GHashTable *args;
- SoupURI *base;
+ GUri *base;
GTask *task;
JsonParser *parser;
GrlTmdbRequestDetail detail;
@@ -142,7 +141,7 @@ static void
grl_tmdb_request_init (GrlTmdbRequest *self)
{
self->priv = grl_tmdb_request_get_instance_private (self);
- self->priv->base = soup_uri_new (TMDB_BASE_URI);
+ self->priv->base = g_uri_parse (TMDB_BASE_URI, G_URI_FLAGS_NONE, NULL);
self->priv->parser = json_parser_new ();
self->priv->detail = GRL_TMDB_REQUEST_DETAIL_COUNT;
}
@@ -180,7 +179,7 @@ grl_tmdb_request_finalize (GObject *object)
g_clear_pointer (&self->priv->api_key, g_free);
g_clear_pointer (&self->priv->uri, g_free);
g_clear_pointer (&self->priv->args, g_hash_table_unref);
- g_clear_pointer (&self->priv->base, soup_uri_free);
+ g_clear_pointer (&self->priv->base, g_uri_unref);
g_clear_object (&self->priv->parser);
G_OBJECT_CLASS (grl_tmdb_request_parent_class)->finalize (object);
@@ -507,6 +506,35 @@ append_details_list (GrlTmdbRequest *self,
return NULL;
}
+static char *
+plus_escape (const char *orig)
+{
+ GString *s = g_string_new (orig);
+ g_string_replace (s, " ", "+", 0);
+ return g_string_free (s, FALSE);
+}
+
+static char *
+args_to_string (GHashTable *args)
+{
+ GHashTableIter iter;
+ const char *key, *value;
+ GString *s = NULL;
+
+ s = g_string_new (NULL);
+ g_hash_table_iter_init (&iter, args);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *)&value)) {
+ g_autofree char *plus_escaped = NULL;
+ if (s->len > 0)
+ g_string_append_c (s, '&');
+ g_string_append_uri_escaped (s, key, G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, FALSE);
+ g_string_append_c (s, '=');
+ plus_escaped = plus_escape (value);
+ g_string_append_uri_escaped (s, plus_escaped, G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, FALSE);
+ }
+ return g_string_free (s, !(s->len > 0));
+}
+
/**
* grl_tmdb_request_run_async:
* @self: Instance of GrlTmdbRequest
@@ -523,14 +551,23 @@ grl_tmdb_request_run_async (GrlTmdbRequest *self,
GCancellable *cancellable,
gpointer user_data)
{
- SoupURI *uri;
+ g_autoptr(GUri) absolute_uri = NULL;
+ g_autoptr(GUri) uri = NULL;
+ g_autofree char *query = NULL;
char *call, *new_call;
GHashTable *headers;
- uri = soup_uri_new_with_base (self->priv->base, self->priv->uri);
- soup_uri_set_query_from_form (uri, self->priv->args);
- call = soup_uri_to_string (uri, FALSE);
- soup_uri_free (uri);
+ absolute_uri = g_uri_parse_relative (self->priv->base, self->priv->uri, G_URI_FLAGS_NONE, NULL);
+ query = args_to_string (self->priv->args);
+ uri = g_uri_build (G_URI_FLAGS_NONE,
+ g_uri_get_scheme (absolute_uri),
+ g_uri_get_userinfo (absolute_uri),
+ g_uri_get_host (absolute_uri),
+ g_uri_get_port (absolute_uri),
+ g_uri_get_path (absolute_uri),
+ query,
+ g_uri_get_fragment (absolute_uri));
+ call = g_uri_to_string (uri);
new_call = append_details_list (self, call);
if (new_call != NULL) {
diff --git a/src/tmdb/grl-tmdb.c b/src/tmdb/grl-tmdb.c
index 70a135e..99f3391 100644
--- a/src/tmdb/grl-tmdb.c
+++ b/src/tmdb/grl-tmdb.c
@@ -29,7 +29,6 @@
#include <grilo.h>
#include <net/grl-net.h>
-#include <libsoup/soup-uri.h>
#include <json-glib/json-glib.h>
#include <glib/gi18n-lib.h>
@@ -64,7 +63,7 @@ struct _GrlTmdbSourcePrivate {
GrlTmdbRequest *configuration;
gboolean config_pending;
GQueue *pending_resolves;
- SoupURI *image_base_uri;
+ GUri *image_base_uri;
};
struct _ResolveClosure {
@@ -357,10 +356,7 @@ grl_tmdb_source_finalize (GObject *object)
self->priv->api_key = NULL;
}
- if (self->priv->image_base_uri != NULL) {
- soup_uri_free (self->priv->image_base_uri);
- self->priv->image_base_uri = NULL;
- }
+ g_clear_pointer (&self->priv->image_base_uri, g_uri_unref);
if (self->priv->configuration != NULL) {
g_object_unref (self->priv->configuration);
@@ -603,16 +599,16 @@ add_image (GrlTmdbSource *self,
GrlKeyID detail_key,
const char *image_path)
{
- SoupURI *uri;
+ g_autoptr(GUri) uri = NULL;
GrlRelatedKeys *related_keys;
char *str;
int i, l;
str = g_strconcat ("original", image_path, NULL);
- uri = soup_uri_new_with_base (self->priv->image_base_uri, str);
+ uri = g_uri_parse_relative (self->priv->image_base_uri, str, G_URI_FLAGS_NONE, NULL);
g_free (str);
- str = soup_uri_to_string (uri, FALSE);
+ str = g_uri_to_string (uri);
l = grl_data_length (GRL_DATA (media), detail_key);
@@ -627,7 +623,6 @@ add_image (GrlTmdbSource *self,
}
g_free (str);
- soup_uri_free (uri);
}
static void
@@ -1203,7 +1198,7 @@ on_configuration_ready (GObject *source,
value = grl_tmdb_request_get (request, "$.images.base_url");
if (value != NULL) {
GRL_DEBUG ("Got TMDb configuration.");
- self->priv->image_base_uri = soup_uri_new (g_value_get_string (value));
+ self->priv->image_base_uri = g_uri_parse (g_value_get_string (value), G_URI_FLAGS_NONE, NULL);
g_value_unset (value);
g_free (value);
}