Github messages for voidlinux
 help / color / mirror / Atom feed
From: sgn <sgn@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] xfce4-weather-plugin: update to 0.11.1.
Date: Fri, 08 Mar 2024 12:48:21 +0100	[thread overview]
Message-ID: <20240308114821.B7479217EB@inbox.vuxu.org> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-49048@inbox.vuxu.org>

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

There is an updated pull request by sgn against master on the void-packages repository

https://github.com/sgn/void-packages xfce4-weather-plugins-no-libsoup-3.0
https://github.com/void-linux/void-packages/pull/49048

xfce4-weather-plugin: update to 0.11.1.
Carry patches for libsoup-3.0 because upstream wants to wait until  Xfce 4.20 is released  or  late 2024 - early 2025,
https://gitlab.xfce.org/panel-plugins/xfce4-weather-plugin/-/merge_requests/28

#### 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/49048.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-xfce4-weather-plugins-no-libsoup-3.0-49048.patch --]
[-- Type: text/x-diff, Size: 32775 bytes --]

From c0eb6d00632210925de1af054c23387ee837f78e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
 <congdanhqx@gmail.com>
Date: Sun, 3 Mar 2024 12:00:10 +0700
Subject: [PATCH] xfce4-weather-plugin: update to 0.11.2.

---
 ...s-Generalise-input-to-array-of-gchar.patch | 266 +++++++++
 .../0004-libsoup-Port-to-libsoup-3.0.patch    | 540 ++++++++++++++++++
 srcpkgs/xfce4-weather-plugin/template         |  13 +-
 3 files changed, 815 insertions(+), 4 deletions(-)
 create mode 100644 srcpkgs/xfce4-weather-plugin/patches/0003-parsers-Generalise-input-to-array-of-gchar.patch
 create mode 100644 srcpkgs/xfce4-weather-plugin/patches/0004-libsoup-Port-to-libsoup-3.0.patch

