GNOME 43.rc - let's get this into Staging to see what we break (e.g meson:test seems to be an issue already) OBS-URL: https://build.opensuse.org/request/show/1002703 OBS-URL: https://build.opensuse.org/package/show/Application:Geo/geoclue2?expand=0&rev=95
347 lines
14 KiB
Diff
347 lines
14 KiB
Diff
From 9c46c38096193988103bf4c2fa63d76b55e5b1d0 Mon Sep 17 00:00:00 2001
|
|
From: Carlos Garcia Campos <cgarcia@igalia.com>
|
|
Date: Tue, 23 Mar 2021 13:00:00 +0100
|
|
Subject: [PATCH 1/2] Add support for building with libsoup3
|
|
|
|
Remove soup2 build option, based on
|
|
https://gitlab.freedesktop.org/geoclue/geoclue/-/merge_requests/83
|
|
|
|
Original commit message:
|
|
|
|
Add soup2 build option, enabled by default. When disabled, libsoup3 will
|
|
be used instead.
|
|
---
|
|
src/gclue-mozilla.c | 20 ++++---
|
|
src/gclue-web-source.c | 120 ++++++++++++++++++++++-------------------
|
|
src/meson.build | 2 +-
|
|
3 files changed, 74 insertions(+), 68 deletions(-)
|
|
|
|
diff --git a/src/gclue-mozilla.c b/src/gclue-mozilla.c
|
|
index 8e602c1..3ee02c8 100644
|
|
--- a/src/gclue-mozilla.c
|
|
+++ b/src/gclue-mozilla.c
|
|
@@ -151,6 +151,7 @@ gclue_mozilla_create_query (GList *bss_list, /* As in Access Points */
|
|
guint n_non_ignored_bsss;
|
|
GList *iter;
|
|
gint64 mcc, mnc;
|
|
+ g_autoptr(GBytes) body = NULL;
|
|
|
|
builder = json_builder_new ();
|
|
json_builder_begin_object (builder);
|
|
@@ -238,11 +239,8 @@ gclue_mozilla_create_query (GList *bss_list, /* As in Access Points */
|
|
|
|
uri = get_url ();
|
|
ret = soup_message_new ("POST", uri);
|
|
- soup_message_set_request (ret,
|
|
- "application/json",
|
|
- SOUP_MEMORY_TAKE,
|
|
- data,
|
|
- data_len);
|
|
+ body = g_bytes_new_take (data, data_len);
|
|
+ soup_message_set_request_body_from_bytes (ret, "application/json", body);
|
|
g_debug ("Sending following request to '%s':\n%s", uri, data);
|
|
|
|
return ret;
|
|
@@ -322,6 +320,7 @@ gclue_mozilla_create_submit_query (GClueLocation *location,
|
|
GError **error)
|
|
{
|
|
SoupMessage *ret = NULL;
|
|
+ SoupMessageHeaders *request_headers;
|
|
JsonBuilder *builder;
|
|
JsonGenerator *generator;
|
|
JsonNode *root_node;
|
|
@@ -332,6 +331,7 @@ gclue_mozilla_create_submit_query (GClueLocation *location,
|
|
gdouble lat, lon, accuracy, altitude;
|
|
GDateTime *datetime;
|
|
gint64 mcc, mnc;
|
|
+ g_autoptr(GBytes) body = NULL;
|
|
|
|
url = get_submit_config (&nick);
|
|
if (url == NULL)
|
|
@@ -448,15 +448,13 @@ gclue_mozilla_create_submit_query (GClueLocation *location,
|
|
g_object_unref (generator);
|
|
|
|
ret = soup_message_new ("POST", url);
|
|
+ request_headers = soup_message_get_request_headers (ret);
|
|
if (nick != NULL && nick[0] != '\0')
|
|
- soup_message_headers_append (ret->request_headers,
|
|
+ soup_message_headers_append (request_headers,
|
|
"X-Nickname",
|
|
nick);
|
|
- soup_message_set_request (ret,
|
|
- "application/json",
|
|
- SOUP_MEMORY_TAKE,
|
|
- data,
|
|
- data_len);
|
|
+ body = g_bytes_new_take (data, data_len);
|
|
+ soup_message_set_request_body_from_bytes (ret, "application/json", body);
|
|
g_debug ("Sending following request to '%s':\n%s", url, data);
|
|
|
|
out:
|
|
diff --git a/src/gclue-web-source.c b/src/gclue-web-source.c
|
|
index bfd70f7..2c98f99 100644
|
|
--- a/src/gclue-web-source.c
|
|
+++ b/src/gclue-web-source.c
|
|
@@ -59,9 +59,9 @@ G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GClueWebSource,
|
|
GCLUE_TYPE_LOCATION_SOURCE,
|
|
G_ADD_PRIVATE (GClueWebSource))
|
|
|
|
-static void refresh_callback (SoupSession *session,
|
|
- SoupMessage *query,
|
|
- gpointer user_data);
|
|
+static void refresh_callback (SoupSession *session,
|
|
+ GAsyncResult *result,
|
|
+ gpointer user_data);
|
|
|
|
static void
|
|
gclue_web_source_real_refresh_async (GClueWebSource *source,
|
|
@@ -103,44 +103,48 @@ gclue_web_source_real_refresh_async (GClueWebSource *source,
|
|
return;
|
|
}
|
|
|
|
- /* TODO handle cancellation */
|
|
- soup_session_queue_message (source->priv->soup_session,
|
|
- source->priv->query,
|
|
- refresh_callback,
|
|
- g_steal_pointer (&task));
|
|
+ soup_session_send_and_read_async (source->priv->soup_session,
|
|
+ source->priv->query,
|
|
+ G_PRIORITY_DEFAULT,
|
|
+ cancellable,
|
|
+ (GAsyncReadyCallback)refresh_callback,
|
|
+ g_steal_pointer (&task));
|
|
}
|
|
|
|
static void
|
|
-refresh_callback (SoupSession *session,
|
|
- SoupMessage *query,
|
|
- gpointer user_data)
|
|
+refresh_callback (SoupSession *session,
|
|
+ GAsyncResult *result,
|
|
+ gpointer user_data)
|
|
{
|
|
g_autoptr(GTask) task = g_steal_pointer (&user_data);
|
|
GClueWebSource *web;
|
|
+ g_autoptr(SoupMessage) query = NULL;
|
|
+ g_autoptr(GBytes) body = NULL;
|
|
g_autoptr(GError) local_error = NULL;
|
|
g_autofree char *contents = NULL;
|
|
g_autofree char *str = NULL;
|
|
g_autoptr(GClueLocation) location = NULL;
|
|
- SoupURI *uri;
|
|
+ GUri *uri;
|
|
|
|
- if (query->status_code == SOUP_STATUS_CANCELLED) {
|
|
- g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_CANCELLED,
|
|
- "Operation cancelled");
|
|
+ web = GCLUE_WEB_SOURCE (g_task_get_source_object (task));
|
|
+ query = g_steal_pointer (&web->priv->query);
|
|
+
|
|
+ body = soup_session_send_and_read_finish (session, result, &local_error);
|
|
+ if (!body) {
|
|
+ g_task_return_error (task, g_steal_pointer (&local_error));
|
|
return;
|
|
}
|
|
|
|
- web = GCLUE_WEB_SOURCE (g_task_get_source_object (task));
|
|
- web->priv->query = NULL;
|
|
-
|
|
- if (query->status_code != SOUP_STATUS_OK) {
|
|
+ if (soup_message_get_status (query) != SOUP_STATUS_OK) {
|
|
g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
|
|
- "Failed to query location: %s", query->reason_phrase);
|
|
+ "Failed to query location: %s",
|
|
+ soup_message_get_reason_phrase (query));
|
|
return;
|
|
}
|
|
|
|
- contents = g_strndup (query->response_body->data, query->response_body->length);
|
|
+ contents = g_strndup (g_bytes_get_data (body, NULL), g_bytes_get_size (body));
|
|
uri = soup_message_get_uri (query);
|
|
- str = soup_uri_to_string (uri, FALSE);
|
|
+ str = g_uri_to_string (uri);
|
|
g_debug ("Got following response from '%s':\n%s", str, contents);
|
|
location = GCLUE_WEB_SOURCE_GET_CLASS (web)->parse_response (web, contents, &local_error);
|
|
if (local_error != NULL) {
|
|
@@ -253,15 +257,12 @@ gclue_web_source_finalize (GObject *gsource)
|
|
priv->connectivity_changed_id = 0;
|
|
}
|
|
|
|
- if (priv->query != NULL) {
|
|
- g_debug ("Cancelling query");
|
|
- soup_session_cancel_message (priv->soup_session,
|
|
- priv->query,
|
|
- SOUP_STATUS_CANCELLED);
|
|
- priv->query = NULL;
|
|
- }
|
|
+ g_clear_object (&priv->query);
|
|
|
|
- g_clear_object (&priv->soup_session);
|
|
+ if (priv->soup_session) {
|
|
+ soup_session_abort (priv->soup_session);
|
|
+ g_object_unref (priv->soup_session);
|
|
+ }
|
|
|
|
G_OBJECT_CLASS (gclue_web_source_parent_class)->finalize (gsource);
|
|
}
|
|
@@ -274,10 +275,8 @@ gclue_web_source_constructed (GObject *object)
|
|
|
|
G_OBJECT_CLASS (gclue_web_source_parent_class)->constructed (object);
|
|
|
|
- priv->soup_session = soup_session_new_with_options
|
|
- (SOUP_SESSION_REMOVE_FEATURE_BY_TYPE,
|
|
- SOUP_TYPE_PROXY_RESOLVER_DEFAULT,
|
|
- NULL);
|
|
+ priv->soup_session = soup_session_new ();
|
|
+ soup_session_remove_feature_by_type (priv->soup_session, G_TYPE_PROXY_RESOLVER);
|
|
|
|
monitor = g_network_monitor_get_default ();
|
|
priv->network_changed_id =
|
|
@@ -330,25 +329,33 @@ gclue_web_source_refresh (GClueWebSource *source)
|
|
}
|
|
|
|
static void
|
|
-submit_query_callback (SoupSession *session,
|
|
- SoupMessage *query,
|
|
- gpointer user_data)
|
|
+submit_query_callback (SoupSession *session,
|
|
+ GAsyncResult *result)
|
|
{
|
|
- SoupURI *uri;
|
|
- g_autofree char *str = NULL;
|
|
+ g_autoptr(GBytes) body = NULL;
|
|
+ g_autoptr(GError) local_error = NULL;
|
|
+ SoupMessage *query;
|
|
+ g_autofree char *uri_str = NULL;
|
|
+ gint status_code;
|
|
|
|
- uri = soup_message_get_uri (query);
|
|
- str = soup_uri_to_string (uri, FALSE);
|
|
- if (query->status_code != SOUP_STATUS_OK &&
|
|
- query->status_code != SOUP_STATUS_NO_CONTENT) {
|
|
+ query = soup_session_get_async_result_message (session, result);
|
|
+ uri_str = g_uri_to_string (soup_message_get_uri (query));
|
|
+
|
|
+ body = soup_session_send_and_read_finish (session, result, &local_error);
|
|
+ if (!body) {
|
|
g_warning ("Failed to submit location data to '%s': %s",
|
|
- str,
|
|
- query->reason_phrase);
|
|
- return;
|
|
- }
|
|
+ uri_str, local_error->message);
|
|
+ return;
|
|
+ }
|
|
|
|
- g_debug ("Successfully submitted location data to '%s'",
|
|
- str);
|
|
+ status_code = soup_message_get_status (query);
|
|
+ if (status_code != SOUP_STATUS_OK && status_code != SOUP_STATUS_NO_CONTENT) {
|
|
+ g_warning ("Failed to submit location data to '%s': %s",
|
|
+ uri_str, soup_message_get_reason_phrase (query));
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ g_debug ("Successfully submitted location data to '%s'", uri_str);
|
|
}
|
|
|
|
#define SUBMISSION_ACCURACY_THRESHOLD 100
|
|
@@ -362,8 +369,8 @@ on_submit_source_location_notify (GObject *source_object,
|
|
GClueLocationSource *source = GCLUE_LOCATION_SOURCE (source_object);
|
|
GClueWebSource *web = GCLUE_WEB_SOURCE (user_data);
|
|
GClueLocation *location;
|
|
- SoupMessage *query;
|
|
- GError *error = NULL;
|
|
+ g_autoptr(SoupMessage) query = NULL;
|
|
+ g_autoptr(GError) error = NULL;
|
|
|
|
location = gclue_location_source_get_location (source);
|
|
if (location == NULL ||
|
|
@@ -386,16 +393,17 @@ on_submit_source_location_notify (GObject *source_object,
|
|
if (error != NULL) {
|
|
g_warning ("Failed to create submission query: %s",
|
|
error->message);
|
|
- g_error_free (error);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
- soup_session_queue_message (web->priv->soup_session,
|
|
- query,
|
|
- submit_query_callback,
|
|
- web);
|
|
+ soup_session_send_and_read_async (web->priv->soup_session,
|
|
+ query,
|
|
+ G_PRIORITY_DEFAULT,
|
|
+ NULL,
|
|
+ (GAsyncReadyCallback)submit_query_callback,
|
|
+ web);
|
|
}
|
|
|
|
/**
|
|
diff --git a/src/meson.build b/src/meson.build
|
|
index 13eb1ba..1c55b3b 100644
|
|
--- a/src/meson.build
|
|
+++ b/src/meson.build
|
|
@@ -1,5 +1,5 @@
|
|
geoclue_deps = base_deps + [ dependency('json-glib-1.0', version: '>= 0.14.0'),
|
|
- dependency('libsoup-2.4', version: '>= 2.42.0') ]
|
|
+ dependency('libsoup-3.0', version: '>= 3.0.0') ]
|
|
|
|
sources = [ libgeoclue_public_api_gen_sources[1],
|
|
geoclue_iface_sources,
|
|
--
|
|
GitLab
|
|
|
|
|
|
From c5ce6de3a2a4faaba38910a85348f05a8d1f6a70 Mon Sep 17 00:00:00 2001
|
|
From: Maximiliano Sandoval R <msandova@protonmail.com>
|
|
Date: Tue, 31 May 2022 16:03:43 +0200
|
|
Subject: [PATCH 2/2] ci: Switch to Ubuntu 22.04 & install libsoup3
|
|
|
|
---
|
|
.gitlab-ci.yml | 13 +++++++------
|
|
1 file changed, 7 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
|
|
index bea3b69..b7a15cb 100644
|
|
--- a/.gitlab-ci.yml
|
|
+++ b/.gitlab-ci.yml
|
|
@@ -4,25 +4,26 @@ before_script:
|
|
- apt-get install --yes git gobject-introspection libmm-glib-dev wget valac
|
|
- apt-get install --yes libnotify-dev xsltproc gtk-doc-tools python3-pip
|
|
- apt-get install --yes ninja-build gettext modemmanager-dev
|
|
+ - DEBIAN_FRONTEND=noninteractive apt-get install --yes libsoup-3.0
|
|
- pip3 install meson==0.53.2
|
|
|
|
# Ubuntu 14.04 is not supported, see README for details
|
|
#
|
|
|
|
-ubuntu-18.04:
|
|
- image: ubuntu:bionic
|
|
+ubuntu-22.04:
|
|
+ image: ubuntu:22.04
|
|
artifacts:
|
|
when: always
|
|
- name: "bionic-${CI_COMMIT_REF_NAME}"
|
|
+ name: "jammy-${CI_COMMIT_REF_NAME}"
|
|
paths:
|
|
- "${CI_PROJECT_DIR}/build"
|
|
script: meson build && ninja -C build && ninja -C build test && ninja -C build install
|
|
|
|
-ubuntu-18.04-no-backend:
|
|
- image: ubuntu:bionic
|
|
+ubuntu-22.04-no-backend:
|
|
+ image: ubuntu:22.04
|
|
artifacts:
|
|
when: always
|
|
- name: "bionic-no-backend-${CI_COMMIT_REF_NAME}"
|
|
+ name: "jammy-no-backend-${CI_COMMIT_REF_NAME}"
|
|
paths:
|
|
- "${CI_PROJECT_DIR}/build"
|
|
script: meson -Denable-backend=false build && ninja -C build && ninja -C build test && ninja -C build install
|
|
--
|
|
GitLab
|
|
|