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 <[email protected]>
+
+- 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. */