Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] liferea: update to 1.14.6.
@ 2024-06-21 22:41 oreo639
  2024-06-23  6:06 ` [PR PATCH] [Merged]: " oreo639
  0 siblings, 1 reply; 3+ messages in thread
From: oreo639 @ 2024-06-21 22:41 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1242 bytes --]

There is a new pull request by oreo639 against master on the void-packages repository

https://github.com/oreo639/void-packages liferea
https://github.com/void-linux/void-packages/pull/50918

liferea: update to 1.14.6.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->


A patch file from https://github.com/void-linux/void-packages/pull/50918.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-liferea-50918.patch --]
[-- Type: text/x-diff, Size: 46093 bytes --]

From 7336232fb5f5d6f29a12529b005e1fabeba3ae5c Mon Sep 17 00:00:00 2001
From: oreo639 <oreo6391@gmail.com>
Date: Fri, 21 Jun 2024 15:40:25 -0700
Subject: [PATCH] liferea: update to 1.14.6.

---
 srcpkgs/liferea/patches/libwebkit2gtk41.patch | 1186 +++++++++++++++++
 srcpkgs/liferea/template                      |   13 +-
 2 files changed, 1195 insertions(+), 4 deletions(-)
 create mode 100644 srcpkgs/liferea/patches/libwebkit2gtk41.patch

diff --git a/srcpkgs/liferea/patches/libwebkit2gtk41.patch b/srcpkgs/liferea/patches/libwebkit2gtk41.patch
new file mode 100644
index 00000000000000..2268c512a71e8e
--- /dev/null
+++ b/srcpkgs/liferea/patches/libwebkit2gtk41.patch
@@ -0,0 +1,1186 @@
+From 49da4bcc7385cc46b26d1923444ce5645bc132cc Mon Sep 17 00:00:00 2001
+From: Lars Windolf <lars.windolf@gmx.de>
+Date: Thu, 30 Mar 2023 22:12:56 +0200
+Subject: [PATCH 01/20] Upgrade to libsoup3
+
+---
+ configure.ac             |   4 +-
+ src/conf.c               |  56 +------
+ src/net.c                | 319 +++++++++++++++------------------------
+ src/net.h                |  11 +-
+ src/ui/liferea_browser.c |   8 +-
+ src/webkit/webkit.c      |  45 +-----
+ src/webkit/webkit.h      |   2 +-
+ 7 files changed, 133 insertions(+), 312 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 4efea1777..015dd1ceb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -38,8 +38,8 @@ pkg_modules="	gtk+-3.0 >= 3.22.0
+ 		sqlite3 >= 3.7.0
+ 		gmodule-2.0 >= 2.0.0
+ 		gthread-2.0
+-		libsoup-2.4 >= 2.42
+-		webkit2gtk-4.0
++		libsoup-3.0 >= 3.2
++		webkit2gtk-4.1
+ 		json-glib-1.0
+ 		gobject-introspection-1.0
+ 		gsettings-desktop-schemas
+diff --git a/src/conf.c b/src/conf.c
+index ccb3658a0..b295652ef 100644
+--- a/src/conf.c
++++ b/src/conf.c
+@@ -126,60 +126,10 @@ conf_proxy_reset_settings_cb (GSettings *settings,
+                               gchar *key,
+                               gpointer user_data)
+ {
+-	gchar		*proxyname, *proxyusername, *proxypassword;
+-	gint		proxyport;
+-	gint		proxydetectmode;
+-	gboolean	proxyuseauth;
+-
+-	proxyname = NULL;
+-	proxyport = 0;
+-	proxyusername = NULL;
+-	proxypassword = NULL;
+-	conf_get_int_value (PROXY_DETECT_MODE, &proxydetectmode);
+-
+-#if !WEBKIT_CHECK_VERSION (2, 15, 3)
+-	if (proxydetectmode != PROXY_DETECT_MODE_AUTO)
+-	{
+-		GtkWidget *dialog = gtk_message_dialog_new (NULL,
+-			0,
+-			GTK_MESSAGE_INFO,
+-			GTK_BUTTONS_CLOSE,
+-			_("Your version of WebKitGTK+ doesn't support changing the proxy settings from Liferea. The system's default proxy settings will be used."));
+-		gtk_dialog_run (GTK_DIALOG (dialog));
+-		gtk_widget_destroy (dialog);
+-
+-		conf_set_int_value (PROXY_DETECT_MODE, PROXY_DETECT_MODE_AUTO);
+-		return;
+-	}
+-#endif
+-	switch (proxydetectmode) {
+-		default:
+-		case 0:
+-			debug0 (DEBUG_CONF, "proxy auto detect is configured");
+-			/* nothing to do, all done by libproxy inside libsoup */
+-			break;
+-		case 1:
+-			debug0 (DEBUG_CONF, "proxy is disabled by user");
+-			/* nothing to do */
+-			break;
+-		case 2:
+-			debug0 (DEBUG_CONF, "manual proxy is configured");
+-
+-			conf_get_str_value (PROXY_HOST, &proxyname);
+-			conf_get_int_value (PROXY_PORT, &proxyport);
+-			conf_get_bool_value (PROXY_USEAUTH, &proxyuseauth);
+-			if (proxyuseauth) {
+-				conf_get_str_value (PROXY_USER, &proxyusername);
+-				conf_get_str_value (PROXY_PASSWD, &proxypassword);
+-			}
+-			break;
+-	}
+-	debug4 (DEBUG_CONF, "Manual proxy settings are now %s:%d %s:%s",
+-	                    proxyname != NULL ? proxyname : "NULL", proxyport,
+-	                    proxyusername != NULL ? proxyusername : "NULL",
+-	                    proxypassword != NULL ? proxypassword : "NULL");
++	gint	mode;
+ 
+-	network_set_proxy (proxydetectmode, proxyname, proxyport, proxyusername, proxypassword);
++	conf_get_int_value (PROXY_DETECT_MODE, &mode);
++	network_set_proxy (mode);
+ }
+ 
+ /*----------------------------------------------------------------------*/
+diff --git a/src/net.c b/src/net.c
+index 8cabd778a..64e8eb732 100644
+--- a/src/net.c
++++ b/src/net.c
+@@ -1,7 +1,7 @@
+ /**
+  * @file net.c  HTTP network access using libsoup
+  *
+- * Copyright (C) 2007-2021 Lars Windolf <lars.windolf@gmx.de>
++ * Copyright (C) 2007-2023 Lars Windolf <lars.windolf@gmx.de>
+  * Copyright (C) 2009 Emilio Pozuelo Monfort <pochu27@gmail.com>
+  * Copyright (C) 2021 Lorenzo L. Ancora <admin@lorenzoancora.info>
+  *
+@@ -37,80 +37,79 @@
+ 
+ #define HOMEPAGE	"https://lzone.de/liferea/"
+ 
++static GCancellable *cancellable = NULL;	/* GCancellable for all request handling */
+ static SoupSession *session = NULL;	/* Session configured for preferences */
+ static SoupSession *session2 = NULL;	/* Session for "Don't use proxy feature" */
+ 
+ static ProxyDetectMode proxymode = PROXY_DETECT_MODE_AUTO;
+-static gchar	*proxyname = NULL;
+-static gchar	*proxyusername = NULL;
+-static gchar	*proxypassword = NULL;
+-static int	proxyport = 0;
+-
+ 
+ static void
+ network_process_redirect_callback (SoupMessage *msg, gpointer user_data)
+ {
+ 	updateJobPtr	job = (updateJobPtr)user_data;
+ 	const gchar	*location = NULL;
+-	SoupURI		*newuri;
+-
+-	if (301 == msg->status_code || 308 == msg->status_code)
+-	{
+-		location = soup_message_headers_get_one (msg->response_headers, "Location");
+-		newuri = soup_uri_new (location);
+-
+-		if (SOUP_URI_IS_VALID (newuri) && ! soup_uri_equal (newuri, soup_message_get_uri (msg))) {
+-			debug2 (DEBUG_NET, "\"%s\" permanently redirects to new location \"%s\"", soup_uri_to_string (soup_message_get_uri (msg), FALSE),
+-							            soup_uri_to_string (newuri, FALSE));
+-			job->result->httpstatus = msg->status_code;
+-			job->result->source = soup_uri_to_string (newuri, FALSE);
++	GUri		*newuri;
++	SoupStatus	status = soup_message_get_status (msg);
++
++	if (SOUP_STATUS_MOVED_PERMANENTLY == status || SOUP_STATUS_PERMANENT_REDIRECT == status) {
++		if (g_uri_is_valid (location, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, NULL)) {
++			location = soup_message_headers_get_one (soup_message_get_response_headers (msg), "Location");
++			newuri = g_uri_parse (location, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, NULL);
++
++			if (!soup_uri_equal (newuri, soup_message_get_uri (msg))) {
++				job->result->httpstatus = status;
++				job->result->source = g_uri_to_string_partial (newuri, 0);
++				debug2 (DEBUG_NET, "\"%s\" permanently redirects to new location \"%s\"",
++				        job->request->source, job->result->source);
++			}
+ 		}
+ 	}
+ }
+ 
+ static void
+-network_process_callback (SoupSession *session, SoupMessage *msg, gpointer user_data)
++network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr job)
+ {
+-	updateJobPtr	job = (updateJobPtr)user_data;
+-	SoupDate	*last_modified;
+-	const gchar	*tmp = NULL;
+-	GHashTable	*params;
+-	gboolean	revalidated = FALSE;
+-	gint		maxage;
+-	gint		age;
++	g_autoptr(GBytes)	body = NULL;
++	GDateTime		*last_modified;
++	const gchar		*tmp = NULL;
++	GHashTable		*params;
++	gboolean		revalidated = FALSE;
++	gint			maxage;
++	gint			age;
+ 
+-	job->result->source = soup_uri_to_string (soup_message_get_uri(msg), FALSE);
+-	job->result->httpstatus = msg->status_code;
++	job->result->source = g_uri_to_string_partial (soup_message_get_uri (msg), 0);
++	job->result->httpstatus = soup_message_get_status (msg);
+ 
+ 	/* keep some request headers for revalidated responses */
+ 	revalidated = (304 == job->result->httpstatus);
+ 
+-	debug1 (DEBUG_NET, "download status code: %d", msg->status_code);
++	debug1 (DEBUG_NET, "download status code: %d", job->result->httpstatus);
+ 	debug1 (DEBUG_NET, "source after download: >>>%s<<<", job->result->source);
+ 
++	body = g_input_stream_read_bytes (stream, G_MAXSSIZE, cancellable, NULL);
++
+ #ifdef HAVE_G_MEMDUP2
+-	job->result->data = g_memdup2 (msg->response_body->data, msg->response_body->length+1);
++	job->result->data = g_memdup2 (g_bytes_get_data (body, &job->result->size), g_bytes_get_size (body));
+ #else
+-	job->result->data = g_memdup (msg->response_body->data, msg->response_body->length+1);
++	job->result->data = g_memdup (g_bytes_get_data (body, &job->result->size), g_bytes_get_size (body));
+ #endif
+ 
+-	job->result->size = (size_t)msg->response_body->length;
+ 	debug1 (DEBUG_NET, "%d bytes downloaded", job->result->size);
+ 
+-	job->result->contentType = g_strdup (soup_message_headers_get_content_type (msg->response_headers, NULL));
++	job->result->contentType = g_strdup (soup_message_headers_get_content_type (soup_message_get_response_headers (msg), NULL));
+ 
+ 	/* Update last-modified date */
+ 	if (revalidated) {
+ 		 job->result->updateState->lastModified = update_state_get_lastmodified (job->request->updateState);
+ 	} else {
+-		tmp = soup_message_headers_get_one (msg->response_headers, "Last-Modified");
++		tmp = soup_message_headers_get_one (soup_message_get_response_headers (msg), "Last-Modified");
+ 		if (tmp) {
+ 			/* The string may be badly formatted, which will make
+ 			* soup_date_new_from_string() return NULL */
+-			last_modified = soup_date_new_from_string (tmp);
++			last_modified = soup_date_time_new_from_http_string (tmp);
+ 			if (last_modified) {
+-				job->result->updateState->lastModified = soup_date_to_time_t (last_modified);
+-				soup_date_free (last_modified);
++				job->result->updateState->lastModified = g_date_time_to_unix (last_modified);
++				g_free (last_modified);
+ 			}
+ 		}
+ 	}
+@@ -119,14 +118,14 @@ network_process_callback (SoupSession *session, SoupMessage *msg, gpointer user_
+ 	if (revalidated) {
+ 		job->result->updateState->etag = g_strdup (update_state_get_etag (job->request->updateState));
+ 	} else {
+-		tmp = soup_message_headers_get_one (msg->response_headers, "ETag");
++		tmp = soup_message_headers_get_one (soup_message_get_response_headers (msg), "ETag");
+ 		if (tmp) {
+ 			job->result->updateState->etag = g_strdup (tmp);
+ 		}
+ 	}
+ 
+ 	/* Update cache max-age  */
+-	tmp = soup_message_headers_get_list (msg->response_headers, "Cache-Control");
++	tmp = soup_message_headers_get_list (soup_message_get_response_headers (msg), "Cache-Control");
+ 	if (tmp) {
+ 		params = soup_header_parse_param_list (tmp);
+ 		if (params) {
+@@ -135,7 +134,7 @@ network_process_callback (SoupSession *session, SoupMessage *msg, gpointer user_
+ 				maxage = atoi (tmp);
+ 				if (0 < maxage) {
+ 					/* subtract Age from max-age */
+-					tmp = soup_message_headers_get_one (msg->response_headers, "Age");
++					tmp = soup_message_headers_get_one (soup_message_get_response_headers (msg), "Age");
+ 					if (tmp) {
+ 						age = atoi (tmp);
+ 						if (0 < age) {
+@@ -154,19 +153,21 @@ network_process_callback (SoupSession *session, SoupMessage *msg, gpointer user_
+ 	update_process_finished_job (job);
+ }
+ 
+-/* Downloads a feed specified in the request structure, returns
++/* Downloads a URL specified in the request structure, returns
+    the downloaded data or NULL in the request structure.
+    If the webserver reports a permanent redirection, the
+-   feed url will be modified and the old URL 'll be freed. The
++   URL will be modified and the old URL 'll be freed. The
+    request structure will also contain the HTTP status and the
+    last modified string.
+  */
+ void
+ network_process_request (const updateJobPtr job)
+ {
+-	SoupMessage	*msg;
+-	SoupDate	*date;
+-	gboolean	do_not_track = FALSE;
++	g_autoptr(GInputStream)	stream;
++	g_autoptr(SoupMessage)	msg = NULL;
++	SoupMessageHeaders	*request_headers;
++	g_autoptr(GUri)		sourceUri;
++	gboolean		do_not_track = FALSE;
+ 
+ 	g_assert (NULL != job->request);
+ 	debug1 (DEBUG_NET, "downloading %s", job->request->source);
+@@ -174,39 +175,50 @@ network_process_request (const updateJobPtr job)
+ 		debug1 (DEBUG_NET, "   postdata=>>>%s<<<", job->request->postdata);
+ 
+ 	/* Prepare the SoupMessage */
+-	msg = soup_message_new (job->request->postdata ? SOUP_METHOD_POST : SOUP_METHOD_GET,
+-				job->request->source);
+-
++	sourceUri = g_uri_build_with_user (
++		SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED,
++		g_uri_peek_scheme (job->request->source),
++		(!job->request->authValue && job->request->options && job->request->options->username)?job->request->options->username:NULL,
++		(!job->request->authValue && job->request->options && job->request->options->password)?job->request->options->password:NULL,
++		NULL,	/* auth_params */
++		NULL,	/* host */
++		-1,	/* port */
++		job->request->source,
++		NULL,	/* query */
++		NULL	/* fragment */
++	);
++	if (sourceUri)
++		msg = soup_message_new_from_uri (job->request->postdata?"POST":"GET", sourceUri);
+ 	if (!msg) {
+ 		g_warning ("The request for %s could not be parsed!", job->request->source);
+ 		return;
+ 	}
+ 
++	request_headers = soup_message_get_request_headers (msg);
++
+ 	/* Set the postdata for the request */
+ 	if (job->request->postdata) {
+-		soup_message_set_request (msg,
+-					  "application/x-www-form-urlencoded",
+-					  SOUP_MEMORY_STATIC, /* libsoup won't free the postdata */
+-					  job->request->postdata,
+-					  strlen (job->request->postdata));
++		g_autoptr(GBytes) postdata = g_bytes_new (job->request->postdata, strlen (job->request->postdata));
++		soup_message_set_request_body_from_bytes (msg,
++		                                          "application/x-www-form-urlencoded",
++		                                          postdata);
+ 	}
+ 
+ 	/* Set the If-Modified-Since: header */
+ 	if (job->request->updateState && update_state_get_lastmodified (job->request->updateState)) {
+-		gchar *datestr;
++		g_autofree gchar *datestr;
++		g_autoptr(GDateTime) date;
+ 
+-		date = soup_date_new_from_time_t (update_state_get_lastmodified (job->request->updateState));
+-		datestr = soup_date_to_string (date, SOUP_DATE_HTTP);
+-		soup_message_headers_append (msg->request_headers,
++		date = g_date_time_new_from_unix_utc (update_state_get_lastmodified (job->request->updateState));
++		datestr = soup_date_time_to_string (date, SOUP_DATE_HTTP);
++		soup_message_headers_append (request_headers,
+ 					     "If-Modified-Since",
+ 					     datestr);
+-		g_free (datestr);
+-		soup_date_free (date);
+ 	}
+ 
+ 	/* Set the If-None-Match header */
+ 	if (job->request->updateState && update_state_get_etag (job->request->updateState)) {
+-		soup_message_headers_append(msg->request_headers,
++		soup_message_headers_append(request_headers,
+ 					    "If-None-Match",
+ 					    update_state_get_etag (job->request->updateState));
+ 	}
+@@ -215,33 +227,23 @@ network_process_request (const updateJobPtr job)
+ 	if (job->request->updateState &&
+ 	    (update_state_get_lastmodified (job->request->updateState) ||
+ 	     update_state_get_etag (job->request->updateState))) {
+-		soup_message_headers_append(msg->request_headers,
++		soup_message_headers_append(request_headers,
+ 					    "A-IM",
+ 					    "feed");
+ 	}
+ 
+ 	/* Support HTTP content negotiation */
+-	soup_message_headers_append(msg->request_headers, "Accept", "application/atom+xml,application/xml;q=0.9,text/xml;q=0.8,*/*;q=0.7");
+-
+-	/* Set the authentication */
+-	if (!job->request->authValue &&
+-	    job->request->options &&
+-	    job->request->options->username &&
+-	    job->request->options->password) {
+-		SoupURI *uri = soup_message_get_uri (msg);
+-
+-		soup_uri_set_user (uri, job->request->options->username);
+-		soup_uri_set_password (uri, job->request->options->password);
+-	}
++	soup_message_headers_append (request_headers, "Accept", "application/atom+xml,application/xml;q=0.9,text/xml;q=0.8,*/*;q=0.7");
+ 
++	/* Add Authorization header */
+ 	if (job->request->authValue) {
+-		soup_message_headers_append (msg->request_headers, "Authorization",
++		soup_message_headers_append (request_headers, "Authorization",
+ 					     job->request->authValue);
+ 	}
+ 
+ 	/* Add requested cookies */
+ 	if (job->request->updateState && job->request->updateState->cookies) {
+-		soup_message_headers_append (msg->request_headers, "Cookie",
++		soup_message_headers_append (request_headers, "Cookie",
+ 		                             job->request->updateState->cookies);
+ 		soup_message_disable_feature (msg, SOUP_TYPE_COOKIE_JAR);
+ 	}
+@@ -257,7 +259,7 @@ network_process_request (const updateJobPtr job)
+ 	/* Add Do Not Track header according to settings */
+ 	conf_get_bool_value (DO_NOT_TRACK, &do_not_track);
+ 	if (do_not_track)
+-		soup_message_headers_append (msg->request_headers, "DNT", "1");
++		soup_message_headers_append (request_headers, "DNT", "1");
+ 
+ 	/* Process permanent redirects (update feed location) */
+ 	soup_message_add_status_code_handler (msg, "got_body", 301, (GCallback) network_process_redirect_callback, job);
+@@ -265,60 +267,27 @@ network_process_request (const updateJobPtr job)
+ 
+ 	/* If the feed has "dont use a proxy" selected, use 'session2' which is non-proxy */
+ 	if (job->request->options && job->request->options->dontUseProxy)
+-		soup_session_queue_message (session2, msg, network_process_callback, job);
++		stream = soup_session_send (session2, msg, cancellable, NULL);
+ 	else
+-		soup_session_queue_message (session, msg, network_process_callback, job);
+-}
++		stream = soup_session_send (session, msg, cancellable, NULL);
+ 
+-static void
+-network_authenticate (
+-	SoupSession *session,
+-	SoupMessage *msg,
+-        SoupAuth *auth,
+-	gboolean retrying,
+-	gpointer data)
+-{
+-	if (!retrying && msg->status_code == SOUP_STATUS_PROXY_UNAUTHORIZED) {
+-		soup_auth_authenticate (auth, g_strdup (proxyusername), g_strdup (proxypassword));
+-	}
+-
+-	// FIXME: Handle HTTP 401 too
++	if (stream)
++		network_process_callback (stream, msg, job);
+ }
+ 
+ static void
+-network_set_soup_session_proxy (SoupSession *session, ProxyDetectMode mode, const gchar *host, guint port, const gchar *user, const gchar *password)
++network_set_soup_session_proxy (SoupSession *session, ProxyDetectMode mode)
+ {
+-	SoupURI *uri = NULL;
+-
+ 	switch (mode) {
++		case PROXY_DETECT_MODE_MANUAL:
++			/* Manual mode is not supported anymore, so we fall through to AUTO */
+ 		case PROXY_DETECT_MODE_AUTO:
+-			/* Sets proxy-resolver to the default resolver, this unsets proxy-uri. */
+-			g_object_set (G_OBJECT (session),
+-				SOUP_SESSION_PROXY_RESOLVER, g_proxy_resolver_get_default (),
+-				NULL);
++			debug0 (DEBUG_CONF, "proxy auto detect is configured");
++			soup_session_set_proxy_resolver (session, g_object_ref (g_proxy_resolver_get_default ()));
+ 			break;
+ 		case PROXY_DETECT_MODE_NONE:
+-			/* Sets proxy-resolver to NULL, this unsets proxy-uri. */
+-			g_object_set (G_OBJECT (session),
+-				SOUP_SESSION_PROXY_RESOLVER, NULL,
+-				NULL);
+-			break;
+-		case PROXY_DETECT_MODE_MANUAL:
+-			uri = soup_uri_new (NULL);
+-			soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP);
+-			soup_uri_set_host (uri, host);
+-			soup_uri_set_port (uri, port);
+-			soup_uri_set_user (uri, user);
+-			soup_uri_set_password (uri, password);
+-			soup_uri_set_path (uri, "/");
+-
+-			if (SOUP_URI_IS_VALID (uri)) {
+-				/* Sets proxy-uri, this unsets proxy-resolver. */
+-				g_object_set (G_OBJECT (session),
+-					SOUP_SESSION_PROXY_URI, uri,
+-					NULL);
+-			}
+-			soup_uri_free (uri);
++			debug0 (DEBUG_CONF, "proxy is disabled by user");
++			soup_session_set_proxy_resolver (session, NULL);
+ 			break;
+ 	}
+ }
+@@ -350,6 +319,19 @@ network_get_user_agent (void)
+ 	return useragent;
+ }
+ 
++void
++network_deinit (void)
++{
++	g_cancellable_cancel (cancellable);
++	g_free (cancellable);
++
++	soup_session_abort (session);
++	soup_session_abort (session2);
++
++	g_free (session);
++	g_free (session2);
++}
++
+ void
+ network_init (void)
+ {
+@@ -358,6 +340,8 @@ network_init (void)
+ 	gchar		*filename;
+ 	SoupLogger	*logger;
+ 
++	cancellable = g_cancellable_new ();
++
+ 	useragent = network_get_user_agent ();
+ 	debug1 (DEBUG_NET, "user-agent set to \"%s\"", useragent);
+ 
+@@ -367,95 +351,48 @@ network_init (void)
+ 	g_free (filename);
+ 
+ 	/* Initialize libsoup */
+-	session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, useragent,
+-						 SOUP_SESSION_TIMEOUT, 120,
+-						 SOUP_SESSION_IDLE_TIMEOUT, 30,
+-						 SOUP_SESSION_ADD_FEATURE, cookies,
++	session = soup_session_new_with_options ("user-agent", useragent,
++						 "timeout", 120,
++						 "idle-timeout", 30,
+ 						 NULL);
+-	session2 = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, useragent,
+-						  SOUP_SESSION_TIMEOUT, 120,
+-						  SOUP_SESSION_IDLE_TIMEOUT, 30,
+-						  SOUP_SESSION_ADD_FEATURE, cookies,
+-						  SOUP_SESSION_PROXY_URI, NULL,
+-						  SOUP_SESSION_PROXY_RESOLVER, NULL,
++	session2 = soup_session_new_with_options ("user-agent", useragent,
++						  "timeout", 120,
++						  "idle-timeout", 30,
+ 						  NULL);
+ 
+-	/* Only 'session' gets proxy, 'session2' is for non-proxy requests */
+-	network_set_soup_session_proxy (session, network_get_proxy_detect_mode(),
+-		network_get_proxy_host (),
+-		network_get_proxy_port (),
+-		network_get_proxy_username (),
+-		network_get_proxy_password ());
++	soup_session_add_feature (session, SOUP_SESSION_FEATURE (cookies));
++	soup_session_add_feature (session2, SOUP_SESSION_FEATURE (cookies));
+ 
+-	g_signal_connect (session, "authenticate", G_CALLBACK (network_authenticate), NULL);
++	/* Only 'session' gets proxy, 'session2' is for non-proxy requests */
++	soup_session_set_proxy_resolver (session2, NULL);
++	network_set_soup_session_proxy (session, network_get_proxy_detect_mode());
+ 
+ 	/* Soup debugging */
+ 	if (debug_level & DEBUG_NET) {
+-		logger = soup_logger_new (SOUP_LOGGER_LOG_HEADERS, -1);
++		logger = soup_logger_new (SOUP_LOGGER_LOG_HEADERS);
+ 		soup_session_add_feature (session, SOUP_SESSION_FEATURE (logger));
+ 	}
+ 
+ 	g_free (useragent);
+ }
+ 
+-void
+-network_deinit (void)
+-{
+-	g_free (proxyname);
+-	g_free (proxyusername);
+-	g_free (proxypassword);
+-}
+-
+ ProxyDetectMode
+ network_get_proxy_detect_mode (void)
+ {
+ 	return proxymode;
+ }
+ 
+-const gchar *
+-network_get_proxy_host (void)
+-{
+-	return proxyname;
+-}
+-
+-guint
+-network_get_proxy_port (void)
+-{
+-	return proxyport;
+-}
+-
+-const gchar *
+-network_get_proxy_username (void)
+-{
+-	return proxyusername;
+-}
+-
+-const gchar *
+-network_get_proxy_password (void)
+-{
+-	return proxypassword;
+-}
+-
+ extern void network_monitor_proxy_changed (void);
+ 
+ void
+-network_set_proxy (ProxyDetectMode mode, gchar *host, guint port, gchar *user, gchar *password)
++network_set_proxy (ProxyDetectMode mode)
+ {
+-	g_free (proxyname);
+-	g_free (proxyusername);
+-	g_free (proxypassword);
+ 	proxymode = mode;
+-	proxyname = host;
+-	proxyport = port;
+-	proxyusername = user;
+-	proxypassword = password;
+ 
+ 	/* session will be NULL if we were called from conf_init() as that's called
+ 	 * before net_init() */
+ 	if (session)
+-		network_set_soup_session_proxy (session, mode, host, port, user, password);
+-
+-	debug4 (DEBUG_NET, "proxy set to http://%s:%s@%s:%d", user, password, host, port);
++		network_set_soup_session_proxy (session, mode);
+ 
+ 	network_monitor_proxy_changed ();
+ }
+@@ -468,11 +405,6 @@ network_strerror (gint status)
+ 	switch (status) {
+ 		/* Some libsoup transport errors */
+ 		case SOUP_STATUS_NONE:			tmp = _("The update request was cancelled"); break;
+-		case SOUP_STATUS_CANT_RESOLVE:		tmp = _("Unable to resolve destination host name"); break;
+-		case SOUP_STATUS_CANT_RESOLVE_PROXY:	tmp = _("Unable to resolve proxy host name"); break;
+-		case SOUP_STATUS_CANT_CONNECT:		tmp = _("Unable to connect to remote host"); break;
+-		case SOUP_STATUS_CANT_CONNECT_PROXY:	tmp = _("Unable to connect to proxy"); break;
+-		case SOUP_STATUS_SSL_FAILED:		tmp = _("SSL/TLS negotiation failed. Possible outdated or unsupported encryption algorithm. Check your operating system settings."); break;
+ 
+ 		/* http 3xx redirection */
+ 		case SOUP_STATUS_MOVED_PERMANENTLY:	tmp = _("The resource moved permanently to a new location"); break;
+@@ -498,19 +430,8 @@ network_strerror (gint status)
+ 		case SOUP_STATUS_HTTP_VERSION_NOT_SUPPORTED: tmp = _("HTTP Version Not Supported"); break;
+ 	}
+ 
+-	if (!tmp) {
+-		if (SOUP_STATUS_IS_TRANSPORT_ERROR (status)) {
+-			tmp = _("There was an internal error in the update process");
+-		} else if (SOUP_STATUS_IS_REDIRECTION (status)) {
+-			tmp = _("Feed not available: Server requested unsupported redirection!");
+-		} else if (SOUP_STATUS_IS_CLIENT_ERROR (status)) {
+-			tmp = _("Client Error");
+-		} else if (SOUP_STATUS_IS_SERVER_ERROR (status)) {
+-			tmp = _("Server Error");
+-		} else {
+-			tmp = _("An unknown networking error happened!");
+-		}
+-	}
++	if (!tmp)
++		tmp = _("An unknown networking error happened!");
+ 
+ 	g_assert (tmp);
+ 
+diff --git a/src/net.h b/src/net.h
+index a0f0951fd..84651c0e1 100644
+--- a/src/net.h
++++ b/src/net.h
+@@ -54,16 +54,11 @@ typedef enum {
+ 
+ /**
+  * Configures the network client to use the given proxy
+- * settings. If the host name is NULL then no proxy will
+- * be used.
++ * settings.
+  *
+- * @param mode		indicate whether to use the system setting, no proxy or the following parameters.
+- * @param host		the new proxy host
+- * @param port		the new proxy port
+- * @param user		the new proxy username or NULL
+- * @param password	the new proxy password or NULL
++ * @param mode		indicate whether to use the system setting or no proxy
+  */
+-void network_set_proxy (ProxyDetectMode mode, gchar *host, guint port, gchar *user, gchar *password);
++void network_set_proxy (ProxyDetectMode mode);
+ 
+ /**
+  * Returns the proxy detect mode.
+diff --git a/src/ui/liferea_browser.c b/src/ui/liferea_browser.c
+index 51d2bc741..93a7c7ab3 100644
+--- a/src/ui/liferea_browser.c
++++ b/src/ui/liferea_browser.c
+@@ -289,13 +289,7 @@ liferea_browser_online_status_changed (NetworkMonitor *nm, gboolean online, gpoi
+ static void
+ liferea_browser_proxy_changed (NetworkMonitor *nm, gpointer userdata)
+ {
+-	liferea_webkit_set_proxy (
+-		network_get_proxy_detect_mode (),
+-		network_get_proxy_host (),
+-		network_get_proxy_port (),
+-		network_get_proxy_username (),
+-		network_get_proxy_password ()
+-	);
++	liferea_webkit_set_proxy (network_get_proxy_detect_mode ());
+ }
+ 
+ LifereaBrowser *
+diff --git a/src/webkit/webkit.c b/src/webkit/webkit.c
+index 892deb277..b77d7dced 100644
+--- a/src/webkit/webkit.c
++++ b/src/webkit/webkit.c
+@@ -617,14 +617,12 @@ liferea_webkit_scroll_pagedown (GtkWidget *webview)
+ }
+ 
+ void
+-liferea_webkit_set_proxy (ProxyDetectMode mode, const gchar *host, guint port, const gchar *user, const gchar *pwd)
++liferea_webkit_set_proxy (ProxyDetectMode mode)
+ {
+ #if WEBKIT_CHECK_VERSION (2, 15, 3)
+-	WebKitNetworkProxySettings *proxy_settings = NULL;
+-	gchar *proxy_uri = NULL;
+-	gchar *user_pass = NULL, *host_port = NULL;
+-
+ 	switch (mode) {
++		default:
++		case PROXY_DETECT_MODE_MANUAL:
+ 		case PROXY_DETECT_MODE_AUTO:
+ 			webkit_website_data_manager_set_network_proxy_settings
+ 			    (webkit_web_context_get_website_data_manager (webkit_web_context_get_default ()),
+@@ -637,43 +635,6 @@ liferea_webkit_set_proxy (ProxyDetectMode mode, const gchar *host, guint port, c
+ 			     WEBKIT_NETWORK_PROXY_MODE_NO_PROXY,
+ 			     NULL);
+ 			break;
+-		case PROXY_DETECT_MODE_MANUAL:
+-			/* Construct user:password part of the URI if specified. */
+-			if (user) {
+-				user_pass = g_uri_escape_string (user, NULL, TRUE);
+-				if (pwd) {
+-					gchar *enc_user = user_pass;
+-					gchar *enc_pass = g_uri_escape_string (pwd, NULL, TRUE);
+-					user_pass = g_strdup_printf ("%s:%s", enc_user, enc_pass);
+-					g_free (enc_user);
+-					g_free (enc_pass);
+-				}
+-			}
+-
+-			/* Construct the host:port part of the URI. */
+-			if (port) {
+-				host_port = g_strdup_printf ("%s:%d", host, port);
+-			} else {
+-				host_port = g_strdup (host);
+-			}
+-
+-			/* Construct proxy URI. */
+-			if (user) {
+-				proxy_uri = g_strdup_printf("http://%s@%s", user_pass, host_port);
+-			} else {
+-				proxy_uri = g_strdup_printf("http://%s", host_port);
+-			}
+-
+-			g_free (user_pass);
+-			g_free (host_port);
+-			proxy_settings = webkit_network_proxy_settings_new (proxy_uri, NULL);
+-			g_free (proxy_uri);
+-			webkit_website_data_manager_set_network_proxy_settings
+-			    (webkit_web_context_get_website_data_manager (webkit_web_context_get_default ()),
+-			     WEBKIT_NETWORK_PROXY_MODE_CUSTOM,
+-			     proxy_settings);
+-			webkit_network_proxy_settings_free (proxy_settings);
+-			break;
+ 	}
+ #endif
+ }
+diff --git a/src/webkit/webkit.h b/src/webkit/webkit.h
+index b91651b8f..dfa095497 100644
+--- a/src/webkit/webkit.h
++++ b/src/webkit/webkit.h
+@@ -98,7 +98,7 @@ void liferea_webkit_scroll_pagedown (GtkWidget *webview);
+ /**
+  * liferea_webkit_set_proxy: (skip)
+  */
+-void liferea_webkit_set_proxy (ProxyDetectMode mode, const gchar *host, guint port, const gchar *user, const gchar *pwd);
++void liferea_webkit_set_proxy (ProxyDetectMode mode);
+ 
+ /**
+  * liferea_webkit_reload_style:
+
+From 2f998930d43bf397f4209c1341714548228db98e Mon Sep 17 00:00:00 2001
+From: Lars Windolf <lars.windolf@gmx.de>
+Date: Fri, 31 Mar 2023 10:18:38 +0200
+Subject: [PATCH 02/20] Fixes webkit2gtk-web-extension version
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 015dd1ceb..6d309050c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -59,7 +59,7 @@ AC_SUBST(PACKAGE_LIBS)
+ 
+ 
+ PKG_CHECK_MODULES([WEB_EXTENSION], [
+-                  webkit2gtk-web-extension-4.0
++                  webkit2gtk-web-extension-4.1
+                   ])
+ AC_SUBST([WEB_EXTENSION_CFLAGS])
+ AC_SUBST([WEB_EXTENSION_LIBS])
+
+From 3b2534eb686a0cd44be98f597ed21b0ab25a94d4 Mon Sep 17 00:00:00 2001
+From: Lars Windolf <lars.windolf@gmx.de>
+Date: Sat, 1 Apr 2023 15:42:19 +0200
+Subject: [PATCH 11/20] Fix crash on autoptr free
+
+---
+ src/net.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/net.c b/src/net.c
+index 64e8eb732..82108ac9c 100644
+--- a/src/net.c
++++ b/src/net.c
+@@ -151,6 +151,7 @@ network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr j
+ 	}
+ 
+ 	update_process_finished_job (job);
++	g_object_unref (stream);
+ }
+ 
+ /* Downloads a URL specified in the request structure, returns
+@@ -163,7 +164,7 @@ network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr j
+ void
+ network_process_request (const updateJobPtr job)
+ {
+-	g_autoptr(GInputStream)	stream;
++	GInputStream		*stream;
+ 	g_autoptr(SoupMessage)	msg = NULL;
+ 	SoupMessageHeaders	*request_headers;
+ 	g_autoptr(GUri)		sourceUri;
+
+From 5df4424ac873a6a79474c05388773413ac287528 Mon Sep 17 00:00:00 2001
+From: Lars Windolf <lars.windolf@gmx.de>
+Date: Sat, 1 Apr 2023 15:44:17 +0200
+Subject: [PATCH 12/20] Bump glib dependency for g_memdup2()
+
+---
+ configure.ac | 2 +-
+ src/net.c    | 5 -----
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6d309050c..efd3d0c24 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -30,7 +30,7 @@ PKG_PROG_PKG_CONFIG()
+ # Mandatory library dependencies
+ 
+ pkg_modules="	gtk+-3.0 >= 3.22.0
+-		glib-2.0 >= 2.50.0
++		glib-2.0 >= 2.68.0
+ 		gio-2.0 >= 2.50.0
+ 		pango >= 1.4.0 
+ 		libxml-2.0 >= 2.6.27
+diff --git a/src/net.c b/src/net.c
+index 82108ac9c..e7a82eae6 100644
+--- a/src/net.c
++++ b/src/net.c
+@@ -87,12 +87,7 @@ network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr j
+ 	debug1 (DEBUG_NET, "source after download: >>>%s<<<", job->result->source);
+ 
+ 	body = g_input_stream_read_bytes (stream, G_MAXSSIZE, cancellable, NULL);
+-
+-#ifdef HAVE_G_MEMDUP2
+ 	job->result->data = g_memdup2 (g_bytes_get_data (body, &job->result->size), g_bytes_get_size (body));
+-#else
+-	job->result->data = g_memdup (g_bytes_get_data (body, &job->result->size), g_bytes_get_size (body));
+-#endif
+ 
+ 	debug1 (DEBUG_NET, "%d bytes downloaded", job->result->size);
+ 
+
+From 87cba0ba9a5d03ec6a5cc5f8659042f129b29e76 Mon Sep 17 00:00:00 2001
+From: Lars Windolf <lars.windolf@gmx.de>
+Date: Sat, 1 Apr 2023 16:28:39 +0200
+Subject: [PATCH 13/20] Make downloading work.
+
+---
+ src/net.c | 62 ++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 39 insertions(+), 23 deletions(-)
+
+diff --git a/src/net.c b/src/net.c
+index e7a82eae6..95ed8c522 100644
+--- a/src/net.c
++++ b/src/net.c
+@@ -52,9 +52,9 @@ network_process_redirect_callback (SoupMessage *msg, gpointer user_data)
+ 	SoupStatus	status = soup_message_get_status (msg);
+ 
+ 	if (SOUP_STATUS_MOVED_PERMANENTLY == status || SOUP_STATUS_PERMANENT_REDIRECT == status) {
+-		if (g_uri_is_valid (location, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, NULL)) {
++		if (g_uri_is_valid (location, G_URI_FLAGS_PARSE_RELAXED, NULL)) {
+ 			location = soup_message_headers_get_one (soup_message_get_response_headers (msg), "Location");
+-			newuri = g_uri_parse (location, SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED, NULL);
++			newuri = g_uri_parse (location, G_URI_FLAGS_PARSE_RELAXED, NULL);
+ 
+ 			if (!soup_uri_equal (newuri, soup_message_get_uri (msg))) {
+ 				job->result->httpstatus = status;
+@@ -67,28 +67,31 @@ network_process_redirect_callback (SoupMessage *msg, gpointer user_data)
+ }
+ 
+ static void
+-network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr job)
++network_process_callback (GObject *obj, GAsyncResult *res, gpointer user_data)
+ {
+-	g_autoptr(GBytes)	body = NULL;
++	SoupSession		*session = SOUP_SESSION (obj);
++	SoupMessage		*msg;
++	updateJobPtr		job = (updateJobPtr)user_data;
+ 	GDateTime		*last_modified;
+ 	const gchar		*tmp = NULL;
+ 	GHashTable		*params;
+ 	gboolean		revalidated = FALSE;
+ 	gint			maxage;
+ 	gint			age;
++	g_autoptr(GBytes)	body;
++
++	msg = soup_session_get_async_result_message (session, res);
++	body = soup_session_send_and_read_finish (session, res, NULL);	// FIXME: handle errors!
+ 
+ 	job->result->source = g_uri_to_string_partial (soup_message_get_uri (msg), 0);
+ 	job->result->httpstatus = soup_message_get_status (msg);
++	job->result->data = g_memdup2 (g_bytes_get_data (body, &job->result->size), g_bytes_get_size (body));
+ 
+ 	/* keep some request headers for revalidated responses */
+ 	revalidated = (304 == job->result->httpstatus);
+ 
+ 	debug1 (DEBUG_NET, "download status code: %d", job->result->httpstatus);
+ 	debug1 (DEBUG_NET, "source after download: >>>%s<<<", job->result->source);
+-
+-	body = g_input_stream_read_bytes (stream, G_MAXSSIZE, cancellable, NULL);
+-	job->result->data = g_memdup2 (g_bytes_get_data (body, &job->result->size), g_bytes_get_size (body));
+-
+ 	debug1 (DEBUG_NET, "%d bytes downloaded", job->result->size);
+ 
+ 	job->result->contentType = g_strdup (soup_message_headers_get_content_type (soup_message_get_response_headers (msg), NULL));
+@@ -104,7 +107,7 @@ network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr j
+ 			last_modified = soup_date_time_new_from_http_string (tmp);
+ 			if (last_modified) {
+ 				job->result->updateState->lastModified = g_date_time_to_unix (last_modified);
+-				g_free (last_modified);
++				g_date_time_unref (last_modified);
+ 			}
+ 		}
+ 	}
+@@ -146,7 +149,7 @@ network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr j
+ 	}
+ 
+ 	update_process_finished_job (job);
+-	g_object_unref (stream);
++	g_bytes_unref (body);
+ }
+ 
+ /* Downloads a URL specified in the request structure, returns
+@@ -159,30 +162,46 @@ network_process_callback (GInputStream *stream, SoupMessage *msg, updateJobPtr j
+ void
+ network_process_request (const updateJobPtr job)
+ {
+-	GInputStream		*stream;
+ 	g_autoptr(SoupMessage)	msg = NULL;
+ 	SoupMessageHeaders	*request_headers;
+ 	g_autoptr(GUri)		sourceUri;
+ 	gboolean		do_not_track = FALSE;
++	g_autofree gchar	*scheme = NULL, *user = NULL, *password = NULL, *auth_params = NULL, *host = NULL, *path = NULL, *query = NULL, *fragment = NULL;
++	gint			port;
+ 
+ 	g_assert (NULL != job->request);
+ 	debug1 (DEBUG_NET, "downloading %s", job->request->source);
+ 	if (job->request->postdata && (debug_level & DEBUG_VERBOSE) && (debug_level & DEBUG_NET))
+ 		debug1 (DEBUG_NET, "   postdata=>>>%s<<<", job->request->postdata);
+ 
++	g_uri_split_with_user (job->request->source,
++	                       G_URI_FLAGS_ENCODED,
++			       &scheme,
++			       &user,
++			       &password,
++			       &auth_params,
++			       &host,
++			       &port,
++			       &path,
++			       &query,
++			       &fragment,
++			       NULL);
++
+ 	/* Prepare the SoupMessage */
+ 	sourceUri = g_uri_build_with_user (
+ 		SOUP_HTTP_URI_FLAGS | G_URI_FLAGS_PARSE_RELAXED,
+-		g_uri_peek_scheme (job->request->source),
++		scheme,
++		// FIXME: allow passing user/password from above?
+ 		(!job->request->authValue && job->request->options && job->request->options->username)?job->request->options->username:NULL,
+ 		(!job->request->authValue && job->request->options && job->request->options->password)?job->request->options->password:NULL,
+-		NULL,	/* auth_params */
+-		NULL,	/* host */
+-		-1,	/* port */
+-		job->request->source,
+-		NULL,	/* query */
+-		NULL	/* fragment */
++		auth_params,
++		host,
++		port,
++		path,
++		query,
++		fragment
+ 	);
++
+ 	if (sourceUri)
+ 		msg = soup_message_new_from_uri (job->request->postdata?"POST":"GET", sourceUri);
+ 	if (!msg) {
+@@ -263,12 +282,9 @@ network_process_request (const updateJobPtr job)
+ 
+ 	/* If the feed has "dont use a proxy" selected, use 'session2' which is non-proxy */
+ 	if (job->request->options && job->request->options->dontUseProxy)
+-		stream = soup_session_send (session2, msg, cancellable, NULL);
++		soup_session_send_and_read_async (session2, msg, 0 /* IO priority */, cancellable, network_process_callback, job);
+ 	else
+-		stream = soup_session_send (session, msg, cancellable, NULL);
+-
+-	if (stream)
+-		network_process_callback (stream, msg, job);
++		soup_session_send_and_read_async (session, msg, 0 /* IO priority */, cancellable, network_process_callback, job);
+ }
+ 
+ static void
+
+From 700ec2f4ba5ae525f94c5526f8c3cce9a64e95ef Mon Sep 17 00:00:00 2001
+From: Lars Windolf <lars.windolf@gmx.de>
+Date: Fri, 15 Sep 2023 22:54:17 +0200
+Subject: [PATCH] Fixes #1297: auto disable webkit-settings plugin.
+
+---
+ src/plugins_engine.c | 134 ++++++++++++++++++++++++-------------------
+ 1 file changed, 76 insertions(+), 58 deletions(-)
+
+diff --git a/src/plugins_engine.c b/src/plugins_engine.c
+index 1afd2b9aa..63919ef3a 100644
+--- a/src/plugins_engine.c
++++ b/src/plugins_engine.c
+@@ -47,64 +47,82 @@ LifereaPluginsEngine *default_engine = NULL;
+ static void
+ liferea_plugins_engine_init (LifereaPluginsEngine * engine)
+ {
+-  gchar *typelib_dir;
+-  GError *error = NULL;
+-  PeasPluginInfo *plugin_installer_plugin_info = NULL;
+-
+-  engine->priv = liferea_plugins_engine_get_instance_private (engine);
+-
+-  peas_engine_enable_loader (PEAS_ENGINE (engine), "python3");
+-
+-  engine->priv->plugin_settings = g_settings_new ("net.sf.liferea.plugins");
+-
+-  /* Require Lifereas's typelib. */
+-  typelib_dir = g_build_filename (PACKAGE_LIB_DIR,
+-                                  "girepository-1.0", NULL);
+-
+-  if (!g_irepository_require_private (g_irepository_get_default (),
+-	  typelib_dir, "Liferea", "3.0", 0, &error))
+-    {
+-      g_warning ("Could not load Liferea repository: %s", error->message);
+-      g_error_free (error);
+-      error = NULL;
+-    }
+-
+-  g_free (typelib_dir);
+-
+-  /* This should be moved to libpeas */
+-  if (!g_irepository_require (g_irepository_get_default (),
+-                              "Peas", "1.0", 0, &error))
+-    {
+-      g_warning ("Could not load Peas repository: %s", error->message);
+-      g_error_free (error);
+-      error = NULL;
+-    }
+-
+-  if (!g_irepository_require (g_irepository_get_default (),
+-                              "PeasGtk", "1.0", 0, &error))
+-    {
+-      g_warning ("Could not load PeasGtk repository: %s", error->message);
+-      g_error_free (error);
+-      error = NULL;
+-    }
+-
+-  peas_engine_add_search_path (PEAS_ENGINE (engine),
+-                               g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL),
+-                               g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL));
+-
+-  peas_engine_add_search_path (PEAS_ENGINE (engine),
+-                               g_build_filename (PACKAGE_LIB_DIR,  "plugins", NULL),
+-                               g_build_filename (PACKAGE_DATA_DIR, "plugins", NULL));
+-
+-  g_settings_bind (engine->priv->plugin_settings,
+-                   "active-plugins",
+-                   engine, "loaded-plugins", G_SETTINGS_BIND_DEFAULT);
+-
+-  plugin_installer_plugin_info = peas_engine_get_plugin_info (PEAS_ENGINE (engine), "plugin-installer");
+-  if (plugin_installer_plugin_info)
+-	peas_engine_load_plugin (PEAS_ENGINE (engine), plugin_installer_plugin_info);
+-  else
+-	g_warning ("The plugin-installer plugin was not found.");
++	gchar	*typelib_dir;
++	const gchar **names;
++	gsize	length;
++	GError *error = NULL;
++	GVariant *list;
++	PeasPluginInfo *plugin_installer_plugin_info = NULL;
++
++	engine->priv = liferea_plugins_engine_get_instance_private (engine);
++
++	peas_engine_enable_loader (PEAS_ENGINE (engine), "python3");
++
++	engine->priv->plugin_settings = g_settings_new ("net.sf.liferea.plugins");
++
++	/* Disable incompatible webkit-settings plugin */
++	list = g_settings_get_value (engine->priv->plugin_settings, "active-plugins");
++	names = g_variant_get_strv (list, &length);
++	if (g_strv_contains (names, "webkit-settings")) {
++		GVariantBuilder b;
++		guint i;
++
++		g_variant_builder_init (&b, G_VARIANT_TYPE_ARRAY);
++		for (i = 0; i < length; i++) {
++			if (!g_str_equal (names[i], "webkit-settings"))
++				g_variant_builder_add_parsed (&b, "%s", names[i]);
++		}
++		g_free (list);
++		list = g_variant_builder_end (&b);
++		g_settings_set_value (engine->priv->plugin_settings, "active-plugins", list);
++	}
++	g_free (names);
++
++	/* Require Lifereas's typelib. */
++	typelib_dir = g_build_filename (PACKAGE_LIB_DIR,
++					"girepository-1.0", NULL);
++
++	if (!g_irepository_require_private (g_irepository_get_default (),
++		typelib_dir, "Liferea", "3.0", 0, &error)) {
++		g_warning ("Could not load Liferea repository: %s", error->message);
++		g_error_free (error);
++		error = NULL;
++	}
++
++	g_free (typelib_dir);
++
++	/* This should be moved to libpeas */
++	if (!g_irepository_require (g_irepository_get_default (),
++				"Peas", "1.0", 0, &error)) {
++		g_warning ("Could not load Peas repository: %s", error->message);
++		g_error_free (error);
++		error = NULL;
++	}
++
++	if (!g_irepository_require (g_irepository_get_default (),
++				"PeasGtk", "1.0", 0, &error)) {
++		g_warning ("Could not load PeasGtk repository: %s", error->message);
++		g_error_free (error);
++		error = NULL;
++	}
++
++	peas_engine_add_search_path (PEAS_ENGINE (engine),
++		g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL),
++		g_build_filename (g_get_user_data_dir (), "liferea", "plugins", NULL));
++
++	peas_engine_add_search_path (PEAS_ENGINE (engine),
++		g_build_filename (PACKAGE_LIB_DIR,  "plugins", NULL),
++		g_build_filename (PACKAGE_DATA_DIR, "plugins", NULL));
++
++	g_settings_bind (engine->priv->plugin_settings,
++			"active-plugins",
++			engine, "loaded-plugins", G_SETTINGS_BIND_DEFAULT);
++
++	plugin_installer_plugin_info = peas_engine_get_plugin_info (PEAS_ENGINE (engine), "plugin-installer");
++	if (plugin_installer_plugin_info)
++		peas_engine_load_plugin (PEAS_ENGINE (engine), plugin_installer_plugin_info);
++	else
++		g_warning ("The plugin-installer plugin was not found.");
+ }
+ 
+ /* Provide default signal handlers */
+diff --git a/src/plugins_engine.c b/src/plugins_engine.c
+index 63919ef3a..1083eef02 100644
+--- a/src/plugins_engine.c
++++ b/src/plugins_engine.c
+@@ -55,9 +55,6 @@ liferea_plugins_engine_init (LifereaPluginsEngine * engine)
+ 	PeasPluginInfo *plugin_installer_plugin_info = NULL;
+ 
+ 	engine->priv = liferea_plugins_engine_get_instance_private (engine);
+-
+-	peas_engine_enable_loader (PEAS_ENGINE (engine), "python3");
+-
+ 	engine->priv->plugin_settings = g_settings_new ("net.sf.liferea.plugins");
+ 
+ 	/* Disable incompatible webkit-settings plugin */
+@@ -78,6 +75,8 @@ liferea_plugins_engine_init (LifereaPluginsEngine * engine)
+ 	}
+ 	g_free (names);
+ 
++	peas_engine_enable_loader (PEAS_ENGINE (engine), "python3");
++
+ 	/* Require Lifereas's typelib. */
+ 	typelib_dir = g_build_filename (PACKAGE_LIB_DIR,
+ 					"girepository-1.0", NULL);
diff --git a/srcpkgs/liferea/template b/srcpkgs/liferea/template
index 4c42fa49fe03d7..f1af851810b012 100644
--- a/srcpkgs/liferea/template
+++ b/srcpkgs/liferea/template
@@ -1,11 +1,12 @@
 # Template file for 'liferea'
 pkgname=liferea
-version=1.14.5
+version=1.14.6
 revision=1
 build_style=gnu-configure
 build_helper=gir
-hostmakedepends="pkg-config intltool libglib-devel"
-makedepends="libxslt-devel webkit2gtk-devel libsoup-devel
+hostmakedepends="pkg-config intltool glib-devel
+ automake libtool gettext-devel"
+makedepends="libxslt-devel libwebkit2gtk41-devel libsoup3-devel
  json-glib-devel $(vopt_if gir gobject-introspection)
  gsettings-desktop-schemas-devel libpeas-devel python3-devel sqlite-devel"
 depends="python3"
@@ -15,8 +16,12 @@ license="GPL-2.0-or-later"
 homepage="https://lzone.de/liferea/"
 changelog="https://raw.githubusercontent.com/lwindolf/liferea/master/ChangeLog"
 distfiles="https://github.com/lwindolf/liferea/releases/download/v${version}/${pkgname}-${version}.tar.bz2"
-checksum=2244e78d8f6b6e28f411a3554d61496a012d5fe1392fe1b475978ecfd8c61177
+checksum=36f28e51d26eebcbd3460c53eb5cb012855a5fc6cce6bca58103dfc06353cc72
 lib32disabled=yes
 
 build_options="gir"
 build_options_default="gir"
+
+pre_configure() {
+	autoreconf -fi
+}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PR PATCH] [Merged]: liferea: update to 1.14.6.
  2024-06-21 22:41 [PR PATCH] liferea: update to 1.14.6 oreo639
@ 2024-06-23  6:06 ` oreo639
  0 siblings, 0 replies; 3+ messages in thread
