From 9e9468aab5b8a1fc331bbd125bc6def8ab55b682 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Wed, 6 Jul 2022 11:00:42 +0200 Subject: tmdb: Port to GUri and remove libsoup dependency --- meson.build | 2 +- src/tmdb/grl-tmdb-request.c | 55 +++++++++++++++++++++++++++++++++++++-------- src/tmdb/grl-tmdb.c | 17 +++++--------- 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 #include -#include #include #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 #include -#include #include #include @@ -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); } -- cgit v1.2.1