[gnome-software] Allow all plugins to share a SoupSession
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] Allow all plugins to share a SoupSession
- Date: Fri, 12 Feb 2016 11:52:24 +0000 (UTC)
commit 09372cfcee295f258d67ff1566c0668600e9daec
Author: Richard Hughes <richard hughsie com>
Date: Thu Feb 11 21:15:40 2016 +0000
Allow all plugins to share a SoupSession
This allows us to do more efficient pipelining and to share other resources.
src/gs-plugin-loader.c | 11 +++++++++
src/gs-plugin.h | 2 +
src/plugins/gs-plugin-fedora-distro-upgrades.c | 8 +------
src/plugins/gs-plugin-fedora-tagger-ratings.c | 10 +------
src/plugins/gs-plugin-fedora-tagger-usage.c | 21 +-----------------
src/plugins/gs-plugin-fwupd.c | 16 ++-----------
src/plugins/gs-plugin-icons.c | 28 +-----------------------
src/plugins/gs-plugin-xdg-app-reviews.c | 14 +++++------
8 files changed, 27 insertions(+), 83 deletions(-)
---
diff --git a/src/gs-plugin-loader.c b/src/gs-plugin-loader.c
index 132ef86..21b17f9 100644
--- a/src/gs-plugin-loader.c
+++ b/src/gs-plugin-loader.c
@@ -27,6 +27,7 @@
#include "gs-plugin-loader.h"
#include "gs-plugin.h"
+#include "gs-utils.h"
#define GS_PLUGIN_LOADER_UPDATES_CHANGED_DELAY 3 /* s */
@@ -37,6 +38,7 @@ typedef struct
gchar *locale;
GsPluginStatus status_last;
AsProfile *profile;
+ SoupSession *soup_session;
GMutex pending_apps_mutex;
GPtrArray *pending_apps;
@@ -3033,6 +3035,7 @@ gs_plugin_loader_open_plugin (GsPluginLoader *plugin_loader,
plugin->updates_changed_fn = gs_plugin_loader_updates_changed_cb;
plugin->updates_changed_user_data = plugin_loader;
plugin->profile = g_object_ref (priv->profile);
+ plugin->soup_session = g_object_ref (priv->soup_session);
plugin->scale = gs_plugin_loader_get_scale (plugin_loader);
g_debug ("opened plugin %s: %s", filename, plugin->name);
@@ -3247,6 +3250,7 @@ gs_plugin_loader_plugin_free (GsPlugin *plugin)
g_free (plugin->priv);
g_free (plugin->name);
g_object_unref (plugin->profile);
+ g_object_unref (plugin->soup_session);
g_module_close (plugin->module);
g_slice_free (GsPlugin, plugin);
}
@@ -3290,6 +3294,7 @@ gs_plugin_loader_finalize (GObject *object)
g_strfreev (priv->compatible_projects);
g_free (priv->location);
g_free (priv->locale);
+ g_object_unref (priv->soup_session);
g_mutex_clear (&priv->pending_apps_mutex);
g_mutex_clear (&priv->app_cache_mutex);
@@ -3352,6 +3357,12 @@ gs_plugin_loader_init (GsPluginLoader *plugin_loader)
g_free,
(GFreeFunc) g_object_unref);
+ /* share a soup session (also disable the double-compression) */
+ priv->soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
+ NULL);
+ soup_session_remove_feature_by_type (priv->soup_session,
+ SOUP_TYPE_CONTENT_DECODER);
+
/* get the locale without the UTF-8 suffix */
priv->locale = g_strdup (setlocale (LC_MESSAGES, NULL));
match = g_strstr_len (priv->locale, -1, ".UTF-8");
diff --git a/src/gs-plugin.h b/src/gs-plugin.h
index cfbeef9..7b72782 100644
--- a/src/gs-plugin.h
+++ b/src/gs-plugin.h
@@ -27,6 +27,7 @@
#include <gmodule.h>
#include <gio/gio.h>
#include <gtk/gtk.h>
+#include <libsoup/soup.h>
#include "gs-app.h"
#include "gs-category.h"
@@ -75,6 +76,7 @@ struct GsPlugin {
GsPluginUpdatesChanged updates_changed_fn;
gpointer updates_changed_user_data;
AsProfile *profile;
+ SoupSession *soup_session;
};
typedef enum {
diff --git a/src/plugins/gs-plugin-fedora-distro-upgrades.c b/src/plugins/gs-plugin-fedora-distro-upgrades.c
index 8c32318..735870d 100644
--- a/src/plugins/gs-plugin-fedora-distro-upgrades.c
+++ b/src/plugins/gs-plugin-fedora-distro-upgrades.c
@@ -23,7 +23,6 @@
#include <errno.h>
#include <json-glib/json-glib.h>
-#include <libsoup/soup.h>
#include <gs-plugin.h>
#include <gs-os-release.h>
@@ -37,7 +36,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(JsonParser, g_object_unref)
struct GsPluginPrivate {
GPtrArray *distros;
- SoupSession *session;
};
/**
@@ -56,8 +54,6 @@ void
gs_plugin_initialize (GsPlugin *plugin)
{
plugin->priv = GS_PLUGIN_GET_PRIVATE (GsPluginPrivate);
- plugin->priv->session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
- NULL);
/* check that we are running on Fedora */
if (!gs_plugin_check_distro_id (plugin, "fedora")) {
gs_plugin_set_enabled (plugin, FALSE);
@@ -74,8 +70,6 @@ gs_plugin_destroy (GsPlugin *plugin)
{
if (plugin->priv->distros != NULL)
g_ptr_array_unref (plugin->priv->distros);
- if (plugin->priv->session != NULL)
- g_object_unref (plugin->priv->session);
}
typedef enum {
@@ -225,7 +219,7 @@ gs_plugin_add_distro_upgrades (GsPlugin *plugin,
msg = soup_message_new (SOUP_METHOD_GET, FEDORA_PKGDB_COLLECTIONS_API_URI);
/* set sync request */
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
g_set_error (error,
GS_PLUGIN_ERROR,
diff --git a/src/plugins/gs-plugin-fedora-tagger-ratings.c b/src/plugins/gs-plugin-fedora-tagger-ratings.c
index 5535f72..eb06441 100644
--- a/src/plugins/gs-plugin-fedora-tagger-ratings.c
+++ b/src/plugins/gs-plugin-fedora-tagger-ratings.c
@@ -22,7 +22,6 @@
#include <config.h>
#include <json-glib/json-glib.h>
-#include <libsoup/soup.h>
#include <string.h>
#include <sqlite3.h>
#include <stdlib.h>
@@ -38,7 +37,6 @@
*/
struct GsPluginPrivate {
- SoupSession *session;
gchar *db_path;
gsize loaded;
sqlite3 *db;
@@ -71,8 +69,6 @@ gs_plugin_initialize (GsPlugin *plugin)
"gnome-software",
"fedora-tagger.db",
NULL);
- plugin->priv->session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
- NULL);
/* check that we are running on Fedora */
if (!gs_plugin_check_distro_id (plugin, "fedora")) {
@@ -113,8 +109,6 @@ gs_plugin_destroy (GsPlugin *plugin)
g_free (plugin->priv->db_path);
if (plugin->priv->db != NULL)
sqlite3_close (plugin->priv->db);
- if (plugin->priv->session != NULL)
- g_object_unref (plugin->priv->session);
}
/**
@@ -174,7 +168,7 @@ gs_plugin_app_set_rating_pkg (GsPlugin *plugin,
SOUP_MEMORY_COPY, data, strlen (data));
/* set sync request */
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
g_debug ("Failed to set rating on fedora-tagger: %s",
soup_status_get_phrase (status_code));
@@ -341,7 +335,7 @@ gs_plugin_fedora_tagger_download (GsPlugin *plugin, GError **error)
msg = soup_message_new (SOUP_METHOD_GET, uri);
/* set sync request */
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
g_set_error (error,
GS_PLUGIN_ERROR,
diff --git a/src/plugins/gs-plugin-fedora-tagger-usage.c b/src/plugins/gs-plugin-fedora-tagger-usage.c
index d5ce131..d962840 100644
--- a/src/plugins/gs-plugin-fedora-tagger-usage.c
+++ b/src/plugins/gs-plugin-fedora-tagger-usage.c
@@ -21,7 +21,6 @@
#include <config.h>
-#include <libsoup/soup.h>
#include <string.h>
#include <sqlite3.h>
#include <stdlib.h>
@@ -36,10 +35,6 @@
* It will self-disable if not run on a Fedora system.
*/
-struct GsPluginPrivate {
- SoupSession *session;
-};
-
/**
* gs_plugin_get_name:
*/
@@ -59,10 +54,6 @@ gs_plugin_initialize (GsPlugin *plugin)
{
g_autoptr(GSettings) settings = NULL;
- plugin->priv = GS_PLUGIN_GET_PRIVATE (GsPluginPrivate);
- plugin->priv->session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
- NULL);
-
/* this is opt-in, and turned off by default */
settings = g_settings_new ("org.gnome.desktop.privacy");
if (!g_settings_get_boolean (settings, "send-software-usage-stats")) {
@@ -93,16 +84,6 @@ gs_plugin_get_deps (GsPlugin *plugin)
}
/**
- * gs_plugin_destroy:
- */
-void
-gs_plugin_destroy (GsPlugin *plugin)
-{
- if (plugin->priv->session != NULL)
- g_object_unref (plugin->priv->session);
-}
-
-/**
* gs_plugin_app_set_usage_pkg:
*/
static gboolean
@@ -128,7 +109,7 @@ gs_plugin_app_set_usage_pkg (GsPlugin *plugin,
SOUP_MEMORY_COPY, data, strlen (data));
/* set sync request */
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
g_debug ("Failed to set usage on fedora-tagger: %s",
soup_status_get_phrase (status_code));
diff --git a/src/plugins/gs-plugin-fwupd.c b/src/plugins/gs-plugin-fwupd.c
index 9b36314..36cf7f4 100644
--- a/src/plugins/gs-plugin-fwupd.c
+++ b/src/plugins/gs-plugin-fwupd.c
@@ -26,7 +26,6 @@
#include <fcntl.h>
#include <gio/gio.h>
#include <gio/gunixfdlist.h>
-#include <libsoup/soup.h>
#include <glib/gstdio.h>
#include <gs-plugin.h>
@@ -46,7 +45,6 @@ struct GsPluginPrivate {
GDBusProxy *proxy;
GPtrArray *to_download;
GPtrArray *to_ignore;
- SoupSession *session;
gchar *cachedir;
gchar *lvfs_sig_fn;
gchar *lvfs_sig_hash;
@@ -71,12 +69,6 @@ gs_plugin_initialize (GsPlugin *plugin)
plugin->priv = GS_PLUGIN_GET_PRIVATE (GsPluginPrivate);
plugin->priv->to_download = g_ptr_array_new_with_free_func (g_free);
plugin->priv->to_ignore = g_ptr_array_new_with_free_func (g_free);
- plugin->priv->session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
- NULL);
- /* this disables the double-compression of the firmware.xml.gz file */
- soup_session_remove_feature_by_type (plugin->priv->session,
- SOUP_TYPE_CONTENT_DECODER);
-
plugin->priv->config_fn = g_build_filename (SYSCONFDIR, "fwupd.conf", NULL);
if (!g_file_test (plugin->priv->config_fn, G_FILE_TEST_EXISTS)) {
g_free (plugin->priv->config_fn);
@@ -102,8 +94,6 @@ gs_plugin_destroy (GsPlugin *plugin)
g_ptr_array_unref (plugin->priv->to_ignore);
if (plugin->priv->proxy != NULL)
g_object_unref (plugin->priv->proxy);
- if (plugin->priv->session != NULL)
- g_object_unref (plugin->priv->session);
}
/**
@@ -645,7 +635,7 @@ gs_plugin_fwupd_check_lvfs_metadata (GsPlugin *plugin,
/* download the signature first, it's smaller */
url_sig = g_strdup_printf ("%s.asc", url_data);
msg_sig = soup_message_new (SOUP_METHOD_GET, url_sig);
- status_code = soup_session_send_message (plugin->priv->session, msg_sig);
+ status_code = soup_session_send_message (plugin->soup_session, msg_sig);
if (status_code != SOUP_STATUS_OK) {
g_warning ("Failed to download %s, ignoring: %s",
url_sig, soup_status_get_phrase (status_code));
@@ -681,7 +671,7 @@ gs_plugin_fwupd_check_lvfs_metadata (GsPlugin *plugin,
/* download the payload */
msg_data = soup_message_new (SOUP_METHOD_GET, url_data);
- status_code = soup_session_send_message (plugin->priv->session, msg_data);
+ status_code = soup_session_send_message (plugin->soup_session, msg_data);
if (status_code != SOUP_STATUS_OK) {
g_warning ("Failed to download %s, ignoring: %s",
url_data, soup_status_get_phrase (status_code));
@@ -753,7 +743,7 @@ gs_plugin_refresh (GsPlugin *plugin,
/* set sync request */
msg = soup_message_new (SOUP_METHOD_GET, tmp);
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
g_warning ("Failed to download %s, ignoring: %s",
tmp, soup_status_get_phrase (status_code));
diff --git a/src/plugins/gs-plugin-icons.c b/src/plugins/gs-plugin-icons.c
index 299d180..40e3563 100644
--- a/src/plugins/gs-plugin-icons.c
+++ b/src/plugins/gs-plugin-icons.c
@@ -25,7 +25,6 @@
#include <string.h>
#include <glib/gi18n.h>
-#include <libsoup/soup.h>
#include <gs-plugin.h>
#include <gs-utils.h>
@@ -38,10 +37,6 @@
* have to handle the download and caching functionality.
*/
-struct GsPluginPrivate {
- SoupSession *session;
-};
-
/**
* gs_plugin_get_name:
*/
@@ -52,17 +47,6 @@ gs_plugin_get_name (void)
}
/**
- * gs_plugin_initialize:
- */
-void
-gs_plugin_initialize (GsPlugin *plugin)
-{
- plugin->priv = GS_PLUGIN_GET_PRIVATE (GsPluginPrivate);
- plugin->priv->session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
- NULL);
-}
-
-/**
* gs_plugin_get_deps:
*/
const gchar **
@@ -76,16 +60,6 @@ gs_plugin_get_deps (GsPlugin *plugin)
}
/**
- * gs_plugin_destroy:
- */
-void
-gs_plugin_destroy (GsPlugin *plugin)
-{
- if (plugin->priv->session != NULL)
- g_object_unref (plugin->priv->session);
-}
-
-/**
* gs_plugin_icons_download:
*/
static gboolean
@@ -108,7 +82,7 @@ gs_plugin_icons_download (GsPlugin *plugin, const gchar *uri, const gchar *filen
}
/* set sync request */
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
g_set_error (error,
GS_PLUGIN_ERROR,
diff --git a/src/plugins/gs-plugin-xdg-app-reviews.c b/src/plugins/gs-plugin-xdg-app-reviews.c
index 8ab9a5c..b86a157 100644
--- a/src/plugins/gs-plugin-xdg-app-reviews.c
+++ b/src/plugins/gs-plugin-xdg-app-reviews.c
@@ -23,7 +23,6 @@
#include <gs-plugin.h>
#include <json-glib/json-glib.h>
-#include <libsoup/soup.h>
#include <string.h>
#include "gs-app.h"
@@ -49,7 +48,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(JsonGenerator, g_object_unref)
struct GsPluginPrivate {
GSettings *settings;
- SoupSession *session;
gchar *distro;
gchar *user_hash;
gchar *review_server;
@@ -72,7 +70,7 @@ gs_plugin_initialize (GsPlugin *plugin)
{
g_autoptr(GError) error = NULL;
plugin->priv = GS_PLUGIN_GET_PRIVATE (GsPluginPrivate);
- plugin->priv->session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
NULL);
+ plugin->soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (),
NULL);
plugin->priv->settings = g_settings_new ("org.gnome.software");
plugin->priv->review_server = g_settings_get_string (plugin->priv->settings,
"review-server");
@@ -114,7 +112,7 @@ gs_plugin_destroy (GsPlugin *plugin)
{
g_free (plugin->priv->user_hash);
g_free (plugin->priv->distro);
- g_object_unref (plugin->priv->session);
+ g_object_unref (plugin->soup_session);
g_object_unref (plugin->priv->settings);
}
@@ -495,7 +493,7 @@ xdg_app_review_get_ratings (GsPlugin *plugin, GsApp *app, GError **error)
plugin->priv->review_server,
gs_app_get_id (app));
msg = soup_message_new (SOUP_METHOD_GET, uri);
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
if (!xdg_app_review_parse_success (msg->response_body->data,
msg->response_body->length,
@@ -633,7 +631,7 @@ xdg_app_review_fetch_for_app (GsPlugin *plugin, GsApp *app, GError **error)
msg = soup_message_new (SOUP_METHOD_POST, uri);
soup_message_set_request (msg, "application/json",
SOUP_MEMORY_COPY, data, strlen (data));
- status_code = soup_session_send_message (plugin->priv->session, msg);
+ status_code = soup_session_send_message (plugin->soup_session, msg);
if (status_code != SOUP_STATUS_OK) {
if (!xdg_app_review_parse_success (msg->response_body->data,
msg->response_body->length,
@@ -863,7 +861,7 @@ gs_plugin_review_submit (GsPlugin *plugin,
/* POST */
uri = g_strdup_printf ("%s/submit", plugin->priv->review_server);
- return gs_plugin_xdg_app_reviews_json_post (plugin->priv->session,
+ return gs_plugin_xdg_app_reviews_json_post (plugin->soup_session,
uri, data, error);
}
@@ -915,7 +913,7 @@ gs_plugin_xdg_app_reviews_vote (GsPlugin *plugin, GsReview *review,
return FALSE;
/* send to server */
- if (!gs_plugin_xdg_app_reviews_json_post (plugin->priv->session,
+ if (!gs_plugin_xdg_app_reviews_json_post (plugin->soup_session,
uri, data, error))
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]