[evolution-data-server/wip/mcrha/soup3] Introduce utility functions to change a single GUri component



commit 5f8530f50b28522d8537e8928cf4ebb4c6409b64
Author: Milan Crha <mcrha redhat com>
Date:   Wed Nov 10 17:43:52 2021 +0100

    Introduce utility functions to change a single GUri component

 .../backends/carddav/e-book-backend-carddav.c      | 31 +++++------
 .../backends/caldav/e-cal-backend-caldav.c         | 15 ++---
 .../webdav-notes/e-cal-backend-webdav-notes.c      |  5 +-
 src/libedataserver/e-data-server-util.c            | 59 ++++++++++++++++++++
 src/libedataserver/e-data-server-util.h            |  6 ++
 src/libedataserver/e-webdav-discover.c             | 65 +++++++++-------------
 src/libedataserver/e-webdav-session.c              | 33 +++++------
 .../e-credentials-prompter-impl-oauth2.c           |  5 +-
 .../evolution-source-registry-migrate-sources.c    | 16 ++----
 9 files changed, 132 insertions(+), 103 deletions(-)
---
diff --git a/src/addressbook/backends/carddav/e-book-backend-carddav.c 
b/src/addressbook/backends/carddav/e-book-backend-carddav.c
index 8276fc4d5..c337a01c9 100644
--- a/src/addressbook/backends/carddav/e-book-backend-carddav.c
+++ b/src/addressbook/backends/carddav/e-book-backend-carddav.c
@@ -132,7 +132,7 @@ ebb_carddav_connect_sync (EBookMetaBackend *meta_backend,
        if (g_error_matches (local_error, E_SOUP_SESSION_ERROR, SOUP_STATUS_NOT_FOUND) ||
            g_error_matches (local_error, E_SOUP_SESSION_ERROR, SOUP_STATUS_BAD_REQUEST)) {
                ESourceWebdav *webdav_extension;
-               GUri *g_uri, *nuri;
+               GUri *g_uri;
 
                webdav_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
                g_uri = e_source_webdav_dup_uri (webdav_extension);
@@ -147,19 +147,15 @@ ebb_carddav_connect_sync (EBookMetaBackend *meta_backend,
                                if (g_uri_get_path (g_uri)[len - 1] == '/') {
                                        gchar *np = g_strdup (g_uri_get_path (g_uri));
                                        np[len - 1] = '\0';
-                                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, np, SOUP_URI_NONE);
+                                       e_util_change_uri_component (&g_uri, SOUP_URI_PATH, np);
                                        g_free (np);
-                                       g_uri_unref (g_uri);
-                                       g_uri = nuri;
                                }
 
                                path = g_path_get_dirname (g_uri_get_path (g_uri));
                                if (path && g_str_has_prefix (g_uri_get_path (g_uri), path)) {
                                        gchar *uri;
 
-                                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, path, SOUP_URI_NONE);
-                                       g_uri_unref (g_uri);
-                                       g_uri = nuri;
+                                       e_util_change_uri_component (&g_uri, SOUP_URI_PATH, path);
 
                                        uri = g_uri_to_string_partial (g_uri, SOUP_HTTP_URI_FLAGS);
                                        if (uri) {
@@ -988,15 +984,15 @@ ebb_carddav_uid_to_uri (EBookBackendCardDAV *bbdav,
                        const gchar *extension)
 {
        ESourceWebdav *webdav_extension;
-       GUri *g_uri, *nuri;
+       GUri *guri;
        gchar *uri, *tmp, *filename, *uid_hash = NULL;
 
        g_return_val_if_fail (E_IS_BOOK_BACKEND_CARDDAV (bbdav), NULL);
        g_return_val_if_fail (uid != NULL, NULL);
 
        webdav_extension = e_source_get_extension (e_backend_get_source (E_BACKEND (bbdav)), 
E_SOURCE_EXTENSION_WEBDAV_BACKEND);
-       g_uri = e_source_webdav_dup_uri (webdav_extension);
-       g_return_val_if_fail (g_uri != NULL, NULL);
+       guri = e_source_webdav_dup_uri (webdav_extension);
+       g_return_val_if_fail (guri != NULL, NULL);
 
        /* UIDs with forward slashes can cause trouble, because the destination server
           can consider them as a path delimiter. For example Google book backend uses
@@ -1017,23 +1013,22 @@ ebb_carddav_uid_to_uri (EBookBackendCardDAV *bbdav,
                filename = g_filename_to_uri (uid, NULL, NULL);
        }
 
-       if (*g_uri_get_path (g_uri)) {
-               const gchar *slash = strrchr (g_uri_get_path (g_uri), '/');
+       if (*g_uri_get_path (guri)) {
+               const gchar *slash = strrchr (g_uri_get_path (guri), '/');
 
                if (slash && !slash[1])
-                       tmp = g_strconcat (g_uri_get_path (g_uri), filename, NULL);
+                       tmp = g_strconcat (g_uri_get_path (guri), filename, NULL);
                else
-                       tmp = g_strconcat (g_uri_get_path (g_uri), "/", filename, NULL);
+                       tmp = g_strconcat (g_uri_get_path (guri), "/", filename, NULL);
        } else
                tmp = g_strconcat ("/", filename, NULL);
 
-       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, tmp, SOUP_URI_NONE);
-       g_uri_unref (g_uri);
+       e_util_change_uri_component (&guri, SOUP_URI_PATH, tmp);
        g_free (tmp);
 
-       uri = g_uri_to_string_partial (nuri, G_URI_HIDE_USERINFO | G_URI_HIDE_PASSWORD);
+       uri = g_uri_to_string_partial (guri, G_URI_HIDE_USERINFO | G_URI_HIDE_PASSWORD);
 
-       g_uri_unref (nuri);
+       g_uri_unref (guri);
        g_free (filename);
        g_free (uid_hash);
 
diff --git a/src/calendar/backends/caldav/e-cal-backend-caldav.c 
b/src/calendar/backends/caldav/e-cal-backend-caldav.c
index 91ad5c148..b3cb68aac 100644
--- a/src/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/src/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -570,9 +570,8 @@ ecb_caldav_multiget_from_sets_sync (ECalBackendCalDAV *cbdav,
 
                                if (suri) {
                                        const gchar *path;
-                                       char *unesc;
-                                       char *esc;
-                                       GUri *nuri;
+                                       gchar *unesc;
+                                       gchar *esc;
 
                                        path = g_uri_get_path (suri);
                                        unesc = g_uri_unescape_string (path, NULL);
@@ -580,14 +579,13 @@ ecb_caldav_multiget_from_sets_sync (ECalBackendCalDAV *cbdav,
                                        /* now re-escape the string but allowing a @ */
                                        esc = g_uri_escape_string (unesc, "@", FALSE);
 
-                                       nuri = soup_uri_copy (suri, SOUP_URI_PATH, esc, SOUP_URI_NONE);
+                                       e_util_change_uri_component (&suri, SOUP_URI_PATH, esc);
 
                                        g_free (unesc);
                                        g_free (esc);
 
+                                       new_uri = g_uri_to_string_partial (suri, G_URI_HIDE_PASSWORD);
                                        g_uri_unref (suri);
-                                       new_uri = g_uri_to_string_partial (nuri, G_URI_HIDE_PASSWORD);
-                                       g_uri_unref (nuri);
                                }
 
                                if (new_uri) {
@@ -1167,7 +1165,6 @@ ecb_caldav_uid_to_uri (ECalBackendCalDAV *cbdav,
 {
        ESourceWebdav *webdav_extension;
        GUri *parsed_uri;
-       GUri *nuri;
        gchar *uri, *tmp, *filename, *uid_hash = NULL;
 
        g_return_val_if_fail (E_IS_CAL_BACKEND_CALDAV (cbdav), NULL);
@@ -1204,9 +1201,7 @@ ecb_caldav_uid_to_uri (ECalBackendCalDAV *cbdav,
 
        tmp = g_strconcat (g_uri_get_path (parsed_uri) && *g_uri_get_path (parsed_uri) ? g_uri_get_path 
(parsed_uri) : "", "/", filename, NULL);
 
-       nuri = soup_uri_copy (parsed_uri, SOUP_URI_PATH, tmp, SOUP_URI_NONE);
-       g_uri_unref (parsed_uri);
-       parsed_uri = nuri;
+       e_util_change_uri_component (&parsed_uri, SOUP_URI_PATH, tmp);
 
        g_free (tmp);
 
diff --git a/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c 
b/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c
index 3a2bd3910..2ae3199d3 100644
--- a/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c
+++ b/src/calendar/backends/webdav-notes/e-cal-backend-webdav-notes.c
@@ -750,7 +750,7 @@ ecb_webdav_notes_uid_to_uri (ECalBackendWebDAVNotes *cbnotes,
                             const gchar *uid)
 {
        ESourceWebdav *webdav_extension;
-       GUri *parsed_uri, *nuri;
+       GUri *parsed_uri;
        gchar *uri, *tmp, *filename, *uid_hash = NULL;
 
        g_return_val_if_fail (E_IS_CAL_BACKEND_WEBDAV_NOTES (cbnotes), NULL);
@@ -782,10 +782,9 @@ ecb_webdav_notes_uid_to_uri (ECalBackendWebDAVNotes *cbnotes,
        } else
                tmp = g_strconcat ("/", filename, NULL);
 
-       nuri = soup_uri_copy (parsed_uri, SOUP_URI_PATH, tmp, SOUP_URI_NONE);
+       e_util_change_uri_component (&parsed_uri, SOUP_URI_PATH, tmp);
        uri = g_uri_to_string_partial (parsed_uri, G_URI_HIDE_USERINFO | G_URI_HIDE_PASSWORD);
 
-       g_uri_unref (nuri);
        g_uri_unref (parsed_uri);
        g_free (filename);
        g_free (uid_hash);
diff --git a/src/libedataserver/e-data-server-util.c b/src/libedataserver/e-data-server-util.c
index d52809bd7..9cc92ad72 100644
--- a/src/libedataserver/e-data-server-util.c
+++ b/src/libedataserver/e-data-server-util.c
@@ -31,6 +31,7 @@
 #endif
 
 #include <glib-object.h>
+#include <libsoup/soup.h>
 
 #include "e-source.h"
 #include "e-source-address-book.h"
@@ -3443,3 +3444,61 @@ e_util_get_directory_variants (const gchar *main_path,
 
        return camel_util_get_directory_variants (main_path, replace_prefix, with_modules_dir);
 }
+
+/**
+ * e_util_change_uri_component:
+ * @inout_uri: (inout): a #GUri
+ * @component: a string #SoupURIComponent to change
+ * @value: (nullable): a value to set, or %NULL to unset
+ *
+ * Changes component @component in the @inout_uri to value @value.
+ * As the #GUri cannot be modified the @inout_uri points to a new #GUri
+ * at the end of the call and the previous structure is unreffed.
+ *
+ * See: e_util_change_uri_port()
+ *
+ * Since: 3.44
+ **/
+void
+e_util_change_uri_component (GUri **inout_uri,
+                            SoupURIComponent component,
+                            const gchar *value)
+{
+       GUri *tmp;
+
+       g_return_if_fail (inout_uri != NULL);
+       g_return_if_fail (*inout_uri != NULL);
+       g_return_if_fail (component != SOUP_URI_PORT);
+       g_return_if_fail (component != SOUP_URI_NONE);
+
+       tmp = soup_uri_copy (*inout_uri, component, value, SOUP_URI_NONE);
+       g_uri_unref (*inout_uri);
+       *inout_uri = tmp;
+}
+
+/**
+ * e_util_change_uri_port:
+ * @inout_uri: (inout): a #GUri
+ * @port: the port number to set
+ *
+ * Changes the port in the @inout_uri to value @port.
+ * As the #GUri cannot be modified the @inout_uri points to a new #GUri
+ * at the end of the call and the previous structure is unreffed.
+ *
+ * See: e_util_change_uri_component()
+ *
+ * Since: 3.44
+ **/
+void
+e_util_change_uri_port (GUri **inout_uri,
+                       gint port)
+{
+       GUri *tmp;
+
+       g_return_if_fail (inout_uri != NULL);
+       g_return_if_fail (*inout_uri != NULL);
+
+       tmp = soup_uri_copy (*inout_uri, SOUP_URI_PORT, port, SOUP_URI_NONE);
+       g_uri_unref (*inout_uri);
+       *inout_uri = tmp;
+}
diff --git a/src/libedataserver/e-data-server-util.h b/src/libedataserver/e-data-server-util.h
index 797760012..33acbd6b6 100644
--- a/src/libedataserver/e-data-server-util.h
+++ b/src/libedataserver/e-data-server-util.h
@@ -28,6 +28,7 @@
 
 #include <sys/types.h>
 #include <gio/gio.h>
+#include <libsoup/soup.h>
 
 #include <libedataserver/e-source-enums.h>
 
@@ -298,6 +299,11 @@ gint               e_util_source_compare_for_sort  (struct _ESource *source_a,
 GPtrArray *    e_util_get_directory_variants   (const gchar *main_path,
                                                 const gchar *replace_prefix,
                                                 gboolean with_modules_dir);
+void           e_util_change_uri_component     (GUri **inout_uri,
+                                                SoupURIComponent component,
+                                                const gchar *value);
+void           e_util_change_uri_port          (GUri **inout_uri,
+                                                gint port);
 
 G_END_DECLS
 
diff --git a/src/libedataserver/e-webdav-discover.c b/src/libedataserver/e-webdav-discover.c
index c551357e5..1c1587572 100644
--- a/src/libedataserver/e-webdav-discover.c
+++ b/src/libedataserver/e-webdav-discover.c
@@ -825,23 +825,23 @@ e_webdav_discover_sources_full_sync (ESource *source,
 {
        ESourceWebdav *webdav_extension;
        EWebDAVSession *webdav;
-       GUri *g_uri, *nuri;
+       GUri *guri;
        gboolean success;
 
        g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
 
        if (url_use_path && (g_ascii_strncasecmp (url_use_path, "http://";, 7) == 0 ||
            g_ascii_strncasecmp (url_use_path, "https://";, 8) == 0)) {
-               g_uri = g_uri_parse (url_use_path, SOUP_HTTP_URI_FLAGS, NULL);
+               guri = g_uri_parse (url_use_path, SOUP_HTTP_URI_FLAGS, NULL);
                url_use_path = NULL;
        } else {
                g_return_val_if_fail (e_source_has_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND), 
FALSE);
 
                webdav_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
-               g_uri = e_source_webdav_dup_uri (webdav_extension);
+               guri = e_source_webdav_dup_uri (webdav_extension);
        }
 
-       g_return_val_if_fail (g_uri != NULL, FALSE);
+       g_return_val_if_fail (guri != NULL, FALSE);
 
        if (url_use_path) {
                GString *new_path;
@@ -852,7 +852,7 @@ e_webdav_discover_sources_full_sync (ESource *source,
                } else {
                        const gchar *current_path;
 
-                       current_path = g_uri_get_path (g_uri);
+                       current_path = g_uri_get_path (guri);
                        new_path = g_string_new (current_path ? current_path : "");
                        if (!new_path->len || new_path->str[new_path->len - 1] != '/')
                                g_string_append_c (new_path, '/');
@@ -862,9 +862,7 @@ e_webdav_discover_sources_full_sync (ESource *source,
                if (!new_path->len || new_path->str[new_path->len - 1] != '/')
                        g_string_append_c (new_path, '/');
 
-               nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, new_path->str, SOUP_URI_NONE);
-               g_uri_unref (g_uri);
-               g_uri = nuri;
+               e_util_change_uri_component (&guri, SOUP_URI_PATH, new_path->str);
 
                g_string_free (new_path, TRUE);
        }
@@ -872,7 +870,7 @@ e_webdav_discover_sources_full_sync (ESource *source,
        webdav = e_webdav_session_new (source);
 
        if (!e_webdav_discover_setup_proxy_resolver (webdav, source, ref_source_func, 
ref_source_func_user_data, cancellable, error)) {
-               g_uri_unref (g_uri);
+               g_uri_unref (guri);
                g_object_unref (webdav);
 
                return FALSE;
@@ -895,7 +893,7 @@ e_webdav_discover_sources_full_sync (ESource *source,
                wdd.cancellable = cancellable;
                wdd.error = &local_error;
 
-               uri = g_uri_to_string_partial (g_uri, G_URI_HIDE_PASSWORD);
+               uri = g_uri_to_string_partial (guri, G_URI_HIDE_PASSWORD);
 
                success = uri && *uri && e_webdav_discover_propfind_uri_sync (webdav, &wdd, uri, FALSE);
 
@@ -906,17 +904,15 @@ e_webdav_discover_sources_full_sync (ESource *source,
                if (!fatal_error && !g_cancellable_is_cancelled (cancellable) && !wdd.calendars &&
                    ((only_supports & (~CUSTOM_SUPPORTS_FLAGS)) == E_WEBDAV_DISCOVER_SUPPORTS_NONE ||
                    (only_supports & (E_WEBDAV_DISCOVER_SUPPORTS_EVENTS | E_WEBDAV_DISCOVER_SUPPORTS_MEMOS | 
E_WEBDAV_DISCOVER_SUPPORTS_TASKS)) != 0) &&
-                   (!g_uri_get_path (g_uri) || !strstr (g_uri_get_path (g_uri), "/.well-known/"))) {
+                   (!g_uri_get_path (guri) || !strstr (g_uri_get_path (guri), "/.well-known/"))) {
                        gchar *saved_path;
                        GError *local_error_2nd = NULL;
 
-                       saved_path = g_strdup (g_uri_get_path (g_uri));
+                       saved_path = g_strdup (g_uri_get_path (guri));
 
-                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, "/.well-known/caldav", SOUP_URI_NONE);
-                       g_uri_unref (g_uri);
-                       g_uri = nuri;
+                       e_util_change_uri_component (&guri, SOUP_URI_PATH, "/.well-known/caldav");
 
-                       uri = g_uri_to_string_partial (g_uri, SOUP_HTTP_URI_FLAGS);
+                       uri = g_uri_to_string_partial (guri, SOUP_HTTP_URI_FLAGS);
 
                        wdd.error = &local_error_2nd;
                        wdd.only_supports = E_WEBDAV_DISCOVER_SUPPORTS_EVENTS | 
E_WEBDAV_DISCOVER_SUPPORTS_MEMOS | E_WEBDAV_DISCOVER_SUPPORTS_TASKS;
@@ -928,9 +924,8 @@ e_webdav_discover_sources_full_sync (ESource *source,
 
                        fatal_error = e_webdav_discover_is_fatal_error (local_error_2nd);
 
-                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, saved_path, SOUP_URI_NONE);
-                       g_uri_unref (g_uri);
-                       g_uri = nuri;
+                       e_util_change_uri_component (&guri, SOUP_URI_PATH, saved_path);
+
                        g_free (saved_path);
 
                        if (e_webdav_discover_maybe_replace_auth_error (&local_error, &local_error_2nd))
@@ -944,17 +939,15 @@ e_webdav_discover_sources_full_sync (ESource *source,
                if (!fatal_error && !g_cancellable_is_cancelled (cancellable) &&
                    ((only_supports & (~CUSTOM_SUPPORTS_FLAGS)) == E_WEBDAV_DISCOVER_SUPPORTS_NONE ||
                    (only_supports & (E_WEBDAV_DISCOVER_SUPPORTS_WEBDAV_NOTES)) != 0) &&
-                   (!g_uri_get_path (g_uri) || !strstr (g_uri_get_path (g_uri), "/.well-known/"))) {
+                   (!g_uri_get_path (guri) || !strstr (g_uri_get_path (guri), "/.well-known/"))) {
                        gchar *saved_path;
                        GError *local_error_2nd = NULL;
 
-                       saved_path = g_strdup (g_uri_get_path (g_uri));
+                       saved_path = g_strdup (g_uri_get_path (guri));
 
-                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, "/.well-known/webdav/Notes/", 
SOUP_URI_NONE);
-                       g_uri_unref (g_uri);
-                       g_uri = nuri;
+                       e_util_change_uri_component (&guri, SOUP_URI_PATH, "/.well-known/webdav/Notes/");
 
-                       uri = g_uri_to_string_partial (g_uri, G_URI_HIDE_PASSWORD);
+                       uri = g_uri_to_string_partial (guri, G_URI_HIDE_PASSWORD);
 
                        wdd.error = &local_error_2nd;
                        wdd.only_supports = E_WEBDAV_DISCOVER_SUPPORTS_WEBDAV_NOTES;
@@ -966,9 +959,8 @@ e_webdav_discover_sources_full_sync (ESource *source,
 
                        fatal_error = e_webdav_discover_is_fatal_error (local_error_2nd);
 
-                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, saved_path, SOUP_URI_NONE);
-                       g_uri_unref (g_uri);
-                       g_uri = nuri;
+                       e_util_change_uri_component (&guri, SOUP_URI_PATH, saved_path);
+
                        g_free (saved_path);
 
                        if (e_webdav_discover_maybe_replace_auth_error (&local_error, &local_error_2nd))
@@ -982,17 +974,15 @@ e_webdav_discover_sources_full_sync (ESource *source,
                if (!fatal_error && !g_cancellable_is_cancelled (cancellable) && !wdd.addressbooks &&
                    ((only_supports & (~CUSTOM_SUPPORTS_FLAGS)) == E_WEBDAV_DISCOVER_SUPPORTS_NONE ||
                    (only_supports & (E_WEBDAV_DISCOVER_SUPPORTS_CONTACTS)) != 0) &&
-                   (!g_uri_get_path (g_uri) || !strstr (g_uri_get_path (g_uri), "/.well-known/"))) {
+                   (!g_uri_get_path (guri) || !strstr (g_uri_get_path (guri), "/.well-known/"))) {
                        gchar *saved_path;
                        GError *local_error_2nd = NULL;
 
-                       saved_path = g_strdup (g_uri_get_path (g_uri));
+                       saved_path = g_strdup (g_uri_get_path (guri));
 
-                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, "/.well-known/carddav", SOUP_URI_NONE);
-                       g_uri_unref (g_uri);
-                       g_uri = nuri;
+                       e_util_change_uri_component (&guri, SOUP_URI_PATH, "/.well-known/carddav");
 
-                       uri = g_uri_to_string_partial (g_uri, SOUP_HTTP_URI_FLAGS);
+                       uri = g_uri_to_string_partial (guri, SOUP_HTTP_URI_FLAGS);
 
                        wdd.error = &local_error_2nd;
                        wdd.only_supports = E_WEBDAV_DISCOVER_SUPPORTS_CONTACTS;
@@ -1002,9 +992,8 @@ e_webdav_discover_sources_full_sync (ESource *source,
 
                        g_free (uri);
 
-                       nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, saved_path, SOUP_URI_NONE);
-                       g_uri_unref (g_uri);
-                       g_uri = nuri;
+                       e_util_change_uri_component (&guri, SOUP_URI_PATH, saved_path);
+
                        g_free (saved_path);
 
                        fatal_error = e_webdav_discover_is_fatal_error (local_error_2nd);
@@ -1077,7 +1066,7 @@ e_webdav_discover_sources_full_sync (ESource *source,
        if (!success)
                e_soup_session_get_ssl_error_details (E_SOUP_SESSION (webdav), out_certificate_pem, 
out_certificate_errors);
 
-       g_uri_unref (g_uri);
+       g_uri_unref (guri);
        g_object_unref (webdav);
 
        return success;
diff --git a/src/libedataserver/e-webdav-session.c b/src/libedataserver/e-webdav-session.c
index 8f435e102..35da0d493 100644
--- a/src/libedataserver/e-webdav-session.c
+++ b/src/libedataserver/e-webdav-session.c
@@ -712,7 +712,7 @@ e_webdav_session_new_message (EWebDAVSession *webdav,
 {
        ESoupSession *session;
        SoupMessage *message;
-       GUri *g_uri, *nuri;
+       GUri *guri;
        ESource *source;
        ESourceWebdav *webdav_extension;
        const gchar *path;
@@ -733,26 +733,24 @@ e_webdav_session_new_message (EWebDAVSession *webdav,
        }
 
        webdav_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
-       g_uri = e_source_webdav_dup_uri (webdav_extension);
+       guri = e_source_webdav_dup_uri (webdav_extension);
 
-       g_return_val_if_fail (g_uri != NULL, NULL);
+       g_return_val_if_fail (guri != NULL, NULL);
 
        /* The URI in the ESource should be to a collection, with an ending
           forward slash, thus ensure it's there. */
-       path = g_uri_get_path (g_uri);
+       path = g_uri_get_path (guri);
        if (!path || !*path || !g_str_has_suffix (path, "/")) {
                gchar *new_path;
 
                new_path = g_strconcat (path ? path : "", "/", NULL);
-               nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, new_path, SOUP_URI_NONE);
-               g_uri_unref (g_uri);
-               g_uri = nuri;
+               e_util_change_uri_component (&guri, SOUP_URI_PATH, new_path);
                g_free (new_path);
        }
 
-       message = e_soup_session_new_message_uri (session, method, g_uri, error);
+       message = e_soup_session_new_message_uri (session, method, guri, error);
 
-       g_uri_unref (g_uri);
+       g_uri_unref (guri);
 
        return message;
 }
@@ -1112,11 +1110,11 @@ e_webdav_session_ensure_full_uri (EWebDAVSession *webdav,
        g_return_val_if_fail (href != NULL, NULL);
 
        if (*href == '/' || !strstr (href, "://")) {
-               GUri *g_uri, *nuri;
+               GUri *guri;
                gchar *full_uri;
 
                if (request_uri) {
-                       g_uri = g_uri_ref ((GUri *) request_uri);
+                       guri = g_uri_ref ((GUri *) request_uri);
                } else {
                        ESource *source;
                        ESourceWebdav *webdav_extension;
@@ -1128,18 +1126,15 @@ e_webdav_session_ensure_full_uri (EWebDAVSession *webdav,
                                return g_strdup (href);
 
                        webdav_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
-                       g_uri = e_source_webdav_dup_uri (webdav_extension);
+                       guri = e_source_webdav_dup_uri (webdav_extension);
                }
 
-               g_return_val_if_fail (g_uri != NULL, NULL);
+               g_return_val_if_fail (guri != NULL, NULL);
 
-               nuri = soup_uri_copy (g_uri, SOUP_URI_PATH, href, SOUP_URI_NONE);
-               g_uri_unref (g_uri);
-               g_uri = nuri;
-               full_uri = g_uri_to_string_partial (g_uri, G_URI_HIDE_PASSWORD |
-                                                          G_URI_HIDE_USERINFO);
+               e_util_change_uri_component (&guri, SOUP_URI_PATH, href);
+               full_uri = g_uri_to_string_partial (guri, G_URI_HIDE_PASSWORD | G_URI_HIDE_USERINFO);
 
-               g_uri_unref (g_uri);
+               g_uri_unref (guri);
 
                return full_uri;
        }
diff --git a/src/libedataserverui/e-credentials-prompter-impl-oauth2.c 
b/src/libedataserverui/e-credentials-prompter-impl-oauth2.c
index ab9af2639..1499535fe 100644
--- a/src/libedataserverui/e-credentials-prompter-impl-oauth2.c
+++ b/src/libedataserverui/e-credentials-prompter-impl-oauth2.c
@@ -73,7 +73,7 @@ cpi_oauth2_create_auth_uri (EOAuth2Service *service,
                            ESource *source)
 {
        GHashTable *uri_query;
-       GUri *parsed_uri, *nuri;
+       GUri *parsed_uri;
        gchar *uri, *query;
 
        g_return_val_if_fail (E_IS_OAUTH2_SERVICE (service), NULL);
@@ -87,11 +87,10 @@ cpi_oauth2_create_auth_uri (EOAuth2Service *service,
        e_oauth2_service_prepare_authentication_uri_query (service, source, uri_query);
 
        query = soup_form_encode_hash (uri_query);
-       nuri = soup_uri_copy (parsed_uri, SOUP_URI_QUERY, query, SOUP_URI_NONE);
+       e_util_change_uri_component (&parsed_uri, SOUP_URI_QUERY, query);
 
        uri = g_uri_to_string_partial (parsed_uri, G_URI_HIDE_PASSWORD);
 
-       g_uri_unref (nuri);
        g_uri_unref (parsed_uri);
        g_hash_table_destroy (uri_query);
 
diff --git a/src/services/evolution-source-registry/evolution-source-registry-migrate-sources.c 
b/src/services/evolution-source-registry/evolution-source-registry-migrate-sources.c
index 038030ca5..a2998f68f 100644
--- a/src/services/evolution-source-registry/evolution-source-registry-migrate-sources.c
+++ b/src/services/evolution-source-registry/evolution-source-registry-migrate-sources.c
@@ -2270,12 +2270,8 @@ migrate_parse_caldav_source (ParseData *parse_data)
                        "Host", g_uri_get_host (parse_data->parsed_uri));
 
        /* We may override this later if we see an "ssl" property. */
-       if (g_uri_get_port (parse_data->parsed_uri) < 0) {
-               GUri *nuri = soup_uri_copy (parse_data->parsed_uri,
-                                           SOUP_URI_PORT, 80, SOUP_URI_NONE);
-               g_uri_unref (parse_data->parsed_uri);
-               parse_data->parsed_uri = nuri;
-       }
+       if (g_uri_get_port (parse_data->parsed_uri) < 0)
+               e_util_change_uri_port (&parse_data->parsed_uri, 80);
 
        g_key_file_set_integer (
                parse_data->key_file,
@@ -2528,12 +2524,8 @@ migrate_parse_webcal_source (ParseData *parse_data)
                        "Host", g_uri_get_host (parse_data->parsed_uri));
 
        /* We may override this later if we see an "ssl" property. */
-       if (g_uri_get_port (parse_data->parsed_uri) < 0) {
-               GUri *nuri = soup_uri_copy (parse_data->parsed_uri,
-                                           SOUP_URI_PORT, 80, SOUP_URI_NONE);
-               g_uri_unref (parse_data->parsed_uri);
-               parse_data->parsed_uri = nuri;
-       }
+       if (g_uri_get_port (parse_data->parsed_uri) < 0)
+               e_util_change_uri_port (&parse_data->parsed_uri, 80);
 
        g_key_file_set_integer (
                parse_data->key_file,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]