[gnome-software: 3/18] gs-odrs-provider: Use a caller-provided SoupSession
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 3/18] gs-odrs-provider: Use a caller-provided SoupSession
- Date: Wed, 9 Jun 2021 13:45:48 +0000 (UTC)
commit 09d647fba31b967cb5262ec9317cc9816e4fa3c6
Author: Philip Withnall <pwithnall endlessos org>
Date: Tue May 18 13:45:55 2021 +0100
gs-odrs-provider: Use a caller-provided SoupSession
Instead of querying the `SoupSession` from the plugin. This is another
step towards dropping a dependency on `GsPlugin` from `GsOdrsProvider`.
Signed-off-by: Philip Withnall <pwithnall endlessos org>
lib/gs-odrs-provider.c | 40 ++++++++++++++++++++++++++++++++--------
lib/gs-odrs-provider.h | 4 +++-
plugins/odrs/gs-plugin-odrs.c | 3 ++-
3 files changed, 37 insertions(+), 10 deletions(-)
---
diff --git a/lib/gs-odrs-provider.c b/lib/gs-odrs-provider.c
index 36a2cf5c7..907795a58 100644
--- a/lib/gs-odrs-provider.c
+++ b/lib/gs-odrs-provider.c
@@ -130,6 +130,7 @@ struct _GsOdrsProvider
GsApp *cached_origin;
guint64 max_cache_age_secs;
guint n_results_max;
+ SoupSession *session; /* (owned) (not nullable) */
};
G_DEFINE_TYPE (GsOdrsProvider, gs_odrs_provider, G_TYPE_OBJECT)
@@ -140,9 +141,10 @@ typedef enum {
PROP_DISTRO,
PROP_MAX_CACHE_AGE_SECS,
PROP_N_RESULTS_MAX,
+ PROP_SESSION,
} GsOdrsProviderProperty;
-static GParamSpec *obj_props[PROP_N_RESULTS_MAX + 1] = { NULL, };
+static GParamSpec *obj_props[PROP_SESSION + 1] = { NULL, };
static gboolean
gs_odrs_provider_load_ratings_for_app (JsonObject *json_app,
@@ -737,7 +739,7 @@ gs_odrs_provider_fetch_for_app (GsOdrsProvider *self,
msg = soup_message_new (SOUP_METHOD_POST, uri);
soup_message_set_request (msg, "application/json; charset=utf-8",
SOUP_MEMORY_COPY, data, strlen (data));
- status_code = soup_session_send_message (gs_plugin_get_soup_session (plugin), msg);
+ status_code = soup_session_send_message (self->session, msg);
if (status_code != SOUP_STATUS_OK) {
if (!gs_odrs_provider_parse_success (plugin,
msg->response_body->data,
@@ -942,8 +944,7 @@ gs_odrs_provider_vote (GsOdrsProvider *self,
return FALSE;
/* send to server */
- if (!gs_odrs_provider_json_post (plugin, gs_plugin_get_soup_session (plugin),
- uri, data, error))
+ if (!gs_odrs_provider_json_post (plugin, self->session, uri, data, error))
return FALSE;
/* mark as voted */
@@ -1015,6 +1016,9 @@ gs_odrs_provider_get_property (GObject *object,
case PROP_N_RESULTS_MAX:
g_value_set_uint (value, self->n_results_max);
break;
+ case PROP_SESSION:
+ g_value_set_object (value, self->session);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1055,6 +1059,11 @@ gs_odrs_provider_set_property (GObject *object,
g_assert (self->n_results_max == 0);
self->n_results_max = g_value_get_uint (value);
break;
+ case PROP_SESSION:
+ /* Construct-only */
+ g_assert (self->session == NULL);
+ self->session = g_value_dup_object (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1067,6 +1076,7 @@ gs_odrs_provider_dispose (GObject *object)
GsOdrsProvider *self = GS_ODRS_PROVIDER (object);
g_clear_object (&self->cached_origin);
+ g_clear_object (&self->session);
G_OBJECT_CLASS (gs_odrs_provider_parent_class)->dispose (object);
}
@@ -1159,6 +1169,17 @@ gs_odrs_provider_class_init (GsOdrsProviderClass *klass)
0, G_MAXUINT, 0,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT_ONLY);
+ /**
+ * GsOdrsProvider:session: (not nullable)
+ *
+ * #SoupSession to use for downloading things.
+ *
+ * Since: 41
+ */
+ obj_props[PROP_SESSION] =
+ g_param_spec_object ("session", NULL, NULL,
+ SOUP_TYPE_SESSION,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_properties (object_class, G_N_ELEMENTS (obj_props), obj_props);
}
@@ -1170,6 +1191,7 @@ gs_odrs_provider_class_init (GsOdrsProviderClass *klass)
* @distro: (not nullable): value for #GsOdrsProvider:distro
* @max_cache_age_secs: value for #GsOdrsProvider:max-cache-age-secs
* @n_results_max: value for #GsOdrsProvider:n-results-max
+ * @session: value for #GsOdrsProvider:session
*
* Create a new #GsOdrsProvider. This does no network activity.
*
@@ -1181,11 +1203,13 @@ gs_odrs_provider_new (const gchar *review_server,
const gchar *user_hash,
const gchar *distro,
guint64 max_cache_age_secs,
- guint n_results_max)
+ guint n_results_max,
+ SoupSession *session)
{
g_return_val_if_fail (review_server != NULL && *review_server != '\0', NULL);
g_return_val_if_fail (user_hash != NULL && *user_hash != '\0', NULL);
g_return_val_if_fail (distro != NULL && *distro != '\0', NULL);
+ g_return_val_if_fail (SOUP_IS_SESSION (session), NULL);
return g_object_new (GS_TYPE_ODRS_PROVIDER,
"review-server", review_server,
@@ -1193,6 +1217,7 @@ gs_odrs_provider_new (const gchar *review_server,
"distro", distro,
"max-cache-age-secs", max_cache_age_secs,
"n-results-max", n_results_max,
+ "session", session,
NULL);
}
@@ -1389,8 +1414,7 @@ gs_odrs_provider_submit_review (GsOdrsProvider *self,
/* POST */
uri = g_strdup_printf ("%s/submit", self->review_server);
- return gs_odrs_provider_json_post (plugin, gs_plugin_get_soup_session (plugin),
- uri, data, error);
+ return gs_odrs_provider_json_post (plugin, self->session, uri, data, error);
}
/**
@@ -1563,7 +1587,7 @@ gs_odrs_provider_add_unvoted_reviews (GsOdrsProvider *self,
self->user_hash,
setlocale (LC_MESSAGES, NULL));
msg = soup_message_new (SOUP_METHOD_GET, uri);
- status_code = soup_session_send_message (gs_plugin_get_soup_session (plugin), msg);
+ status_code = soup_session_send_message (self->session, msg);
if (status_code != SOUP_STATUS_OK) {
if (!gs_odrs_provider_parse_success (plugin,
msg->response_body->data,
diff --git a/lib/gs-odrs-provider.h b/lib/gs-odrs-provider.h
index a9b717002..da8cc1000 100644
--- a/lib/gs-odrs-provider.h
+++ b/lib/gs-odrs-provider.h
@@ -12,6 +12,7 @@
#include <glib.h>
#include <glib-object.h>
+#include <libsoup/soup.h>
#include <gs-plugin.h>
@@ -25,7 +26,8 @@ GsOdrsProvider *gs_odrs_provider_new (const gchar
*review_server,
const gchar *user_hash,
const gchar *distro,
guint64 max_cache_age_secs,
- guint n_results_max);
+ guint n_results_max,
+ SoupSession *session);
gboolean gs_odrs_provider_refresh (GsOdrsProvider *self,
GsPlugin *plugin,
diff --git a/plugins/odrs/gs-plugin-odrs.c b/plugins/odrs/gs-plugin-odrs.c
index 6ef8a53eb..6145efd71 100644
--- a/plugins/odrs/gs-plugin-odrs.c
+++ b/plugins/odrs/gs-plugin-odrs.c
@@ -77,7 +77,8 @@ gs_plugin_initialize (GsPlugin *plugin)
user_hash,
distro,
ODRS_REVIEW_CACHE_AGE_MAX,
- ODRS_REVIEW_NUMBER_RESULTS_MAX);
+ ODRS_REVIEW_NUMBER_RESULTS_MAX,
+ gs_plugin_get_soup_session (plugin));
/* need application IDs and version */
gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]