Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package evolution-data-server for 
openSUSE:Factory checked in at 2022-06-01 17:33:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/evolution-data-server (Old)
 and      /work/SRC/openSUSE:Factory/.evolution-data-server.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "evolution-data-server"

Wed Jun  1 17:33:53 2022 rev:236 rq:980022 version:3.44.2

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/evolution-data-server/evolution-data-server.changes  
    2022-04-26 20:17:07.948714503 +0200
+++ 
/work/SRC/openSUSE:Factory/.evolution-data-server.new.1548/evolution-data-server.changes
    2022-06-01 17:33:59.822693657 +0200
@@ -1,0 +2,18 @@
+Mon May 30 11:38:48 UTC 2022 - Dominique Leuenberger <dims...@opensuse.org>
+
+- Update to version 3.44.2:
+  + Miscellaneous:
+    - ERemindersWidget: Allow width shrink for small screens.
+    - Fix few memory leaks discovered by Coverity scan.
+    - GOA module: Prevent ESource removal on D-Bus reconnect or
+      registry reload.
+  + Bug Fixes:
+    - CalDAV: Crash on calendar update.
+    - e-webdav-discover: Fails to find Radicale calendars within
+      collection account.
+    - Google OAuth out-of-band (oob) flow will be deprecated.
+    - IMAPx: Fails to create folder with NIL folder hierarchy
+      delimiter.
+    - WebDAVCollectionBackend: Removes sources on server error.
+
+-------------------------------------------------------------------

Old:
----
  evolution-data-server-3.44.1.tar.xz

New:
----
  evolution-data-server-3.44.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ evolution-data-server.spec ++++++
--- /var/tmp/diff_new_pack.0kLSV5/_old  2022-06-01 17:34:00.378694315 +0200
+++ /var/tmp/diff_new_pack.0kLSV5/_new  2022-06-01 17:34:00.382694319 +0200
@@ -31,7 +31,7 @@
 %bcond_without introspection
 
 Name:           evolution-data-server
-Version:        3.44.1
+Version:        3.44.2
 Release:        0
 Summary:        Evolution Data Server
 License:        LGPL-2.0-only

++++++ evolution-data-server-3.44.1.tar.xz -> 
evolution-data-server-3.44.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/evolution-data-server-3.44.1/CMakeLists.txt 
new/evolution-data-server-3.44.2/CMakeLists.txt
--- old/evolution-data-server-3.44.1/CMakeLists.txt     2022-04-22 
07:45:23.000000000 +0200
+++ new/evolution-data-server-3.44.2/CMakeLists.txt     2022-05-27 
07:43:00.000000000 +0200
@@ -4,7 +4,7 @@
 cmake_policy(VERSION 3.1)
 
 project(evolution-data-server
-       VERSION 3.44.1
+       VERSION 3.44.2
        LANGUAGES C CXX)
 set(CMAKE_CXX_STANDARD 14)
 set(PROJECT_BUGREPORT 
"https://gitlab.gnome.org/GNOME/evolution-data-server/issues/";)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/evolution-data-server-3.44.1/NEWS 
new/evolution-data-server-3.44.2/NEWS
--- old/evolution-data-server-3.44.1/NEWS       2022-04-22 07:45:23.000000000 
+0200
+++ new/evolution-data-server-3.44.2/NEWS       2022-05-27 07:43:00.000000000 
+0200
@@ -1,3 +1,18 @@
+Evolution-Data-Server 3.44.2 2022-05-27
+---------------------------------------
+
+Bug Fixes:
+       I#359 - CalDAV: Crash on calendar update
+       I#386 - e-webdav-discover: Fails to find Radicale calendars within 
collection account
+       I#388 - Google OAuth out-of-band (oob) flow will be deprecated
+       I#389 - IMAPx: Fails to create folder with NIL folder hierarchy 
delimiter
+       evo-I#1348 - WebDAVCollectionBackend: Removes sources on server error
+
+Miscellaneous:
+       ERemindersWidget: Allow width shrink for small screens
+       Fix few memory leaks discovered by Coverity scan
+       GOA module: Prevent ESource removal on D-Bus reconnect or registry 
reload
+
 Evolution-Data-Server 3.44.1 2022-04-22
 ---------------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/addressbook/backends/ldap/e-book-backend-ldap.c
 
new/evolution-data-server-3.44.2/src/addressbook/backends/ldap/e-book-backend-ldap.c
--- 
old/evolution-data-server-3.44.1/src/addressbook/backends/ldap/e-book-backend-ldap.c
        2022-04-22 07:45:23.000000000 +0200
+++ 
new/evolution-data-server-3.44.2/src/addressbook/backends/ldap/e-book-backend-ldap.c
        2022-05-27 07:43:00.000000000 +0200