diff --git a/srcpkgs/xfce4-weather-plugin/patches/0003-parsers-Generalise-input-to-array-of-gchar.patch b/srcpkgs/xfce4-weather-plugin/patches/0003-parsers-Generalise-input-to-array-of-gchar.patch
new file mode 100644
index 00000000000000..3856ddabab611d
--- /dev/null
+++ b/srcpkgs/xfce4-weather-plugin/patches/0003-parsers-Generalise-input-to-array-of-gchar.patch
@@ -0,0 +1,266 @@
+From dc3e3cdcba7d1c5159bb27b390ffd1b3a7feeb84 Mon Sep 17 00:00:00 2001
+From: Đoàn Trần Công Danh <congdanhqx@gmail.com>
+Date: Fri, 1 Mar 2024 21:56:34 +0700
+Subject: [PATCH 3/4] parsers: Generalise input to array of gchar
+
+In a later change, we will move to libsoup-3.0, which doesn't expose
+`response_body' in SoupMessage.
+
+Prepare for that move.
+---
+ panel-plugin/weather-config.c  | 18 +++++++++++++++--
+ panel-plugin/weather-parsers.c | 36 ++++++++++++++++++----------------
+ panel-plugin/weather-parsers.h |  7 +++----
+ panel-plugin/weather-search.c  | 18 +++++++++++++++--
+ panel-plugin/weather.c         | 26 ++++++++++++++++++++----
+ 5 files changed, 76 insertions(+), 29 deletions(-)
+
+diff --git a/panel-plugin/weather-config.c b/panel-plugin/weather-config.c
+index 66e0719..d08f2d2 100644
+--- a/panel-plugin/weather-config.c
++++ b/panel-plugin/weather-config.c
+@@ -241,9 +241,16 @@ cb_lookup_altitude(SoupSession *session,
+     xfceweather_dialog *dialog = (xfceweather_dialog *) user_data;
+     xml_altitude *altitude;
+     gdouble alt = 0;
++    const gchar *body = NULL;
++    gsize len = 0;
++
++    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
++        body = msg->response_body->data;
++        len = msg->response_body->length;
++    }
+ 
+     altitude = (xml_altitude *)
+-        parse_xml_document(msg, (XmlParseFunc) parse_altitude);
++        parse_xml_document(body, len, (XmlParseFunc) parse_altitude);
+ 
+     if (altitude) {
+         alt = string_to_double(altitude->altitude, -9999);
+@@ -265,9 +272,16 @@ cb_lookup_timezone(SoupSession *session,
+ {
+     xfceweather_dialog *dialog = (xfceweather_dialog *) user_data;
+     xml_timezone *xml_tz;
++    const gchar *body = NULL;
++    gsize len = 0;
++
++    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
++        body = msg->response_body->data;
++        len = msg->response_body->length;
++    }
+ 
+     xml_tz = (xml_timezone *)
+-        parse_xml_document(msg, (XmlParseFunc) parse_timezone);
++        parse_xml_document(body, len, (XmlParseFunc) parse_timezone);
+     weather_dump(weather_dump_timezone, xml_tz);
+ 
+     if (xml_tz) {
+diff --git a/panel-plugin/weather-parsers.c b/panel-plugin/weather-parsers.c
+index d53a2bc..28934c4 100644
+--- a/panel-plugin/weather-parsers.c
++++ b/panel-plugin/weather-parsers.c
+@@ -791,49 +791,51 @@ parse_timezone(xmlNode *cur_node)
+ 
+ 
+ xmlDoc *
+-get_xml_document(SoupMessage *msg)
++get_xml_document(const gchar *data, gsize len)
+ {
+-    if (G_LIKELY(msg && msg->response_body && msg->response_body->data)) {
+-        if (g_utf8_validate(msg->response_body->data, -1, NULL)) {
++    if (G_LIKELY(data && len)) {
++        if (g_utf8_validate(data, len, NULL)) {
+             /* force parsing as UTF-8, the XML encoding header may lie */
+-            return xmlReadMemory(msg->response_body->data,
+-                                 strlen(msg->response_body->data),
++            return xmlReadMemory(data, len,
+                                  NULL, "UTF-8", 0);
+         } else {
+-            return xmlParseMemory(msg->response_body->data,
+-                                  strlen(msg->response_body->data));
++            return xmlParseMemory(data, len);
+         }
+     }
+     return NULL;
+ }
+ 
+ json_object *
+-get_json_tree(SoupMessage *msg)
++get_json_tree(const gchar *data, gsize len)
+ {
+     json_object *res=NULL;
+-    enum json_tokener_error err;
++    struct json_tokener *tok = json_tokener_new();
+ 
+-    if (G_LIKELY(msg && msg->response_body && msg->response_body->data)) {
+-        res =  json_tokener_parse_verbose(msg->response_body->data, &err);
+-        if (err != json_tokener_success)
+-            g_warning("get_json_tree: error =%d",err);
++    if (G_UNLIKELY(tok == NULL)) {
++        return NULL;
++    } else if (G_LIKELY(data && len)) {
++        res =  json_tokener_parse_ex(tok, data, len);
++        if (res == NULL)
++            g_warning("get_json_tree: error =%d",
++                      json_tokener_get_error(tok));
+     }
++    json_tokener_free(tok);
+     return res;
+ }
+ 
+ gpointer
+-parse_xml_document(SoupMessage *msg,
++parse_xml_document(const gchar *data, gsize len,
+                    XmlParseFunc parse_func)
+ {
+     xmlDoc *doc;
+     xmlNode *root_node;
+     gpointer user_data = NULL;
+ 
+-    g_assert(msg != NULL);
+-    if (G_UNLIKELY(msg == NULL))
++    g_assert(data != NULL);
++    if (G_UNLIKELY(data == NULL || len == 0))
+         return NULL;
+ 
+-    doc = get_xml_document(msg);
++    doc = get_xml_document(data, len);
+     if (G_LIKELY(doc)) {
+         root_node = xmlDocGetRootElement(doc);
+         if (G_LIKELY(root_node))
+diff --git a/panel-plugin/weather-parsers.h b/panel-plugin/weather-parsers.h
+index a9d019d..09b9c02 100644
+--- a/panel-plugin/weather-parsers.h
++++ b/panel-plugin/weather-parsers.h
+@@ -22,7 +22,6 @@
+ #include <glib.h>
+ #include <gtk/gtk.h>
+ #include <libxml/parser.h>
+-#include <libsoup/soup.h>
+ #include <json-c/json_tokener.h>
+ 
+ #define DATA_EXPIRY_TIME (24 * 3600)
+@@ -157,11 +156,11 @@ xml_astro *get_astro(const GArray *astrodata,
+                      const time_t day_t,
+                      guint *index);
+ 
+-xmlDoc *get_xml_document(SoupMessage *msg);
++xmlDoc *get_xml_document(const gchar *data, gsize len);
+ 
+-json_object *get_json_tree(SoupMessage *msg);
++json_object *get_json_tree(const gchar *data, gsize len);
+ 
+-gpointer parse_xml_document(SoupMessage *msg,
++gpointer parse_xml_document(const gchar *data, gsize len,
+                             XmlParseFunc parse_func);
+ 
+ xml_astro *xml_astro_copy(const xml_astro *src);
+diff --git a/panel-plugin/weather-search.c b/panel-plugin/weather-search.c
+index b63e68d..cfbcd55 100644
+--- a/panel-plugin/weather-search.c
++++ b/panel-plugin/weather-search.c
+@@ -87,10 +87,17 @@ cb_searchdone(SoupSession *session,
+     gint found = 0;
+     GtkTreeIter iter;
+     GtkTreeSelection *selection;
++    const gchar *body = NULL;
++    gsize len = 0;
++
++    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
++        body = msg->response_body->data;
++        len = msg->response_body->length;
++    }
+ 
+     gtk_widget_set_sensitive(dialog->find_button, TRUE);
+ 
+-    doc = get_xml_document(msg);
++    doc = get_xml_document(body, len);
+     if (!doc)
+         return;
+ 
+@@ -377,9 +384,16 @@ cb_geolocation(SoupSession *session,
+     xml_geolocation *geo;
+     gchar *full_loc;
+     units_config *units;
++    const gchar *body = NULL;
++    gsize len = 0;
++
++    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
++        body = msg->response_body->data;
++        len = msg->response_body->length;
++    }
+ 
+     geo = (xml_geolocation *)
+-        parse_xml_document(msg, (XmlParseFunc) parse_geolocation);
++        parse_xml_document(body, len, (XmlParseFunc) parse_geolocation);
+     weather_dump(weather_dump_geolocation, geo);
+ 
+     if (!geo) {
+diff --git a/panel-plugin/weather.c b/panel-plugin/weather.c
+index daebd00..3a6a2b6 100644
+--- a/panel-plugin/weather.c
++++ b/panel-plugin/weather.c
+@@ -494,11 +494,17 @@ cb_astro_update_sun(SoupSession *session,
+     json_object *json_tree;
+     time_t now_t;
+     guint astro_forecast_days;
++    const gchar *body = NULL;
++    gsize len = 0;
+ 
+     data->msg_parse->sun_msg_processed++;
+     data->astro_update->http_status_code = msg->status_code;
+     if ((msg->status_code == 200 || msg->status_code == 203)) {
+-        json_tree = get_json_tree(msg);
++        if (G_LIKELY(msg->response_body && msg->response_body->data)) {
++            body = msg->response_body->data;
++            len = msg->response_body->length;
++        }
++        json_tree = get_json_tree(body, len);
+         if (G_LIKELY(json_tree)) {
+             if (!parse_astrodata_sun(json_tree, data->astrodata))  {
+                 data->msg_parse->sun_msg_parse_error++;
+@@ -550,11 +556,17 @@ cb_astro_update_moon(SoupSession *session,
+     json_object *json_tree;
+     time_t now_t;
+     guint astro_forecast_days;
++    const gchar *body = NULL;
++    gsize len = 0;
+ 
+     data->msg_parse->moon_msg_processed++;
+     data->astro_update->http_status_code = msg->status_code;
+     if ((msg->status_code == 200 || msg->status_code == 203)) {
+-        json_tree = get_json_tree(msg);
++        if (G_LIKELY(msg->response_body && msg->response_body->data)) {
++            body = msg->response_body->data;
++            len = msg->response_body->length;
++        }
++        json_tree = get_json_tree(body, len);
+         if (G_LIKELY(json_tree)) {
+             if (!parse_astrodata_moon(json_tree, data->astrodata))  {
+                 data->msg_parse->moon_msg_parse_error++;
+@@ -611,17 +623,23 @@ cb_weather_update(SoupSession *session,
+                   gpointer user_data)
+ {
+     plugin_data *data = user_data;
+-    xmlDoc *doc;
++    xmlDoc *doc = NULL;
+     xmlNode *root_node;
+     time_t now_t;
+     gboolean parsing_error = TRUE;
++    const gchar *body = NULL;
++    gsize len = 0;
+ 
+     weather_debug("Processing downloaded weather data.");
+     time(&now_t);
+     data->weather_update->attempt++;
+     data->weather_update->http_status_code = msg->status_code;
+     if (msg->status_code == 200 || msg->status_code == 203) {
+-        doc = get_xml_document(msg);
++        if (G_LIKELY(msg->response_body && msg->response_body->data)) {
++            body = msg->response_body->data;
++            len = msg->response_body->length;
++        }
++        doc = get_xml_document(body, len);
+         if (G_LIKELY(doc)) {
+             root_node = xmlDocGetRootElement(doc);
+             if (G_LIKELY(root_node))
diff --git a/srcpkgs/xfce4-weather-plugin/patches/0004-libsoup-Port-to-libsoup-3.0.patch b/srcpkgs/xfce4-weather-plugin/patches/0004-libsoup-Port-to-libsoup-3.0.patch
new file mode 100644
index 00000000000000..f2e1d953443d50
--- /dev/null
+++ b/srcpkgs/xfce4-weather-plugin/patches/0004-libsoup-Port-to-libsoup-3.0.patch
@@ -0,0 +1,540 @@
+From ec857414aaf53ff447062631734cdf44ab29d141 Mon Sep 17 00:00:00 2001
+From: Đoàn Trần Công Danh <congdanhqx@gmail.com>
+Date: Fri, 1 Mar 2024 21:56:34 +0700
+Subject: [PATCH 4/4] libsoup: Port to libsoup-3.0
+
+---
+ README                         |   4 +-
+ configure.ac.in                |   2 +-
+ panel-plugin/weather-config.c  |  32 ++++---
+ panel-plugin/weather-search.c  |  37 ++++++---
+ panel-plugin/weather-summary.c |  23 ++++--
+ panel-plugin/weather.c         | 147 +++++++++++++++------------------
+ panel-plugin/weather.h         |   2 +-
+ 7 files changed, 132 insertions(+), 115 deletions(-)
+
+diff --git a/configure.ac.in b/configure.ac.in
+index 8127fb0..0bf3da4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -71,7 +71,7 @@ XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-2], [4.16.0])
+ XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-2.0], [4.14.0])
+ XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.12.0])
+ XDT_CHECK_PACKAGE([LIBXML], [libxml-2.0], [2.4.0])
+-XDT_CHECK_PACKAGE([SOUP], [libsoup-2.4], [2.42.0])
++XDT_CHECK_PACKAGE([SOUP], [libsoup-3.0], [3.0.0])
+ XDT_CHECK_PACKAGE([JSON], [json-c], [0.13.1])
+ XDT_CHECK_OPTIONAL_PACKAGE([UPOWER_GLIB], [upower-glib], [0.9.0], [upower],
+                            [upower for adapting update interval to power state])
+diff --git a/panel-plugin/weather-config.c b/panel-plugin/weather-config.c
+index d08f2d2..06bd802 100644
+--- a/panel-plugin/weather-config.c
++++ b/panel-plugin/weather-config.c
+@@ -234,8 +234,8 @@ sanitize_location_name(const gchar *location_name)
+ 
+ 
+ static void
+-cb_lookup_altitude(SoupSession *session,
+-                   SoupMessage *msg,
++cb_lookup_altitude(GObject *source,
++                   GAsyncResult *result,
+                    gpointer user_data)
+ {
+     xfceweather_dialog *dialog = (xfceweather_dialog *) user_data;
+@@ -243,11 +243,14 @@ cb_lookup_altitude(SoupSession *session,
+     gdouble alt = 0;
+     const gchar *body = NULL;
+     gsize len = 0;
++    GError *error = NULL;
++    GBytes *response =
++        soup_session_send_and_read_finish(SOUP_SESSION(source), result, &error);
+ 
+-    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
+-        body = msg->response_body->data;
+-        len = msg->response_body->length;
+-    }
++    if (G_UNLIKELY(error))
++        g_error_free(error);
++    else
++        body = g_bytes_get_data(response, &len);
+ 
+     altitude = (xml_altitude *)
+         parse_xml_document(body, len, (XmlParseFunc) parse_altitude);
+@@ -262,23 +265,27 @@ cb_lookup_altitude(SoupSession *session,
+     else if (dialog->pd->units->altitude == FEET)
+         alt /= 0.3048;
+     gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_alt), alt);
++    g_bytes_unref(response);
+ }
+ 
+ 
+ static void
+-cb_lookup_timezone(SoupSession *session,
+-                   SoupMessage *msg,
++cb_lookup_timezone(GObject *source,
++                   GAsyncResult *result,
+                    gpointer user_data)
+ {
+     xfceweather_dialog *dialog = (xfceweather_dialog *) user_data;
+     xml_timezone *xml_tz;
+     const gchar *body = NULL;
+     gsize len = 0;
++    GError *error = NULL;
++    GBytes *response =
++        soup_session_send_and_read_finish(SOUP_SESSION(source), result, &error);
+ 
+-    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
+-        body = msg->response_body->data;
+-        len = msg->response_body->length;
+-    }
++    if (G_UNLIKELY(error))
++        g_error_free(error);
++    else
++        body = g_bytes_get_data(response, &len);
+ 
+     xml_tz = (xml_timezone *)
+         parse_xml_document(body, len, (XmlParseFunc) parse_timezone);
+@@ -290,6 +297,7 @@ cb_lookup_timezone(SoupSession *session,
+         xml_timezone_free(xml_tz);
+     } else
+         gtk_entry_set_text(GTK_ENTRY(dialog->text_timezone), "");
++    g_bytes_unref(response);
+ }
+ 
+ 
+diff --git a/panel-plugin/weather-search.c b/panel-plugin/weather-search.c
+index cfbcd55..d49dd79 100644
+--- a/panel-plugin/weather-search.c
++++ b/panel-plugin/weather-search.c
+@@ -76,8 +76,8 @@ sanitize_str(const gchar *str)
+ 
+ 
+ static void
+-cb_searchdone(SoupSession *session,
+-              SoupMessage *msg,
++cb_searchdone(GObject *source,
++              GAsyncResult *result,
+               gpointer user_data)
+ {
+     search_dialog *dialog = (search_dialog *) user_data;
+@@ -89,17 +89,22 @@ cb_searchdone(SoupSession *session,
+     GtkTreeSelection *selection;
+     const gchar *body = NULL;
+     gsize len = 0;
++    GError *error = NULL;
++    GBytes *response =
++        soup_session_send_and_read_finish(SOUP_SESSION(source), result, &error);
+ 
+-    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
+-        body = msg->response_body->data;
+-        len = msg->response_body->length;
+-    }
++    if (G_UNLIKELY(error))
++        g_error_free(error);
++    else
++        body = g_bytes_get_data(response, &len);
+ 
+     gtk_widget_set_sensitive(dialog->find_button, TRUE);
+ 
+     doc = get_xml_document(body, len);
+-    if (!doc)
++    if (!doc) {
++        g_bytes_unref(response);
+         return;
++    }
+ 
+     cur_node = xmlDocGetRootElement(doc);
+     if (cur_node) {
+@@ -133,6 +138,7 @@ cb_searchdone(SoupSession *session,
+         }
+ 
+     gtk_tree_view_column_set_title(dialog->column, _("Results"));
++    g_bytes_unref(response);
+ }
+ 
+ 
+@@ -376,8 +382,8 @@ get_preferred_units(const gchar *country_code)
+ 
+ 
+ static void
+-cb_geolocation(SoupSession *session,
+-               SoupMessage *msg,
++cb_geolocation(GObject *source,
++               GAsyncResult *result,
+                gpointer user_data)
+ {
+     geolocation_data *data = (geolocation_data *) user_data;
+@@ -386,11 +392,14 @@ cb_geolocation(SoupSession *session,
+     units_config *units;
+     const gchar *body = NULL;
+     gsize len = 0;
++    GError *error = NULL;
++    GBytes *response =
++        soup_session_send_and_read_finish(SOUP_SESSION(source), result, &error);
+ 
+-    if (G_LIKELY(msg->response_body && msg->response_body->data)) {
+-        body = msg->response_body->data;
+-        len = msg->response_body->length;
+-    }
++    if (G_UNLIKELY(error))
++        g_error_free(error);
++    else
++        body = g_bytes_get_data(response, &len);
+ 
+     geo = (xml_geolocation *)
+         parse_xml_document(body, len, (XmlParseFunc) parse_geolocation);
+@@ -398,6 +407,7 @@ cb_geolocation(SoupSession *session,
+ 
+     if (!geo) {
+         data->cb(NULL, NULL, NULL, NULL, data->user_data);
++        g_bytes_unref(response);
+         g_free(data);
+         return;
+     }
+@@ -428,6 +438,7 @@ cb_geolocation(SoupSession *session,
+     g_slice_free(units_config, units);
+     xml_geolocation_free(geo);
+     g_free(full_loc);
++    g_bytes_unref(response);
+     g_free(data);
+ }
+ 
+diff --git a/panel-plugin/weather-summary.c b/panel-plugin/weather-summary.c
+index a6a2f56..224bb34 100644
+--- a/panel-plugin/weather-summary.c
++++ b/panel-plugin/weather-summary.c
+@@ -234,22 +234,29 @@ get_logo_path(void)
+ 
+ 
+ static void
+-logo_fetched(SoupSession *session,
+-             SoupMessage *msg,
++logo_fetched(GObject *source,
++             GAsyncResult *result,
+              gpointer user_data)
+ {
+-    if (msg && msg->response_body && msg->response_body->length > 0) {
++    GError *error = NULL;
++    GBytes *response =
++        soup_session_send_and_read_finish(SOUP_SESSION(source), result, &error);
++
++    if (G_LIKELY(error == NULL)) {
++        gsize len = 0;
++        const gchar *body = g_bytes_get_data(response, &len);
+         gchar *path = get_logo_path();
+-        GError *error = NULL;
+         GdkPixbuf *pixbuf = NULL;
+         gint scale_factor;
+-        if (!g_file_set_contents(path, msg->response_body->data,
+-                                 msg->response_body->length, &error)) {
++        g_file_set_contents(path, body, len, &error);
++        g_bytes_unref(response);
++        if (error) {
+             g_warning("Error downloading met.no logo image to %s, "
+                       "reason: %s\n", path,
+                       error ? error->message : "unknown");
+             g_error_free(error);
+             g_free(path);
++            g_bytes_unref(response);
+             return;
+         }
+         scale_factor = gtk_widget_get_scale_factor(user_data);
+@@ -261,7 +268,9 @@ logo_fetched(SoupSession *session,
+             cairo_surface_destroy(surface);
+             g_object_unref(pixbuf);
+         }
+-    }
++        g_bytes_unref(response);
++    } else
++        g_error_free(error);
+ }
+ 
+ 
+diff --git a/panel-plugin/weather.c b/panel-plugin/weather.c
+index 3a6a2b6..18fca37 100644
+--- a/panel-plugin/weather.c
++++ b/panel-plugin/weather.c
+@@ -23,6 +23,8 @@
+ #include <string.h>
+ #include <sys/stat.h>
+ 
++#include <glib.h>
++
+ #include <libxfce4util/libxfce4util.h>
+ #include <libxfce4ui/libxfce4ui.h>
+ #include <xfconf/xfconf.h>
+@@ -106,13 +108,14 @@ static void schedule_next_wakeup(plugin_data *data);
+ void
+ weather_http_queue_request(SoupSession *session,
+                            const gchar *uri,
+-                           SoupSessionCallback callback_func,
++                           GAsyncReadyCallback callback_func,
+                            gpointer user_data)
+ {
+     SoupMessage *msg;
+ 
+     msg = soup_message_new("GET", uri);
+-    soup_session_queue_message(session, msg, callback_func, user_data);
++    soup_session_send_and_read_async(session, msg, G_PRIORITY_DEFAULT, NULL,
++                                     callback_func, user_data);
+ }
+ 
+ 
+@@ -486,8 +489,8 @@ calc_next_download_time(const update_info *upi,
+  * Process downloaded sun astro data and schedule next astro update.
+  */
+ static void
+-cb_astro_update_sun(SoupSession *session,
+-                    SoupMessage *msg,
++cb_astro_update_sun(GObject *source,
++                    GAsyncResult *result,
+                     gpointer user_data)
+ {
+     plugin_data *data = user_data;
+@@ -496,14 +499,17 @@ cb_astro_update_sun(SoupSession *session,
+     guint astro_forecast_days;
+     const gchar *body = NULL;
+     gsize len = 0;
++    SoupMessage *msg;
++    GError *error = NULL;
++    GBytes *response;
+ 
++    msg = soup_session_get_async_result_message(SOUP_SESSION(source), result);
+     data->msg_parse->sun_msg_processed++;
+-    data->astro_update->http_status_code = msg->status_code;
+-    if ((msg->status_code == 200 || msg->status_code == 203)) {
+-        if (G_LIKELY(msg->response_body && msg->response_body->data)) {
+-            body = msg->response_body->data;
+-            len = msg->response_body->length;
+-        }
++    data->astro_update->http_status_code = soup_message_get_status(msg);
++    response = soup_session_send_and_read_finish(SOUP_SESSION(source),
++                                                 result, &error);
++    if (G_LIKELY(error == NULL)) {
++        body = g_bytes_get_data(response, &len);
+         json_tree = get_json_tree(body, len);
+         if (G_LIKELY(json_tree)) {
+             if (!parse_astrodata_sun(json_tree, data->astrodata))  {
+@@ -519,10 +525,12 @@ cb_astro_update_sun(SoupSession *session,
+             g_warning("Error parsing sun astronomical data!");
+             weather_debug("No json_tree");
+         }
++        g_bytes_unref(response);
+     } else {
+         data->msg_parse->http_msg_fail = TRUE;
+-        g_warning_once("Download of sun astronomical data failed with HTTP Status Code %d, Reason phrase: %s",
+-                       msg->status_code, msg->reason_phrase);
++        g_warning_once("Download of sun astronomical data failed: %s",
++                       error->message);
++        g_error_free(error);
+     }
+ 
+     astro_forecast_days = data->forecast_days + 1;
+@@ -548,8 +556,8 @@ cb_astro_update_sun(SoupSession *session,
+  * Process downloaded moon astro data and schedule next astro update.
+  */
+ static void
+-cb_astro_update_moon(SoupSession *session,
+-                     SoupMessage *msg,
++cb_astro_update_moon(GObject *source,
++                     GAsyncResult *result,
+                      gpointer user_data)
+ {
+     plugin_data *data = user_data;
+@@ -558,14 +566,17 @@ cb_astro_update_moon(SoupSession *session,
+     guint astro_forecast_days;
+     const gchar *body = NULL;
+     gsize len = 0;
++    SoupMessage *msg;
++    GError *error = NULL;
++    GBytes *response;
+ 
++    response = soup_session_send_and_read_finish(SOUP_SESSION(source),
++                                                 result, &error);
++    msg = soup_session_get_async_result_message(SOUP_SESSION(source), result);
+     data->msg_parse->moon_msg_processed++;
+-    data->astro_update->http_status_code = msg->status_code;
+-    if ((msg->status_code == 200 || msg->status_code == 203)) {
+-        if (G_LIKELY(msg->response_body && msg->response_body->data)) {
+-            body = msg->response_body->data;
+-            len = msg->response_body->length;
+-        }
++    data->astro_update->http_status_code = soup_message_get_status(msg);
++    if (G_LIKELY(error == NULL)) {
++        body = g_bytes_get_data(response, &len);
+         json_tree = get_json_tree(body, len);
+         if (G_LIKELY(json_tree)) {
+             if (!parse_astrodata_moon(json_tree, data->astrodata))  {
+@@ -581,10 +592,12 @@ cb_astro_update_moon(SoupSession *session,
+             g_warning("Error parsing moon astronomical data");
+             weather_debug("No json_tree");
+         }
++        g_bytes_unref(response);
+     } else {
+         data->msg_parse->http_msg_fail = TRUE;
+-        g_warning_once("Download of moon astronomical data failed with HTTP Status Code %d, Reason phrase: %s",
+-                       msg->status_code, msg->reason_phrase);
++        g_warning_once("Download of moon astronomical data failed: %s",
++                       error->message);
++        g_error_free(error);
+     }
+ 
+     astro_forecast_days = data->forecast_days + 1;
+@@ -618,8 +631,8 @@ cb_astro_update_moon(SoupSession *session,
+  * Process downloaded weather data and schedule next weather update.
+  */
+ static void
+-cb_weather_update(SoupSession *session,
+-                  SoupMessage *msg,
++cb_weather_update(GObject *source,
++                  GAsyncResult *result,
+                   gpointer user_data)
+ {
+     plugin_data *data = user_data;
+@@ -629,16 +642,19 @@ cb_weather_update(SoupSession *session,
+     gboolean parsing_error = TRUE;
+     const gchar *body = NULL;
+     gsize len = 0;
++    SoupMessage *msg;
++    GError *error = NULL;
++    GBytes *response = NULL;
+ 
+     weather_debug("Processing downloaded weather data.");
++    response = soup_session_send_and_read_finish(SOUP_SESSION(source),
++                                                 result, &error);
++    msg = soup_session_get_async_result_message(SOUP_SESSION(source), result);
+     time(&now_t);
+     data->weather_update->attempt++;
+-    data->weather_update->http_status_code = msg->status_code;
+-    if (msg->status_code == 200 || msg->status_code == 203) {
+-        if (G_LIKELY(msg->response_body && msg->response_body->data)) {
+-            body = msg->response_body->data;
+-            len = msg->response_body->length;
+-        }
++    data->weather_update->http_status_code = soup_message_get_status(msg);
++    if (G_LIKELY(error == NULL)) {
++        body = g_bytes_get_data(response, &len);
+         doc = get_xml_document(body, len);
+         if (G_LIKELY(doc)) {
+             root_node = xmlDocGetRootElement(doc);
+@@ -650,12 +666,13 @@ cb_weather_update(SoupSession *session,
+                 }
+             xmlFreeDoc(doc);
+         }
++        g_bytes_unref(response);
+         if (parsing_error)
+             g_warning("Error parsing weather data!");
+-    } else
+-        weather_debug
+-            ("Download of weather data failed with HTTP Status Code %d, "
+-             "Reason phrase: %s", msg->status_code, msg->reason_phrase);
++    } else {
++        weather_debug("Download of weather data failed: %s", error->message);
++        g_error_free(error);
++    }
+     data->weather_update->next = calc_next_download_time(data->weather_update,
+                                                          now_t);
+ 
+@@ -1713,32 +1730,6 @@ mi_click(GtkWidget *widget,
+     update_weatherdata_with_reset(data);
+ }
+ 
+-static void
+-proxy_auth(SoupSession *session,
+-           SoupMessage *msg,
+-           SoupAuth *auth,
+-           gboolean retrying,
+-           gpointer user_data)
+-{
+-    SoupURI *soup_proxy_uri;
+-    const gchar *proxy_uri;
+-
+-    if (!retrying) {
+-        if (msg->status_code == SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED) {
+-            proxy_uri = g_getenv("HTTP_PROXY");
+-            if (!proxy_uri)
+-                proxy_uri = g_getenv("http_proxy");
+-            if (proxy_uri) {
+-                soup_proxy_uri = soup_uri_new(proxy_uri);
+-                soup_auth_authenticate(auth,
+-                                       soup_uri_get_user(soup_proxy_uri),
+-                                       soup_uri_get_password(soup_proxy_uri));
+-                soup_uri_free(soup_proxy_uri);
+-            }
+-        }
+-    }
+-}
+-
+ 
+ #ifdef HAVE_UPOWER_GLIB
+ static void
+@@ -2038,9 +2029,10 @@ static plugin_data *
+ xfceweather_create_control(XfcePanelPlugin *plugin)
+ {
+     plugin_data *data = g_slice_new0(plugin_data);
+-    SoupURI *soup_proxy_uri;
++    GProxyResolver *proxy_resolver;
+     const gchar *proxy_uri;
+-    const gchar *proxy_user;
++    const gchar *no_proxy;
++    gchar **no_proxy_lst = NULL;
+     GtkWidget *refresh;
+     cairo_surface_t *icon = NULL;
+     data_types lbl;
+@@ -2078,29 +2070,26 @@ xfceweather_create_control(XfcePanelPlugin *plugin)
+ 
+     /* Setup session for HTTP connections */
+     data->session = soup_session_new();
+-    g_object_set(data->session, SOUP_SESSION_USER_AGENT,
+-                 PACKAGE_NAME "-" PACKAGE_VERSION, NULL);
+-    g_object_set(data->session, SOUP_SESSION_TIMEOUT,
+-                 CONN_TIMEOUT, NULL);
++    soup_session_set_user_agent(data->session,
++                                PACKAGE_NAME "-" PACKAGE_VERSION);
++    soup_session_set_timeout(data->session, CONN_TIMEOUT);
+ 
+     /* Set the proxy URI from environment */
+     proxy_uri = g_getenv("HTTP_PROXY");
+     if (!proxy_uri)
+         proxy_uri = g_getenv("http_proxy");
+     if (proxy_uri) {
+-        soup_proxy_uri = soup_uri_new(proxy_uri);
+-        g_object_set(data->session, SOUP_SESSION_PROXY_URI,
+-                     soup_proxy_uri, NULL);
+-
+-        /* check if uri contains authentication info */
+-        proxy_user = soup_uri_get_user(soup_proxy_uri);
+-        if (proxy_user && strlen(proxy_user) > 0) {
+-            g_signal_connect(G_OBJECT(data->session), "authenticate",
+-                             G_CALLBACK(proxy_auth), NULL);
+-        }
+-
+-        soup_uri_free(soup_proxy_uri);
+-    }
++        no_proxy = g_getenv("no_proxy");
++        if (!no_proxy)
++            no_proxy = g_getenv("NO_PROXY");
++        if (no_proxy)
++            no_proxy_lst = g_strsplit(no_proxy, ",", -1);
++        proxy_resolver = g_simple_proxy_resolver_new(proxy_uri, no_proxy_lst);
++        g_strfreev(no_proxy_lst);
++        soup_session_set_proxy_resolver(data->session, proxy_resolver);
++        g_object_unref(proxy_resolver);
++    }
++    /* Otherwise, g_proxy_resolver_get_default() will be used */
+ 
+     data->scrollbox = gtk_scrollbox_new();
+ 
+diff --git a/panel-plugin/weather.h b/panel-plugin/weather.h
+index 208de09..01974ce 100644
+--- a/panel-plugin/weather.h
++++ b/panel-plugin/weather.h
+@@ -183,7 +183,7 @@ extern gboolean debug_mode;
+ 
+ void weather_http_queue_request(SoupSession *session,
+                                 const gchar *uri,
+-                                SoupSessionCallback callback_func,
++                                GAsyncReadyCallback callback_func,
+                                 gpointer user_data);
+ 
+ void scrollbox_set_visible(plugin_data *data);
diff --git a/srcpkgs/xfce4-weather-plugin/template b/srcpkgs/xfce4-weather-plugin/template
index ef47f0f6143aa5..40bb3ff92c0b72 100644
--- a/srcpkgs/xfce4-weather-plugin/template
+++ b/srcpkgs/xfce4-weather-plugin/template
@@ -1,16 +1,21 @@
 # Template file for 'xfce4-weather-plugin'
 pkgname=xfce4-weather-plugin
-version=0.11.0
+version=0.11.2
 revision=1
 build_style=gnu-configure
 configure_args="--with-locales-dir=/usr/share/locale"
-hostmakedepends="pkg-config intltool"
-makedepends="libxfce4ui-devel xfce4-panel-devel libxml2-devel libsoup-devel upower-devel"
+hostmakedepends="pkg-config intltool xfce4-dev-tools gettext-devel"
+makedepends="libxfce4ui-devel xfce4-panel-devel libxml2-devel libsoup3-devel
+ json-c-devel upower-devel"
 depends="hicolor-icon-theme"
 short_desc="XFCE panel plugin to show temperature and weather"
 maintainer="Orphaned <orphan@voidlinux.org>"
 license="GPL-2.0-or-later"
 homepage="https://goodies.xfce.org/projects/panel-plugins/xfce4-weather-plugin"
 distfiles="https://archive.xfce.org/src/panel-plugins/${pkgname}/${version%.*}/${pkgname}-${version}.tar.bz2"
-checksum=e3242ea951d51bc0fded1d02a4f1f662bec16a1fb10c855f71bda6541a1153fc
+checksum=65d40aff7863550858a9f9d2b6054f27c69a3e7e712991785987f9a73bba876b
 lib32disabled=yes
+
+pre_configure() {
+	autoreconf -fi
+}

  parent reply	other threads:[~2024-03-08 11:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-03  5:02 [PR PATCH] " sgn
2024-03-03  8:20 ` sgn
2024-03-08 11:48 ` sgn [this message]
2024-03-08 11:59 ` [PR PATCH] [Merged]: " sgn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240308114821.B7479217EB@inbox.vuxu.org \
    --to=sgn@users.noreply.github.com \
    --cc=ml@inbox.vuxu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).