From: oreo639 @ 2024-06-23  6:06 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1091 bytes --]

There's a merged pull request on the void-packages repository

liferea: update to 1.14.6.
https://github.com/void-linux/void-packages/pull/50918

Description:
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PR PATCH] liferea: update to 1.14.6.
@ 2024-03-17 10:19 geekdiop
  0 siblings, 0 replies; 3+ messages in thread
From: geekdiop @ 2024-03-17 10:19 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1234 bytes --]

There is a new pull request by geekdiop against master on the void-packages repository

https://github.com/geekdiop/void-packages master
https://github.com/void-linux/void-packages/pull/49333

liferea: update to 1.14.6.
<!-- Uncomment relevant sections and delete options which are not applicable -->

Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->


A patch file from https://github.com/void-linux/void-packages/pull/49333.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-master-49333.patch --]
[-- Type: text/x-diff, Size: 1328 bytes --]

From fda005c5083ba8150ecd30f6de2c5aaea5b58b21 Mon Sep 17 00:00:00 2001
From: g33k <68657906+geekdiop@users.noreply.github.com>
Date: Sun, 17 Mar 2024 10:14:02 +0000
Subject: [PATCH] liferea: update to 1.14.6.

---
 srcpkgs/liferea/template | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/liferea/template b/srcpkgs/liferea/template
