guix_mirror_bot pushed a commit to branch gnome-team
in repository guix.

commit 3736702deea27870e61ad15e0e3c4390e4786af9
Author: Liliana Marie Prikler <[email protected]>
AuthorDate: Thu Mar 5 20:56:14 2026 +0100

    gnu: gnome-recipes: Fix build.
    
    * gnu/packages/patches/gnome-recipes-rest-in-soup.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Register it here.
    * gnu/packages/gnome.scm (gnome-recipes)[patches]: Use it here.
---
 gnu/local.mk                                       |   1 +
 gnu/packages/gnome.scm                             |   3 +-
 .../patches/gnome-recipes-rest-in-soup.patch       | 465 +++++++++++++++++++++
 3 files changed, 468 insertions(+), 1 deletion(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index c6ae97533d..a837e97dd4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1509,6 +1509,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/gnome-control-center-firmware-security.patch    \
   %D%/packages/patches/gnome-control-center-libexecdir.patch   \
   %D%/packages/patches/gnome-dictionary-meson-i18n.patch       \
+  %D%/packages/patches/gnome-recipes-rest-in-soup.patch        \
   %D%/packages/patches/gnome-settings-daemon-gc.patch          \
   %D%/packages/patches/gnome-session-support-elogind.patch     \
   %D%/packages/patches/gnome-tweaks-search-paths.patch         \
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index ec4fede988..eca69bc1b5 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -801,7 +801,8 @@ patterns.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1h049mzqnlcfqwrhmzbq3pzzdglvy2bn9fj1p8wql7a60pn8sr32"))))
+                "1h049mzqnlcfqwrhmzbq3pzzdglvy2bn9fj1p8wql7a60pn8sr32"))
+              (patches (search-patches "gnome-recipes-rest-in-soup.patch"))))
     (build-system meson-build-system)
     (arguments
      (list
diff --git a/gnu/packages/patches/gnome-recipes-rest-in-soup.patch 
b/gnu/packages/patches/gnome-recipes-rest-in-soup.patch
new file mode 100644
index 0000000000..3381c99c70
--- /dev/null
+++ b/gnu/packages/patches/gnome-recipes-rest-in-soup.patch
@@ -0,0 +1,465 @@
+Upstream-Status: https://gitlab.gnome.org/GNOME/recipes/-/merge_requests/47
+
+diff --git a/meson.build b/meson.build
+index a0edaad..afa51d4 100644
+--- a/meson.build
++++ b/meson.build
+@@ -85,9 +85,9 @@ deps = [ dependency('gtk+-3.0', version : '>=3.22'),
+          dependency('gio-2.0', version : '>= 2.61.2'),
+          dependency('gio-unix-2.0', version : '>= 2.61.2'),
+          dependency('gmodule-export-2.0'),
+-         dependency('libsoup-2.4'),
++         dependency('libsoup-3.0'),
+          dependency('goa-1.0'),
+-         dependency('rest-0.7'),
++         dependency('rest-1.0'),
+          dependency('json-glib-1.0'),
+          autoar_dep,
+          gspell_dep,
+diff --git a/src/gr-app.c b/src/gr-app.c
+index 140e359..ed902ae 100644
+--- a/src/gr-app.c
++++ b/src/gr-app.c
+@@ -452,7 +452,7 @@ gr_app_init (GrApp *self)
+ 
+         g_log_set_writer_func (gr_log_writer, NULL, NULL);
+ 
+-        self->session = soup_session_new_with_options 
(SOUP_SESSION_USER_AGENT,
++        self->session = soup_session_new_with_options ("user-agent",
+                                                        PACKAGE_NAME "/" 
PACKAGE_VERSION,
+                                                        NULL);
+ }
+diff --git a/src/gr-image.c b/src/gr-image.c
+index 4b1d084..ba2b459 100644
+--- a/src/gr-image.c
++++ b/src/gr-image.c
+@@ -55,6 +55,8 @@ struct _GrImage
+         SoupSession *session;
+         SoupMessage *thumbnail_message;
+         SoupMessage *image_message;
++        GCancellable *thumbnail_cancellable;
++        GCancellable *image_cancellable;
+         GList *pending;
+ };
+ 
+@@ -65,15 +67,16 @@ gr_image_finalize (GObject *object)
+ {
+         GrImage *ri = GR_IMAGE (object);
+ 
+-        if (ri->thumbnail_message)
+-                soup_session_cancel_message (ri->session,
+-                                             ri->thumbnail_message,
+-                                             SOUP_STATUS_CANCELLED);
++        if (ri->thumbnail_cancellable) {
++                g_cancellable_cancel (ri->thumbnail_cancellable);
++                g_object_unref (ri->thumbnail_cancellable);
++        }
++        if (ri->image_cancellable) {
++                g_cancellable_cancel (ri->image_cancellable);
++                g_object_unref (ri->image_cancellable);
++        }
++
+         g_clear_object (&ri->thumbnail_message);
+-        if (ri->image_message)
+-                soup_session_cancel_message (ri->session,
+-                                             ri->image_message,
+-                                             SOUP_STATUS_CANCELLED);
+         g_clear_object (&ri->image_message);
+         g_clear_object (&ri->session);
+         g_free (ri->path);
+@@ -302,43 +305,56 @@ set_modified_request (SoupMessage *msg,
+ 
+                 mtime = g_file_info_get_modification_date_time (info);
+                 mod_date = g_date_time_format (mtime, "%a, %d %b %Y %H:%M:%S 
%Z");
+-                soup_message_headers_append (msg->request_headers, 
"If-Modified-Since", mod_date);
++                soup_message_headers_append (soup_message_get_request_headers 
(msg), "If-Modified-Since", mod_date);
+         }
+ }
+ 
+ static void
+-set_image (SoupSession *session,
+-           SoupMessage *msg,
+-           gpointer     data)
++set_image (SoupSession  *session,
++           GAsyncResult *result,
++           gpointer      data)
+ {
+         GrImage *ri = data;
+         g_autofree char *cache_path = NULL;
+         GList *l;
++        g_autoptr(GError) error = NULL;
++        g_autoptr(GBytes) response = NULL;
++        SoupMessage *msg;
++        guint status_code;
++        gconstpointer response_data;
++        gsize response_length;
++
++        response = soup_session_send_and_read_finish (session, result, 
&error);
+ 
+-        if (msg->status_code == SOUP_STATUS_CANCELLED || ri->session == NULL) 
{
++      if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+                 g_debug ("Message cancelled");
+-                return;
+-        }
++              g_clear_error (&error);
++              return;
++      }
++
++        msg = soup_session_get_async_result_message (session, result);
++        status_code = soup_message_get_status (msg);
+ 
+         if (msg == ri->thumbnail_message)
+                 cache_path = get_thumbnail_cache_path (ri);
+         else
+                 cache_path = get_image_cache_path (ri);
+ 
+-        if (msg->status_code == SOUP_STATUS_NOT_MODIFIED) {
++        if (status_code == SOUP_STATUS_NOT_MODIFIED) {
+                 g_debug ("Image not modified");
+                 update_image_timestamp (cache_path);
+         }
+-        else if (msg->status_code == SOUP_STATUS_OK) {
++        else if (status_code == SOUP_STATUS_OK) {
+                 g_debug ("Saving image to %s", cache_path);
+-                if (!g_file_set_contents (cache_path, 
msg->response_body->data, msg->response_body->length, NULL)) {
++                response_data = g_bytes_get_data (response, &response_length);
++                if (!g_file_set_contents (cache_path, response_data, 
response_length, NULL)) {
+                         g_debug ("Saving image to %s failed", cache_path);
+                         goto out;
+                 }
+         }
+         else {
+                 g_autofree char *url = get_image_url (ri);
+-                g_debug ("Got status %d, record failure to load %s", 
msg->status_code, url);
++                g_debug ("Got status %d, record failure to load %s", 
status_code, url);
+                 write_negative_cache_entry (cache_path);
+                 goto out;
+         }
+@@ -494,28 +510,40 @@ gr_image_load_full (GrImage         *ri,
+ 
+         if (need_thumbnail && ri->thumbnail_message == NULL) {
+                 g_autofree char *url = NULL;
+-                g_autoptr(SoupURI) base_uri = NULL;
++                g_autoptr(GUri) base_uri = NULL;
+ 
+                 url = get_thumbnail_url (ri);
+-                base_uri = soup_uri_new (url);
++                base_uri = g_uri_parse (url, G_URI_FLAGS_NONE, NULL);
+                 ri->thumbnail_message = soup_message_new_from_uri 
(SOUP_METHOD_GET, base_uri);
++                ri->thumbnail_cancellable = g_cancellable_new();
+                 set_modified_request (ri->thumbnail_message, 
thumbnail_cache_path);
+                 g_debug ("Load thumbnail for %s from %s", ri->path, url);
+-                soup_session_queue_message (ri->session, g_object_ref 
(ri->thumbnail_message), set_image, ri);
++                soup_session_send_and_read_async (ri->session,
++                                                  ri->thumbnail_message,
++                                                  G_PRIORITY_DEFAULT,
++                                                  ri->thumbnail_cancellable,
++                                                  (GAsyncReadyCallback) 
set_image,
++                                                  ri);
+                 if (width > 150 || height > 150)
+                         need_image = TRUE;
+         }
+ 
+         if (need_image && ri->image_message == NULL) {
+                 g_autofree char *url = NULL;
+-                g_autoptr(SoupURI) base_uri = NULL;
++                g_autoptr(GUri) base_uri = NULL;
+ 
+                 url = get_image_url (ri);
+-                base_uri = soup_uri_new (url);
++                base_uri = g_uri_parse (url, G_URI_FLAGS_NONE, NULL);
+                 ri->image_message = soup_message_new_from_uri 
(SOUP_METHOD_GET, base_uri);
++                ri->image_cancellable = g_cancellable_new();
+                 set_modified_request (ri->image_message, image_cache_path);
+                 g_debug ("Load image for %s from %s", ri->path, url);
+-                soup_session_queue_message (ri->session, g_object_ref 
(ri->image_message), set_image, ri);
++                soup_session_send_and_read_async (ri->session,
++                                                  ri->image_message,
++                                                  G_PRIORITY_DEFAULT,
++                                                  ri->image_cancellable,
++                                                  (GAsyncReadyCallback) 
set_image,
++                                                  ri);
+         }
+ }
+ 
+diff --git a/src/gr-recipe-store.c b/src/gr-recipe-store.c
+index 8abab2e..64398bd 100644
+--- a/src/gr-recipe-store.c
++++ b/src/gr-recipe-store.c
+@@ -1028,7 +1028,7 @@ set_modified_request (SoupMessage *msg,
+             g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_TIME_MODIFIED)) 
{
+                 mtime = g_file_info_get_modification_date_time (info);
+                 mod_date = g_date_time_format (mtime, "%a, %d %b %Y %H:%M:%S 
%Z");
+-                soup_message_headers_append (msg->request_headers, 
"If-Modified-Since", mod_date);
++                soup_message_headers_append (soup_message_get_request_headers 
(msg), "If-Modified-Since", mod_date);
+         }
+ }
+ 
+@@ -1116,9 +1116,9 @@ tar_done (GObject      *source,
+ }
+ 
+ static void
+-save_file (SoupSession *session,
+-           SoupMessage *msg,
+-           gpointer     data)
++save_file (SoupSession  *session,
++           GAsyncResult *result,
++           gpointer      data)
+ {
+         GrRecipeStore *self = data;
+         const char *cache_dir;
+@@ -1128,25 +1128,37 @@ save_file (SoupSession *session,
+         g_autoptr(GSubprocess) subprocess = NULL;
+         g_autoptr(GSubprocessLauncher) launcher = NULL;
+         g_autoptr(GError) error = NULL;
++        g_autoptr(GBytes) response = NULL;
++        SoupMessage *msg;
++        guint status_code;
++        gconstpointer response_data;
++        gsize response_length;
+ 
+-        if (msg->status_code == SOUP_STATUS_CANCELLED || self->session == 
NULL) {
++        response = soup_session_send_and_read_finish (session, result, 
&error);
++
++      if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+                 g_debug ("Message cancelled");
+-                goto out;
+-        }
++              g_clear_error (&error);
++              goto out;
++      }
++
++        msg = soup_session_get_async_result_message (session, result);
++        status_code = soup_message_get_status (msg);
+ 
+         cache_dir = get_user_cache_dir ();
+         filename = g_build_filename (cache_dir, "data.tar.gz", NULL);
+ 
+-        if (msg->status_code == SOUP_STATUS_NOT_MODIFIED) {
++        if (status_code == SOUP_STATUS_NOT_MODIFIED) {
+                 g_autofree char *f = NULL;
+ 
+                 g_debug ("File not modified");
+                 f = g_build_filename (cache_dir, "data", "recipes.db", NULL);
+                 update_file_timestamp (f);
+         }
+-        else if (msg->status_code == SOUP_STATUS_OK) {
++        else if (status_code == SOUP_STATUS_OK) {
+                 g_debug ("Saving file to %s", filename);
+-                if (!g_file_set_contents (filename, msg->response_body->data, 
msg->response_body->length, NULL)) {
++                response_data = g_bytes_get_data (response, &response_length);
++                if (!g_file_set_contents (filename, response_data, 
response_length, NULL)) {
+                         g_debug ("Saving file to %s failed", filename);
+                         goto out;
+                 }
+@@ -1197,14 +1209,19 @@ load_updates (gpointer data)
+         filename = g_build_filename (cache_dir, "recipes.db", NULL);
+         if (should_try_load (filename)) {
+                 g_autofree char *url;
+-                g_autoptr(SoupURI) base_uri = NULL;
++                g_autoptr(GUri) base_uri = NULL;
+ 
+                 url = get_file_url ("data.tar.gz");
+-                base_uri = soup_uri_new (url);
++                base_uri = g_uri_parse (url, G_URI_FLAGS_NONE, NULL);
+                 self->recipes_message = soup_message_new_from_uri 
(SOUP_METHOD_GET, base_uri);
+                 set_modified_request (self->recipes_message, filename);
+                 g_debug ("Load file for data.tar.gz from %s", url);
+-                soup_session_queue_message (self->session, g_object_ref 
(self->recipes_message), save_file, self);
++                soup_session_send_and_read_async (self->session,
++                                                  self->recipes_message,
++                                                  G_PRIORITY_DEFAULT,
++                                                  NULL,
++                                                  (GAsyncReadyCallback) 
save_file,
++                                                  self);
+         }
+ 
+         g_timeout_add_seconds (24 * 60 * 60, load_updates, data);
+diff --git a/src/gr-shopping-list-exporter.c b/src/gr-shopping-list-exporter.c
+index 86757ef..5152854 100644
+--- a/src/gr-shopping-list-exporter.c
++++ b/src/gr-shopping-list-exporter.c
+@@ -25,7 +25,7 @@
+ #include <glib/gstdio.h>
+ #include <gtk/gtk.h>
+ #include <goa/goa.h>
+-#include <rest/oauth2-proxy.h>
++#include <rest/rest.h>
+ #include <json-glib/json-glib.h>
+ 
+ #include "gr-shopping-list-exporter.h"
+@@ -108,13 +108,17 @@ gr_shopping_list_exporter_new (GtkWindow *parent)
+ 
+ static void
+ remove_items_callback (RestProxyCall *call,
+-                     GError *error,
+-                     GObject *obj,
++                     GAsyncResult *result,
+                      GrShoppingListExporter *exporter)
+ {
+ 
+       guint status_code;
+ 
++      if (!rest_proxy_call_invoke_finish (call, result, NULL)) {
++              g_warning ("Couldn't execute RestProxyCall");
++              return;
++      }
++
+       status_code = rest_proxy_call_get_status_code (call);
+ 
+       if (status_code != 200) {
+@@ -128,7 +132,6 @@ remove_items (GrShoppingListExporter *exporter, GList 
*items)
+ {
+       RestProxy *proxy;
+       RestProxyCall *call;
+-      GError *error;
+       g_autofree gchar *uuid = g_uuid_string_random ();
+ 
+       GList *l;
+@@ -152,8 +155,6 @@ remove_items (GrShoppingListExporter *exporter, GList 
*items)
+       commands = g_string_truncate (commands, commands->len-1);
+       g_string_append_printf (commands, "]}}]");
+ 
+-      error = NULL;
+-
+       proxy = rest_proxy_new (TODOIST_URL, FALSE);
+       call = rest_proxy_new_call (proxy);
+       rest_proxy_call_set_method (call, "POST");
+@@ -167,22 +168,19 @@ remove_items (GrShoppingListExporter *exporter, GList 
*items)
+ 
+       rest_proxy_call_add_param (call, "commands", commands->str);
+ 
+-      if (!rest_proxy_call_async (call, (RestProxyCallAsyncCallback) 
remove_items_callback,
+-                                  NULL, exporter, &error))
+-      {
+-          g_warning ("Couldn't execute RestProxyCall");
+-          goto out;
+-      }
+-      out:
+-        g_object_unref (proxy);
+-        g_object_unref (call);
++      rest_proxy_call_invoke_async (call,
++                                    NULL,
++                                    (GAsyncReadyCallback) 
remove_items_callback,
++                                    exporter);
++
++      g_object_unref (proxy);
++      g_object_unref (call);
+ }
+ 
+ static void
+ get_project_data_callback (RestProxyCall *call,
+-                         GError *error,
+-                         GObject *obj,
+-                         GrShoppingListExporter *exporter)
++                         GAsyncResult *result,
++                         GrShoppingListExporter *exporter)
+ {
+       JsonObject *object = NULL;
+       JsonParser *parser = NULL;
+@@ -194,6 +192,11 @@ get_project_data_callback (RestProxyCall *call,
+       JsonArray *json_items;
+       GList *items;
+ 
++      if (!rest_proxy_call_invoke_finish (call, result, NULL)) {
++              g_warning ("Couldn't execute RestProxyCall");
++              goto out;
++      }
++
+       status_code = rest_proxy_call_get_status_code (call);
+ 
+       if (status_code != 200) {
+@@ -235,7 +238,6 @@ get_project_data (GrShoppingListExporter *exporter)
+ {
+       RestProxy *proxy;
+       RestProxyCall *call;
+-      GError *error;
+       const gchar *id;
+       id = g_strdup_printf ("%ld", exporter->project_id);
+ 
+@@ -246,16 +248,13 @@ get_project_data (GrShoppingListExporter *exporter)
+       rest_proxy_call_add_param (call, "token", exporter->access_token);
+       rest_proxy_call_add_param (call, "project_id", id);
+ 
+-      if (!rest_proxy_call_async (call, (RestProxyCallAsyncCallback) 
get_project_data_callback,
+-                                  NULL, exporter, &error))
+-      {
+-              g_warning ("Couldn't execute RestProxyCall");
+-              goto out;
+-      }
++      rest_proxy_call_invoke_async (call,
++                                    NULL,
++                                    (GAsyncReadyCallback) 
get_project_data_callback,
++                                    exporter);
+ 
+-      out:
+-        g_object_unref (proxy);
+-        g_object_unref (call);
++      g_object_unref (proxy);
++      g_object_unref (call);
+ }
+ 
+ static void
+@@ -287,9 +286,8 @@ close_dialog (GrShoppingListExporter *exporter)
+ 
+ static void
+ export_shopping_list_callback (RestProxyCall *call,
+-                             GError *error,
+-                             GObject *obj,
+-                             GrShoppingListExporter *exporter)
++                             GAsyncResult *result,
++                             GrShoppingListExporter *exporter)
+ {
+       JsonObject *object;
+       JsonParser *parser;
+@@ -303,6 +301,11 @@ export_shopping_list_callback (RestProxyCall *call,
+       status_code = rest_proxy_call_get_status_code (call);
+       parser = json_parser_new ();
+ 
++      if (!rest_proxy_call_invoke_finish (call, result, NULL)) {
++              g_warning ("Couldn't execute RestProxyCall");
++              goto out;
++      }
++
+       if (status_code != 200) {
+               g_warning ("Couldn't export shopping list");
+               goto out;
+@@ -337,12 +340,10 @@ export_shopping_list_to_todoist (GrShoppingListExporter 
*exporter)
+ {
+       RestProxy *proxy;
+       RestProxyCall *call;
+-      GError *error;
+ 
+       GList *list;
+       GString *commands;
+       commands = g_string_new ("");
+-      error = NULL;
+       GString *commands_arg;
+ 
+       if (exporter->ingredients) {
+@@ -378,16 +379,13 @@ export_shopping_list_to_todoist (GrShoppingListExporter 
*exporter)
+ 
+       rest_proxy_call_add_param (call, "commands", commands_arg->str);
+ 
+-      if (!rest_proxy_call_async (call, (RestProxyCallAsyncCallback) 
export_shopping_list_callback,
+-                                  NULL, exporter, &error))
+-      {
+-          g_warning ("Couldn't execute RestProxyCall");
+-          goto out;
+-      }
+-      out:
+-        g_object_unref (proxy);
+-        g_object_unref (call);
++      rest_proxy_call_invoke_async (call,
++                                    NULL,
++                                    (GAsyncReadyCallback) 
export_shopping_list_callback,
++                                    exporter);
+ 
++      g_object_unref (proxy);
++      g_object_unref (call);
+ }
+ 
+ static void
+-- 
+GitLab
+

Reply via email to