@@ -2841,7 +2841,7 @@
                   const gchar *ldap_attr)
 {
        gint phone_ids[2] = { E_CONTACT_PHONE_HOME, E_CONTACT_PHONE_HOME_2 };
-       const gchar *phone1, *phone2;
+       gchar *phone1, *phone2;
        gint i;
 
        for (i = 0; i < 2; i++) {
@@ -2854,6 +2854,9 @@
                else
                        equal = (!!phone1 == !!phone2);
 
+               g_free (phone1);
+               g_free (phone2);
+
                if (!equal)
                        return equal;
        }
@@ -2914,7 +2917,7 @@
                  const gchar *ldap_attr)
 {
        gint phone_ids[2] = { E_CONTACT_PHONE_BUSINESS, 
E_CONTACT_PHONE_BUSINESS_2 };
-       const gchar *phone1, *phone2;
+       gchar *phone1, *phone2;
        gint i;
 
        for (i = 0; i < 2; i++) {
@@ -2927,6 +2930,9 @@
                else
                        equal = (!!phone1 == !!phone2);
 
+               g_free (phone1);
+               g_free (phone2);
+
                if (!equal)
                        return equal;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/calendar/backends/caldav/e-cal-backend-caldav.c
 
new/evolution-data-server-3.44.2/src/calendar/backends/caldav/e-cal-backend-caldav.c
--- 
old/evolution-data-server-3.44.1/src/calendar/backends/caldav/e-cal-backend-caldav.c
        2022-04-22 07:45:23.000000000 +0200
+++ 
new/evolution-data-server-3.44.2/src/calendar/backends/caldav/e-cal-backend-caldav.c
        2022-05-27 07:43:00.000000000 +0200
@@ -545,7 +545,8 @@
        link = *in_link;
 
        while (link && left_to_go > 0) {
-               ECalMetaBackendInfo *nfo = link->data;
+               GSList *nfo_link = link;
+               ECalMetaBackendInfo *nfo = nfo_link->data;
 
                link = g_slist_next (link);
                if (!link) {
@@ -635,7 +636,7 @@
                                        else
                                                e_cal_meta_backend_info_free 
(nfo);
 
-                                       link->data = NULL;
+                                       nfo_link->data = NULL;
                                        g_clear_error (&local_error);
                                        continue;
                                } else if (local_error) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/camel/providers/imapx/camel-imapx-store.c 
new/evolution-data-server-3.44.2/src/camel/providers/imapx/camel-imapx-store.c
--- 
old/evolution-data-server-3.44.1/src/camel/providers/imapx/camel-imapx-store.c  
    2022-04-22 07:45:23.000000000 +0200
+++ 
new/evolution-data-server-3.44.2/src/camel/providers/imapx/camel-imapx-store.c  
    2022-05-27 07:43:00.000000000 +0200
@@ -2317,6 +2317,16 @@
                goto exit;
 
        separator = camel_imapx_mailbox_get_separator (parent_mailbox);
+
+       /* NIL separator means flat structure, where subfolders cannot be 
created */
+       if (!separator) {
+               g_object_unref (parent_mailbox);
+               /* Cannot set error here, like in the development version, due 
to untranslated
+                  string, thus let it create the folder in the top level. 
Evolution throws
+                  an error about "folder not found" due to using the path with 
the parent folder. */
+               goto check_namespace;
+       }
+
        parent_mailbox_name = camel_imapx_mailbox_get_name (parent_mailbox);
 
        mailbox_name = g_strdup_printf (
@@ -2355,7 +2365,7 @@
 
 check_separator:
 
-       if (strchr (folder_name, separator) != NULL) {
+       if (separator && strchr (folder_name, separator) != NULL) {
                g_set_error (
                        error, CAMEL_FOLDER_ERROR,
                        CAMEL_FOLDER_ERROR_INVALID_PATH,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/camel/providers/nntp/camel-nntp-store.c 
new/evolution-data-server-3.44.2/src/camel/providers/nntp/camel-nntp-store.c
--- 
old/evolution-data-server-3.44.1/src/camel/providers/nntp/camel-nntp-store.c    
    2022-04-22 07:45:23.000000000 +0200
+++ 
new/evolution-data-server-3.44.2/src/camel/providers/nntp/camel-nntp-store.c    
    2022-05-27 07:43:00.000000000 +0200
@@ -1442,6 +1442,9 @@
                        /* return back the .ev-store-summary file, it's saved 
in user_data_dir */
                        if (g_rename (ucd_ev_store_summary, 
udd_ev_store_summary) == -1)
                                g_debug ("%s: Failed to return back '%s' to 
'%s': %s", G_STRFUNC, ucd_ev_store_summary, udd_ev_store_summary, g_strerror 
(errno));
+
+                       g_free (udd_ev_store_summary);
+                       g_free (ucd_ev_store_summary);
                }
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/libebackend/e-webdav-collection-backend.c 
new/evolution-data-server-3.44.2/src/libebackend/e-webdav-collection-backend.c
--- 
old/evolution-data-server-3.44.1/src/libebackend/e-webdav-collection-backend.c  
    2022-04-22 07:45:23.000000000 +0200
+++ 
new/evolution-data-server-3.44.2/src/libebackend/e-webdav-collection-backend.c  
    2022-05-27 07:43:00.000000000 +0200
@@ -57,6 +57,19 @@
        g_hash_table_insert (known_sources, rid, uid);
 }
 
+static gboolean
+webdav_collection_debug_enabled (void)
+{
+       static gint enabled = -1;
+
+       if (enabled == -1) {
+               const gchar *envval = g_getenv ("WEBDAV_DEBUG");
+               enabled = envval && *envval && g_strcmp0 (envval, "0") != 0 ? 1 
: 0;
+       }
+
+       return enabled == 1;
+}
+
 typedef struct _RemoveSourcesData {
        ESourceRegistryServer *server;
        EWebDAVCollectionBackend *webdav_backend;
@@ -75,8 +88,13 @@
        source = e_source_registry_server_ref_source (rsd->server, uid);
 
        if (source) {
-               if (!e_webdav_collection_backend_is_custom_source 
(rsd->webdav_backend, source))
+               if (!e_webdav_collection_backend_is_custom_source 
(rsd->webdav_backend, source)) {
+                       if (webdav_collection_debug_enabled ()) {
+                               e_util_debug_print ("WEBDAV", "   %p: Going to 
remove previously known source '%s' (%s)\n", rsd->webdav_backend,
+                                       e_source_get_display_name (source), 
e_source_get_uid (source));
+                       }
                        e_source_remove_sync (source, NULL, NULL);
+               }
 
                g_object_unref (source);
        }
@@ -571,6 +589,9 @@
        g_list_foreach (sources, webdav_collection_add_uid_to_hashtable, 
known_sources);
        g_list_free_full (sources, g_object_unref);
 
+       if (webdav_collection_debug_enabled ())
+               e_util_debug_print ("WEBDAV", "%p: This is '%s' (%s)\n", 
webdav_backend, e_source_get_display_name (source), e_source_get_uid (source));
+
        server = e_collection_backend_ref_server (collection);
 
        if (e_source_collection_get_calendar_enabled (collection_extension) && 
calendar_url &&
@@ -589,9 +610,13 @@
 
                webdav_collection_process_discovered_sources (collection, 
discovered_sources, known_sources, source_types, G_N_ELEMENTS (source_types));
 
+               if (webdav_collection_debug_enabled ())
+                       e_util_debug_print ("WEBDAV", "%p: Received %u 
calendars from '%s'\n", webdav_backend, g_slist_length (discovered_sources), 
calendar_url);
+
                e_webdav_discover_free_discovered_sources (discovered_sources);
                discovered_sources = NULL;
                any_success = TRUE;
+       /* Prevent lost of already known calendars when the discover failed */
        } else if (local_error) {
                RemoveSourceTypesData rstd;
 
@@ -599,6 +624,17 @@
                rstd.calendars = TRUE;
 
                g_hash_table_foreach_remove (known_sources, 
webdav_collection_remove_source_types_cb, &rstd);
+
+               if (webdav_collection_debug_enabled () &&
+                   (!credentials_empty || (
+                    !g_error_matches (local_error, SOUP_HTTP_ERROR, 
SOUP_STATUS_UNAUTHORIZED) &&
+                    !g_error_matches (local_error, SOUP_HTTP_ERROR, 
SOUP_STATUS_FORBIDDEN))))
+                       e_util_debug_print ("WEBDAV", "%p: Failed to get 
calendars from '%s': %s\n", webdav_backend, calendar_url, local_error->message);
+       } else if (e_source_collection_get_calendar_enabled 
(collection_extension) && calendar_url) {
+               if (webdav_collection_debug_enabled ()) {
+                       e_util_debug_print ("WEBDAV", "%p: Failed to get 
calendars from '%s': %s\n", webdav_backend, calendar_url,
+                               g_cancellable_is_cancelled (cancellable) ? "Is 
cancelled" : "Unknown error");
+               }
        }
 
        if (!local_error && e_source_collection_get_contacts_enabled 
(collection_extension) && contacts_url &&
@@ -612,16 +648,31 @@
 
                webdav_collection_process_discovered_sources (collection, 
discovered_sources, known_sources, source_types, G_N_ELEMENTS (source_types));
 
+               if (webdav_collection_debug_enabled ())
+                       e_util_debug_print ("WEBDAV", "%p: Received %u books 
from '%s'\n", webdav_backend, g_slist_length (discovered_sources), 
contacts_url);
+
                e_webdav_discover_free_discovered_sources (discovered_sources);
                discovered_sources = NULL;
                any_success = TRUE;
-       } else if (any_success && local_error) {
+       /* Prevent lost of already known address books when the discover failed 
*/
+       } else if (local_error) {
                RemoveSourceTypesData rstd;
 
                rstd.server = server;
                rstd.calendars = FALSE;
 
                g_hash_table_foreach_remove (known_sources, 
webdav_collection_remove_source_types_cb, &rstd);
+
+               if (webdav_collection_debug_enabled () &&
+                   (!credentials_empty || (
+                    !g_error_matches (local_error, SOUP_HTTP_ERROR, 
SOUP_STATUS_UNAUTHORIZED) &&
+                    !g_error_matches (local_error, SOUP_HTTP_ERROR, 
SOUP_STATUS_FORBIDDEN))))
+                       e_util_debug_print ("WEBDAV", "%p: Failed to get books 
from '%s': %s\n", webdav_backend, contacts_url, local_error->message);
+       } else if (e_source_collection_get_contacts_enabled 
(collection_extension) && contacts_url) {
+               if (webdav_collection_debug_enabled ()) {
+                       e_util_debug_print ("WEBDAV", "%p: Failed to get books 
from '%s': %s\n", webdav_backend, contacts_url,
+                               g_cancellable_is_cancelled (cancellable) ? "Is 
cancelled" : "Unknown error");
+               }
        }
 
        if (any_success && server && !g_cancellable_is_cancelled (cancellable)) 
{
@@ -630,6 +681,11 @@
                rsd.server = server;
                rsd.webdav_backend = webdav_backend;
 
+               if (webdav_collection_debug_enabled () && g_hash_table_size 
(known_sources)) {
+                       e_util_debug_print ("WEBDAV", "%p: Have %u leftover 
previously known sources\n", webdav_backend,
+                               g_hash_table_size (known_sources));
+               }
+
                g_hash_table_foreach (known_sources, 
webdav_collection_remove_unknown_sources_cb, &rsd);
 
                g_clear_error (&local_error);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/libedataserver/e-oauth2-service-google.c 
new/evolution-data-server-3.44.2/src/libedataserver/e-oauth2-service-google.c
--- 
old/evolution-data-server-3.44.1/src/libedataserver/e-oauth2-service-google.c   
    2022-04-22 07:45:23.000000000 +0200
+++ 
new/evolution-data-server-3.44.2/src/libedataserver/e-oauth2-service-google.c   
    2022-05-27 07:43:00.000000000 +0200
@@ -24,6 +24,7 @@
 #include "e-oauth2-service-google.h"
 
 /* https://developers.google.com/identity/protocols/OAuth2InstalledApp */
+/* https://developers.google.com/identity/protocols/oauth2/native-app */
 
 /* Forward Declarations */
 static void e_oauth2_service_google_oauth2_service_init 
(EOAuth2ServiceInterface *iface);
@@ -120,14 +121,60 @@
 eos_google_get_authentication_uri (EOAuth2Service *service,
                                   ESource *source)
 {
-       return "https://accounts.google.com/o/oauth2/auth";;
+       return "https://accounts.google.com/o/oauth2/v2/auth";;
 }
 
 static const gchar *
 eos_google_get_refresh_uri (EOAuth2Service *service,
                            ESource *source)
 {
-       return "https://www.googleapis.com/oauth2/v3/token";;
+       return "https://oauth2.googleapis.com/token";;
+}
+
+static const gchar *
+eos_google_get_redirect_uri (EOAuth2Service *service,
+                            ESource *source)
+{
+       G_LOCK_DEFINE_STATIC (redirect_uri);
+       const gchar *key_name = "oauth2-google-redirect-uri";
+       gchar *value;
+
+       G_LOCK (redirect_uri);
+
+       value = g_object_get_data (G_OBJECT (service), key_name);
+       if (!value) {
+               const gchar *client_id = eos_google_get_client_id (service, 
source);
+
+               if (client_id) {
+                       GPtrArray *array;
+                       gchar **strv;
+                       gchar *joinstr;
+                       guint ii;
+
+                       strv = g_strsplit (client_id, ".", -1);
+                       array = g_ptr_array_new ();
+
+                       for (ii = 0; strv[ii]; ii++) {
+                               g_ptr_array_insert (array, 0, strv[ii]);
+                       }
+
+                       g_ptr_array_add (array, NULL);
+
+                       joinstr = g_strjoinv (".", (gchar **) array->pdata);
+                       /* Use reverse-DNS of the client ID with the below path 
*/
+                       value = g_strconcat (joinstr, ":/oauth2redirect", NULL);
+
+                       g_ptr_array_free (array, TRUE);
+                       g_strfreev (strv);
+                       g_free (joinstr);
+
+                       g_object_set_data_full (G_OBJECT (service), key_name, 
value, g_free);
+               }
+       }
+
+       G_UNLOCK (redirect_uri);
+
+       return value;
 }
 
 static void
@@ -189,13 +236,13 @@
 
                                params = soup_form_decode (query);
                                if (params) {
-                                       const gchar *response;
+                                       const gchar *code;
 
-                                       response = g_hash_table_lookup (params, 
"response");
-                                       if (response && g_ascii_strncasecmp 
(response, "code=", 5) == 0) {
-                                               *out_authorization_code = 
g_strdup (response + 5);
+                                       code = g_hash_table_lookup (params, 
"code");
+                                       if (code && *code) {
+                                               *out_authorization_code = 
g_strdup (code);
                                                known = TRUE;
-                                       } else if (response && 
g_ascii_strncasecmp (response, "error", 5) == 0) {
+                                       } else if (g_hash_table_lookup (params, 
"error")) {
                                                known = TRUE;
                                        }
 
@@ -223,6 +270,7 @@
        iface->get_client_secret = eos_google_get_client_secret;
        iface->get_authentication_uri = eos_google_get_authentication_uri;
        iface->get_refresh_uri = eos_google_get_refresh_uri;
+       iface->get_redirect_uri = eos_google_get_redirect_uri;
        iface->prepare_authentication_uri_query = 
eos_google_prepare_authentication_uri_query;
        iface->extract_authorization_code = 
eos_google_extract_authorization_code;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/libedataserver/e-webdav-discover.c 
new/evolution-data-server-3.44.2/src/libedataserver/e-webdav-discover.c
--- old/evolution-data-server-3.44.1/src/libedataserver/e-webdav-discover.c     
2022-04-22 07:45:23.000000000 +0200
+++ new/evolution-data-server-3.44.2/src/libedataserver/e-webdav-discover.c     
2022-05-27 07:43:00.000000000 +0200
@@ -45,15 +45,18 @@
 
 static gboolean
 e_webdav_discovery_already_discovered (const gchar *href,
-                                      const GSList *discovered_sources)
+                                      const GSList *discovered_sources,
+                                      guint32 href_supports)
 {
        GSList *link;
 
        for (link = (GSList *) discovered_sources; link; link = g_slist_next 
(link)) {
                EWebDAVDiscoveredSource *discovered = link->data;
 
-               if (discovered && g_strcmp0 (href, discovered->href) == 0)
+               if (discovered && g_strcmp0 (href, discovered->href) == 0) {
+                       discovered->supports |= href_supports;
                        return TRUE;
+               }
        }
 
        return FALSE;
@@ -82,7 +85,8 @@
                                continue;
 
                        if (e_webdav_discovery_already_discovered 
(resource->href,
-                               resource->kind == 
E_WEBDAV_RESOURCE_KIND_ADDRESSBOOK ? wdd->addressbooks : wdd->calendars))
+                               resource->kind == 
E_WEBDAV_RESOURCE_KIND_ADDRESSBOOK ? wdd->addressbooks : wdd->calendars,
+                               resource->supports))
                                continue;
 
                        discovered = g_slice_new0 (EWebDAVDiscoveredSource);
@@ -105,6 +109,45 @@
        }
 }
 
+typedef enum {
+       COVERED_LOOKUP          = 1 << 0,
+       COVERED_ADDRESSBOOK     = 1 << 1,
+       COVERED_CALENDAR        = 1 << 2
+} ECoveredMark;
+
+static void
+e_webdav_discover_mark_covered (GHashTable *covered_hrefs,
+                               const gchar *href,
+                               ECoveredMark mark)
+{
+       gint value;
+
+       if (!covered_hrefs || !href || !*href)
+               return;
+
+       value = GPOINTER_TO_INT (g_hash_table_lookup (covered_hrefs, href));
+
+       if ((value & mark) != mark) {
+               value |= mark;
+               g_hash_table_insert (covered_hrefs, g_strdup (href), 
GINT_TO_POINTER (value));
+       }
+}
+
+static gboolean
+e_webdav_discover_is_covered (GHashTable *covered_hrefs,
+                             const gchar *href,
+                             ECoveredMark mark)
+{
+       gint value;
+
+       if (!covered_hrefs || !href || !*href)
+               return FALSE;
+
+       value = GPOINTER_TO_INT (g_hash_table_lookup (covered_hrefs, href));
+
+       return (value & mark) == mark;
+}
+
 static gboolean
 e_webdav_discover_propfind_uri_sync (EWebDAVSession *webdav,
                                     WebDAVDiscoverData *wdd,
@@ -145,7 +188,7 @@
 
                        full_href = e_webdav_session_ensure_full_uri (webdav, 
request_uri, (const gchar *) home_set_href);
 
-                       if (full_href && *full_href && GPOINTER_TO_INT 
(g_hash_table_contains (wdd->covered_hrefs, full_href)) != 2 &&
+                       if (full_href && *full_href && 
!e_webdav_discover_is_covered (wdd->covered_hrefs, full_href, 
COVERED_ADDRESSBOOK) &&
                            e_webdav_session_list_sync (webdav, full_href, 
E_WEBDAV_DEPTH_THIS_AND_CHILDREN,
                                E_WEBDAV_LIST_ONLY_ADDRESSBOOK | 
E_WEBDAV_LIST_ALL,
                                &resources, wdd->cancellable, &local_error)) {
@@ -154,7 +197,7 @@
                        }
 
                        if (full_href && *full_href)
-                               g_hash_table_insert (wdd->covered_hrefs, 
g_strdup (full_href), GINT_TO_POINTER (2));
+                               e_webdav_discover_mark_covered 
(wdd->covered_hrefs, full_href, COVERED_ADDRESSBOOK);
 
                        if (local_error && wdd->error && !*wdd->error)
                                g_propagate_error (wdd->error, local_error);
@@ -181,7 +224,7 @@
 
                        full_href = e_webdav_session_ensure_full_uri (webdav, 
request_uri, (const gchar *) home_set_href);
 
-                       if (full_href && *full_href && GPOINTER_TO_INT 
(g_hash_table_contains (wdd->covered_hrefs, full_href)) != 2 &&
+                       if (full_href && *full_href && 
!e_webdav_discover_is_covered (wdd->covered_hrefs, full_href, COVERED_CALENDAR) 
&&
                            e_webdav_session_list_sync (webdav, full_href, 
E_WEBDAV_DEPTH_THIS_AND_CHILDREN,
                                E_WEBDAV_LIST_ONLY_CALENDAR | E_WEBDAV_LIST_ALL,
                                &resources, wdd->cancellable, &local_error)) {
@@ -190,7 +233,7 @@
                        }
 
                        if (full_href && *full_href)
-                               g_hash_table_insert (wdd->covered_hrefs, 
g_strdup (full_href), GINT_TO_POINTER (2));
+                               e_webdav_discover_mark_covered 
(wdd->covered_hrefs, full_href, COVERED_CALENDAR);
 
                        if (local_error && wdd->error && !*wdd->error)
                                g_propagate_error (wdd->error, local_error);
@@ -262,10 +305,11 @@
        is_addressbook = e_xml_find_child (node, E_WEBDAV_NS_CARDDAV, 
"addressbook") != NULL;
 
        if (is_calendar || is_addressbook) {
+               gint covered_mark = (is_addressbook ? COVERED_ADDRESSBOOK : 0) 
| (is_calendar ? COVERED_CALENDAR : 0);
                GSList *resources = NULL;
                GError *local_error = NULL;
 
-               if (GPOINTER_TO_INT (g_hash_table_contains (wdd->covered_hrefs, 
href)) != 2 &&
+               if (!e_webdav_discover_is_covered (wdd->covered_hrefs, href, 
covered_mark) &&
                    !g_cancellable_is_cancelled (wdd->cancellable) &&
                    e_webdav_session_list_sync (webdav, href, 
E_WEBDAV_DEPTH_THIS,
                        (is_calendar ? E_WEBDAV_LIST_ONLY_CALENDAR : 0) | 
(is_addressbook ? E_WEBDAV_LIST_ONLY_ADDRESSBOOK : 0) | E_WEBDAV_LIST_ALL,
@@ -274,7 +318,7 @@
                        g_slist_free_full (resources, e_webdav_resource_free);
                }
 
-               g_hash_table_insert (wdd->covered_hrefs, g_strdup (href), 
GINT_TO_POINTER (2));
+               e_webdav_discover_mark_covered (wdd->covered_hrefs, href, 
covered_mark);
 
                if (local_error && wdd->error && !*wdd->error)
                        g_propagate_error (wdd->error, local_error);
@@ -285,7 +329,7 @@
        if (((wdd->only_supports & (~CUSTOM_SUPPORTS_FLAGS)) == 
E_WEBDAV_DISCOVER_SUPPORTS_NONE ||
            (wdd->only_supports & E_WEBDAV_DISCOVER_SUPPORTS_WEBDAV_NOTES) != 
0) &&
            (g_str_has_suffix (href, "/Notes") || g_str_has_suffix (href, 
"/Notes/")) &&
-           !e_webdav_discovery_already_discovered (href, wdd->calendars) &&
+           !e_webdav_discovery_already_discovered (href, wdd->calendars, 0) &&
            e_xml_find_in_hierarchy (prop_node, E_WEBDAV_NS_DAV, 
"resourcetype", E_WEBDAV_NS_DAV, "collection", NULL, NULL)) {
                GSList *resources = NULL;
 
@@ -299,7 +343,7 @@
 
                g_slist_free_full (resources, e_webdav_resource_free);
 
-               g_hash_table_insert (wdd->covered_hrefs, g_strdup (href), 
GINT_TO_POINTER (2));
+               e_webdav_discover_mark_covered (wdd->covered_hrefs, href, 
COVERED_CALENDAR);
        }
 
        return TRUE;
@@ -319,10 +363,10 @@
        g_return_val_if_fail (wdd != NULL, FALSE);
        g_return_val_if_fail (uri && *uri, FALSE);
 
-       if (g_hash_table_contains (wdd->covered_hrefs, uri))
+       if (e_webdav_discover_is_covered (wdd->covered_hrefs, uri, 
COVERED_LOOKUP))
                return TRUE;
 
-       g_hash_table_insert (wdd->covered_hrefs, g_strdup (uri), 
GINT_TO_POINTER (1));
+       e_webdav_discover_mark_covered (wdd->covered_hrefs, uri, 
COVERED_LOOKUP);
 
        xml = e_xml_document_new (E_WEBDAV_NS_DAV, "propfind");
        g_return_val_if_fail (xml != NULL, FALSE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/libedataserver/e-webdav-session.c 
new/evolution-data-server-3.44.2/src/libedataserver/e-webdav-session.c
--- old/evolution-data-server-3.44.1/src/libedataserver/e-webdav-session.c      
2022-04-22 07:45:23.000000000 +0200
+++ new/evolution-data-server-3.44.2/src/libedataserver/e-webdav-session.c      
2022-05-27 07:43:00.000000000 +0200
@@ -3459,57 +3459,62 @@
 }
 
 static guint32
-e_webdav_session_extract_supports (xmlNodePtr prop_node)
+e_webdav_session_extract_supports (xmlNodePtr prop_node,
+                                  EWebDAVResourceKind kind)
 {
-       xmlNodePtr calendar_components;
        guint32 supports = E_WEBDAV_RESOURCE_SUPPORTS_NONE;
 
        g_return_val_if_fail (prop_node != NULL, 
E_WEBDAV_RESOURCE_SUPPORTS_NONE);
 
-       if (e_xml_find_in_hierarchy (prop_node, E_WEBDAV_NS_DAV, 
"resourcetype", E_WEBDAV_NS_CARDDAV, "addressbook", NULL, NULL))
+       if (kind == E_WEBDAV_RESOURCE_KIND_ADDRESSBOOK &&
+           e_xml_find_in_hierarchy (prop_node, E_WEBDAV_NS_DAV, 
"resourcetype", E_WEBDAV_NS_CARDDAV, "addressbook", NULL, NULL))
                supports = supports | E_WEBDAV_RESOURCE_SUPPORTS_CONTACTS;
 
-       calendar_components = e_xml_find_child (prop_node, E_WEBDAV_NS_CALDAV, 
"supported-calendar-component-set");
+       if (kind == E_WEBDAV_RESOURCE_KIND_CALENDAR) {
+               xmlNodePtr calendar_components;
 
-       if (calendar_components) {
-               xmlNodePtr node;
-               gint found_comps = 0;
-
-               for (node = calendar_components->children; node; node = 
xmlNextElementSibling (node)) {
-                       if (e_xml_is_element_name (node, E_WEBDAV_NS_CALDAV, 
"comp")) {
-                               xmlChar *name;
-
-                               found_comps++;
-
-                               name = xmlGetProp (node, (const xmlChar *) 
"name");
-
-                               if (!name)
-                                       continue;
-
-                               if (g_ascii_strcasecmp ((const gchar *) name, 
"VEVENT") == 0)
-                                       supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_EVENTS;
-                               else if (g_ascii_strcasecmp ((const gchar *) 
name, "VJOURNAL") == 0)
-                                       supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_MEMOS;
-                               else if (g_ascii_strcasecmp ((const gchar *) 
name, "VTODO") == 0)
-                                       supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_TASKS;
-                               else if (g_ascii_strcasecmp ((const gchar *) 
name, "VFREEBUSY") == 0)
-                                       supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_FREEBUSY;
-                               else if (g_ascii_strcasecmp ((const gchar *) 
name, "VTIMEZONE") == 0)
-                                       supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_TIMEZONE;
+               calendar_components = e_xml_find_child (prop_node, 
E_WEBDAV_NS_CALDAV, "supported-calendar-component-set");
 
-                               xmlFree (name);
+               if (calendar_components) {
+                       xmlNodePtr node;
+                       gint found_comps = 0;
+
+                       for (node = calendar_components->children; node; node = 
xmlNextElementSibling (node)) {
+                               if (e_xml_is_element_name (node, 
E_WEBDAV_NS_CALDAV, "comp")) {
+                                       xmlChar *name;
+
+                                       found_comps++;
+
+                                       name = xmlGetProp (node, (const xmlChar 
*) "name");
+
+                                       if (!name)
+                                               continue;
+
+                                       if (g_ascii_strcasecmp ((const gchar *) 
name, "VEVENT") == 0)
+                                               supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_EVENTS;
+                                       else if (g_ascii_strcasecmp ((const 
gchar *) name, "VJOURNAL") == 0)
+                                               supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_MEMOS;
+                                       else if (g_ascii_strcasecmp ((const 
gchar *) name, "VTODO") == 0)
+                                               supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_TASKS;
+                                       else if (g_ascii_strcasecmp ((const 
gchar *) name, "VFREEBUSY") == 0)
+                                               supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_FREEBUSY;
+                                       else if (g_ascii_strcasecmp ((const 
gchar *) name, "VTIMEZONE") == 0)
+                                               supports |= 
E_WEBDAV_RESOURCE_SUPPORTS_TIMEZONE;
+
+                                       xmlFree (name);
+                               }
                        }
-               }
 
-               if (!found_comps) {
-                       /* If the property is not present, assume all component
-                        * types are supported.  (RFC 4791, Section 5.2.3) */
-                       supports = supports |
-                               E_WEBDAV_RESOURCE_SUPPORTS_EVENTS |
-                               E_WEBDAV_RESOURCE_SUPPORTS_MEMOS |
-                               E_WEBDAV_RESOURCE_SUPPORTS_TASKS |
-                               E_WEBDAV_RESOURCE_SUPPORTS_FREEBUSY |
-                               E_WEBDAV_RESOURCE_SUPPORTS_TIMEZONE;
+                       if (!found_comps) {
+                               /* If the property is not present, assume all 
component
+                                * types are supported.  (RFC 4791, Section 
5.2.3) */
+                               supports = supports |
+                                       E_WEBDAV_RESOURCE_SUPPORTS_EVENTS |
+                                       E_WEBDAV_RESOURCE_SUPPORTS_MEMOS |
+                                       E_WEBDAV_RESOURCE_SUPPORTS_TASKS |
+                                       E_WEBDAV_RESOURCE_SUPPORTS_FREEBUSY |
+                                       E_WEBDAV_RESOURCE_SUPPORTS_TIMEZONE;
+                       }
                }
        }
 
@@ -3672,7 +3677,7 @@
                        source_href = e_webdav_session_util_maybe_dequote 
(g_strdup ((const gchar *) x_source_href));
                }
 
-               supports = e_webdav_session_extract_supports (prop_node);
+               supports = e_webdav_session_extract_supports (prop_node, kind);
                etag = e_webdav_session_extract_nonempty (prop_node, 
E_WEBDAV_NS_DAV, "getetag", E_WEBDAV_NS_CALENDARSERVER, "getctag");
                display_name = e_webdav_session_extract_nonempty (prop_node, 
E_WEBDAV_NS_DAV, "displayname", NULL, NULL);
                content_type = e_webdav_session_extract_nonempty (prop_node, 
E_WEBDAV_NS_DAV, "getcontenttype", NULL, NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/libedataserverui/e-reminders-widget.c 
new/evolution-data-server-3.44.2/src/libedataserverui/e-reminders-widget.c
--- old/evolution-data-server-3.44.1/src/libedataserverui/e-reminders-widget.c  
2022-04-22 07:45:23.000000000 +0200
+++ new/evolution-data-server-3.44.2/src/libedataserverui/e-reminders-widget.c  
2022-05-27 07:43:00.000000000 +0200
@@ -1547,7 +1547,9 @@
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
        GtkWidget *widget;
-       GtkBox *box;
+       GtkCssProvider *css_provider;
+       GtkFlowBox *flow_box;
+       GError *error = NULL;
 
        /* Chain up to parent's method. */
        G_OBJECT_CLASS (e_reminders_widget_parent_class)->constructed (object);
@@ -1652,27 +1654,44 @@
        reminders_widget_fill_snooze_combo (reminders,
                g_settings_get_int (reminders->priv->settings, 
"notify-last-snooze-minutes"));
 
-       box = GTK_BOX (gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL));
-       g_object_set (G_OBJECT (box),
-               "halign", GTK_ALIGN_END,
-               "hexpand", TRUE,
-               "valign", GTK_ALIGN_CENTER,
-               "vexpand", FALSE,
-               "margin-top", 4,
+       flow_box = GTK_FLOW_BOX (gtk_flow_box_new ());
+       g_object_set (G_OBJECT (flow_box),
+               "homogeneous", FALSE,
+               "selection-mode", GTK_SELECTION_NONE,
+               "column-spacing", 1,
+               "row-spacing", 1,
                NULL);
 
        widget = gtk_label_new ("");
+       gtk_widget_set_margin_start (widget, 8);
 
-       gtk_box_pack_start (box, reminders->priv->snooze_combo, FALSE, FALSE, 
0);
-       gtk_box_pack_start (box, reminders->priv->snooze_button, FALSE, FALSE, 
0);
-       gtk_box_pack_start (box, widget, FALSE, FALSE, 0);
-       gtk_box_pack_start (box, reminders->priv->dismiss_button, FALSE, FALSE, 
0);
-       gtk_box_pack_start (box, reminders->priv->dismiss_all_button, FALSE, 
FALSE, 0);
-
-       gtk_button_box_set_child_non_homogeneous (GTK_BUTTON_BOX (box), 
reminders->priv->snooze_combo, TRUE);
-       gtk_button_box_set_child_non_homogeneous (GTK_BUTTON_BOX (box), widget, 
TRUE);
+       gtk_flow_box_insert (flow_box, reminders->priv->snooze_combo, -1);
+       gtk_flow_box_insert (flow_box, reminders->priv->snooze_button, -1);
+       gtk_flow_box_insert (flow_box, widget, -1);
+       gtk_flow_box_insert (flow_box, reminders->priv->dismiss_button, -1);
+       gtk_flow_box_insert (flow_box, reminders->priv->dismiss_all_button, -1);
+
+       gtk_grid_attach (GTK_GRID (reminders), GTK_WIDGET (flow_box), 0, 1, 1, 
1);
+
+       css_provider = gtk_css_provider_new ();
+
+       if (gtk_css_provider_load_from_data (css_provider, "flowboxchild { 
padding: 0px; }", -1, &error)) {
+               GtkFlowBoxChild *child;
+               guint ii = 0;
+
+               while (child = gtk_flow_box_get_child_at_index (flow_box, ii), 
child) {
+                       gtk_style_context_add_provider (
+                               gtk_widget_get_style_context (GTK_WIDGET 
(child)),
+                                       GTK_STYLE_PROVIDER (css_provider),
+                                       
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+                       ii++;
+               }
+       } else {
+               g_warning ("%s: Failed to parse CSS: %s", G_STRFUNC, error ? 
error->message : "Unknown error");
+       }
 
-       gtk_grid_attach (GTK_GRID (reminders), GTK_WIDGET (box), 0, 1, 1, 1);
+       g_clear_object (&css_provider);
+       g_clear_error (&error);
 
        gtk_widget_show_all (GTK_WIDGET (reminders));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.44.1/src/modules/gnome-online-accounts/module-gnome-online-accounts.c
 
new/evolution-data-server-3.44.2/src/modules/gnome-online-accounts/module-gnome-online-accounts.c
--- 
old/evolution-data-server-3.44.1/src/modules/gnome-online-accounts/module-gnome-online-accounts.c
   2022-04-22 07:45:23.000000000 +0200
+++ 
new/evolution-data-server-3.44.2/src/modules/gnome-online-accounts/module-gnome-online-accounts.c
   2022-05-27 07:43:00.000000000 +0200
@@ -1154,11 +1154,14 @@
 
        e_goa_debug_printf ("Found %d existing sources\n", g_list_length 
(list));
 
+       g_hash_table_remove_all (extension->goa_to_eds);
+
        for (link = list; link != NULL; link = g_list_next (link)) {
                ESource *source;
                ESourceGoa *goa_ext;
                const gchar *account_id;
                const gchar *source_uid;
+               const gchar *existing_source_uid;
                GList *match;
 
                source = E_SOURCE (link->data);
@@ -1173,14 +1176,20 @@
                        continue;
                }
 
-               if (g_hash_table_lookup (extension->goa_to_eds, account_id)) {
-                       e_goa_debug_printf ("Source '%s' references account 
'%s' which is already used by other source\n",
-                               source_uid, account_id);
-
-                       /* There are more ESource-s referencing the same GOA 
account;
-                          delete the later. */
-                       g_queue_push_tail (&trash, source);
-                       continue;
+               existing_source_uid = g_hash_table_lookup 
(extension->goa_to_eds, account_id);
+               if (existing_source_uid) {
+                       if (g_strcmp0 (source_uid, existing_source_uid) == 0) {
+                               e_goa_debug_printf ("Already know the source 
'%s' references account '%s'\n",
+                                       source_uid, account_id);
+                       } else {
+                               e_goa_debug_printf ("Source '%s' references 
account '%s' which is already used by source '%s'\n",
+                                       source_uid, account_id, 
existing_source_uid);
+
+                               /* There are more ESource-s referencing the 
same GOA account;
+                                  delete the later. */
+                               g_queue_push_tail (&trash, source);
+                               continue;
+                       }
                }
 
                /* Verify the GOA account still exists. */

Reply via email to