index 4c42fa49fe03d7..a8dd9345030cad 100644
--- a/srcpkgs/liferea/template
+++ b/srcpkgs/liferea/template
@@ -1,6 +1,6 @@
 # Template file for 'liferea'
 pkgname=liferea
-version=1.14.5
+version=1.14.6
 revision=1
 build_style=gnu-configure
 build_helper=gir
@@ -10,12 +10,11 @@ makedepends="libxslt-devel webkit2gtk-devel libsoup-devel
  gsettings-desktop-schemas-devel libpeas-devel python3-devel sqlite-devel"
 depends="python3"
 short_desc="GTK news aggregator"
-maintainer="Enno Boland <gottox@voidlinux.org>"
 license="GPL-2.0-or-later"
 homepage="https://lzone.de/liferea/"
 changelog="https://raw.githubusercontent.com/lwindolf/liferea/master/ChangeLog"
 distfiles="https://github.com/lwindolf/liferea/releases/download/v${version}/${pkgname}-${version}.tar.bz2"
-checksum=2244e78d8f6b6e28f411a3554d61496a012d5fe1392fe1b475978ecfd8c61177
+checksum=36f28e51d26eebcbd3460c53eb5cb012855a5fc6cce6bca58103dfc06353cc72
 lib32disabled=yes
 
 build_options="gir"

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-06-23  6:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-21 22:41 [PR PATCH] liferea: update to 1.14.6 oreo639
2024-06-23  6:06 ` [PR PATCH] [Merged]: " oreo639
  -- strict thread matches above, loose matches on Subject: below --
2024-03-17 10:19 [PR PATCH] " geekdiop

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).