[packages/evolution-mapi] Rel 2

arekm arekm at pld-linux.org
Sun Aug 23 02:17:24 CEST 2026


commit 49e6ded6dfdf12745e51003aa3834e291680a14f
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Sun Aug 23 02:17:13 2026 +0200

    Rel 2

 evolution-mapi-camel-3.60.patch | 523 ++++++++++++++++++++++++++++++++++++++++
 evolution-mapi-eds-3.60.patch   |  59 +++++
 evolution-mapi-libical4.patch   |  49 ++++
 evolution-mapi.spec             |  15 +-
 4 files changed, 641 insertions(+), 5 deletions(-)
---
diff --git a/evolution-mapi.spec b/evolution-mapi.spec
index c00e626..0ee8dde 100644
--- a/evolution-mapi.spec
+++ b/evolution-mapi.spec
@@ -2,22 +2,24 @@ Summary:	Evolution extension for Exchange MAPI
 Summary(pl.UTF-8):	Rozszerzenie Evolution dla Exchange MAPI
 Name:		evolution-mapi
 Version:	3.56.0
-Release:	1
+Release:	2
 License:	LGPL v2+
 Group:		X11/Applications/Mail
 Source0:	https://download.gnome.org/sources/evolution-mapi/3.56/%{name}-%{version}.tar.xz
 # Source0-md5:	f05922ad90ded7efaf89c020a51fa833
+Patch0:		%{name}-libical4.patch
+Patch1:		%{name}-eds-3.60.patch
+Patch2:		%{name}-camel-3.60.patch
 URL:		https://gitlab.gnome.org/GNOME/evolution/-/wikis/home
 BuildRequires:	cmake >= 3.15
-BuildRequires:	evolution-data-server-devel >= %{version}
-BuildRequires:	evolution-data-server-gtk3-devel >= %{version}
+BuildRequires:	evolution-data-server-devel >= 3.60
+BuildRequires:	evolution-data-server-gtk3-devel >= 3.60
 BuildRequires:	evolution-devel >= %{version}
 BuildRequires:	gettext-tools
 BuildRequires:	glib2-devel >= 1:2.46
 BuildRequires:	gtk+3-devel >= 3.10
-BuildRequires:	gtk-doc >= 1.9
 BuildRequires:	intltool >= 0.35.5
-BuildRequires:	libical-devel
+BuildRequires:	libical-glib-devel
 BuildRequires:	openchange-devel >= 2.3
 BuildRequires:	pkgconfig
 BuildRequires:	rpmbuild(macros) >= 1.605
@@ -43,6 +45,9 @@ MAPI.
 
 %prep
 %setup -q
+%patch -P0 -p1
+%patch -P1 -p1
+%patch -P2 -p1
 
 %build
 %cmake -B build \
diff --git a/evolution-mapi-camel-3.60.patch b/evolution-mapi-camel-3.60.patch
new file mode 100644
index 0000000..c155531
--- /dev/null
+++ b/evolution-mapi-camel-3.60.patch
@@ -0,0 +1,523 @@
+--- evolution-mapi-3.56.0.orig/src/camel/camel-mapi-folder.h	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/camel/camel-mapi-folder.h	2026-08-22 23:18:15.838836893 +0200
+@@ -62,8 +62,6 @@ struct _CamelMapiFolder {
+ 
+ 	mapi_id_t folder_id;
+ 
+-	CamelFolderSearch *search;
+-
+ 	CamelDataCache *cache;
+ 
+ 	/* copied from CamelMapiStoreInfo */
+--- evolution-mapi-3.56.0.orig/src/camel/camel-mapi-folder.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/camel/camel-mapi-folder.c	2026-08-22 23:18:41.319635644 +0200
+@@ -43,14 +43,7 @@
+ #define SUMMARY_FETCH_BATCH_COUNT 150
+ #define d(x)
+ 
+-#define CAMEL_MAPI_FOLDER_LOCK(f, l) \
+-	(g_mutex_lock(&((CamelMapiFolder *)f)->priv->l))
+-#define CAMEL_MAPI_FOLDER_UNLOCK(f, l) \
+-	(g_mutex_unlock(&((CamelMapiFolder *)f)->priv->l))
+-
+ struct _CamelMapiFolderPrivate {
+-	GMutex search_lock;	/* for locking the search object */
+-
+ 	gchar *foreign_username;
+ };
+ 
+@@ -103,44 +96,6 @@ static gboolean		mapi_folder_synchronize
+ 
+ G_DEFINE_TYPE_WITH_PRIVATE (CamelMapiFolder, camel_mapi_folder, CAMEL_TYPE_OFFLINE_FOLDER)
+ 
+-static GPtrArray *
+-mapi_folder_search_by_expression (CamelFolder *folder,
+-				  const gchar *expression,
+-				  GCancellable *cancellable,
+-				  GError **error)
+-{
+-	CamelMapiFolder *mapi_folder = CAMEL_MAPI_FOLDER(folder);
+-	GPtrArray *matches;
+-
+-	CAMEL_MAPI_FOLDER_LOCK(mapi_folder, search_lock);
+-	camel_folder_search_set_folder (mapi_folder->search, folder);
+-	matches = camel_folder_search_search(mapi_folder->search, expression, NULL, cancellable, error);
+-	CAMEL_MAPI_FOLDER_UNLOCK(mapi_folder, search_lock);
+-
+-	return matches;
+-}
+-
+-static GPtrArray *
+-mapi_folder_search_by_uids (CamelFolder *folder,
+-			    const gchar *expression,
+-			    GPtrArray *uids,
+-			    GCancellable *cancellable,
+-			    GError **error)
+-{
+-	GPtrArray *matches;
+-	CamelMapiFolder *mapi_folder = CAMEL_MAPI_FOLDER (folder);
+-
+-	if (uids->len == 0)
+-		return g_ptr_array_new ();
+-
+-	CAMEL_MAPI_FOLDER_LOCK (mapi_folder, search_lock);
+-	camel_folder_search_set_folder (mapi_folder->search, folder);
+-	matches = camel_folder_search_search (mapi_folder->search, expression, uids, cancellable, error);
+-	CAMEL_MAPI_FOLDER_UNLOCK (mapi_folder, search_lock);
+-
+-	return matches;
+-}
+-
+ static void
+ mapi_set_message_id (CamelMessageInfo *mi,
+ 		     const gchar *message_id)
+@@ -811,7 +766,7 @@ camel_mapi_folder_fetch_summary (CamelFo
+ 		camel_folder_summary_prepare_fetch_all (camel_folder_get_folder_summary (folder), NULL);
+ 
+ 		gco.removed_uids = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) camel_pstring_free, NULL);
+-		known_uids = camel_folder_summary_get_array (camel_folder_get_folder_summary (folder));
++		known_uids = camel_folder_summary_dup_uids (camel_folder_get_folder_summary (folder));
+ 		if (known_uids) {
+ 			gint ii;
+ 
+@@ -819,7 +774,7 @@ camel_mapi_folder_fetch_summary (CamelFo
+ 				g_hash_table_insert (gco.removed_uids, (gpointer) camel_pstring_strdup (g_ptr_array_index (known_uids, ii)), GINT_TO_POINTER (1));
+ 			}
+ 
+-			camel_folder_summary_free_array (known_uids);
++			g_ptr_array_unref (known_uids);
+ 		}
+ 	}
+ 
+@@ -973,21 +928,6 @@ end1:
+ 	return success;
+ }
+ 
+-static void
+-mapi_folder_search_free (CamelFolder *folder, GPtrArray *uids)
+-{
+-	CamelMapiFolder *mapi_folder = CAMEL_MAPI_FOLDER(folder);
+-
+-	g_return_if_fail (mapi_folder->search);
+-
+-	CAMEL_MAPI_FOLDER_LOCK(mapi_folder, search_lock);
+-
+-	camel_folder_search_free_result (mapi_folder->search, uids);
+-
+-	CAMEL_MAPI_FOLDER_UNLOCK(mapi_folder, search_lock);
+-
+-}
+-
+ static guint32
+ mapi_folder_get_permanent_flags (CamelFolder *folder)
+ {
+@@ -1040,11 +980,6 @@ mapi_folder_dispose (GObject *object)
+ 		mapi_folder->cache = NULL;
+ 	}
+ 
+-	if (mapi_folder->search) {
+-		g_object_unref (mapi_folder->search);
+-		mapi_folder->search = NULL;
+-	}
+-
+ 	parent_store = camel_folder_get_parent_store (CAMEL_FOLDER (mapi_folder));
+ 	if (parent_store) {
+ 		camel_store_summary_disconnect_folder_summary (
+@@ -1057,17 +992,6 @@ mapi_folder_dispose (GObject *object)
+ }
+ 
+ static void
+-mapi_folder_finalize (GObject *object)
+-{
+-	CamelMapiFolder *mapi_folder = CAMEL_MAPI_FOLDER (object);
+-
+-	g_mutex_clear (&mapi_folder->priv->search_lock);
+-
+-	/* Chain up to parent's finalize() method. */
+-	G_OBJECT_CLASS (camel_mapi_folder_parent_class)->finalize (object);
+-}
+-
+-static void
+ mapi_folder_constructed (GObject *object)
+ {
+ 	CamelNetworkSettings *network_settings;
+@@ -1267,7 +1191,7 @@ mapi_folder_expunge_sync (CamelFolder *f
+ 
+ 			mf = CAMEL_MAPI_FOLDER (opened_folder);
+ 			if (mf && (mf->camel_folder_flags & CAMEL_FOLDER_TYPE_MASK) != CAMEL_FOLDER_TYPE_TRASH) {
+-				if (camel_folder_get_deleted_message_count (opened_folder) > 0)
++				if (camel_folder_summary_get_deleted_count (camel_folder_get_folder_summary (opened_folder)) > 0)
+ 					camel_folder_synchronize_sync (opened_folder, TRUE, cancellable, NULL);
+ 			}
+ 
+@@ -1305,7 +1229,7 @@ mapi_folder_expunge_sync (CamelFolder *f
+ 
+ 	changes = camel_folder_change_info_new ();
+ 	folder_summary = camel_folder_get_folder_summary (folder);
+-	known_uids = camel_folder_summary_get_array (folder_summary);
++	known_uids = camel_folder_summary_dup_uids (folder_summary);
+ 
+ 	/*Collect UIDs of deleted messages.*/
+ 	for (i = 0; known_uids && i < known_uids->len; i++) {
+@@ -1329,7 +1253,7 @@ mapi_folder_expunge_sync (CamelFolder *f
+ 		g_clear_object (&info);
+ 	}
+ 
+-	camel_folder_summary_free_array (known_uids);
++	g_ptr_array_unref (known_uids);
+ 
+ 	deleted_items_uid_head = deleted_items_uid;
+ 
+@@ -1628,7 +1552,7 @@ mapi_folder_synchronize_sync (CamelFolde
+ 	camel_folder_summary_lock (folder_summary);
+ 	camel_folder_summary_prepare_fetch_all (folder_summary, NULL);
+ 
+-	known_uids = camel_folder_summary_get_array (folder_summary);
++	known_uids = camel_folder_summary_dup_uids (folder_summary);
+ 	for (i = 0; known_uids && i < known_uids->len; i++) {
+ 		info = camel_folder_summary_get (folder_summary, g_ptr_array_index (known_uids, i));
+ 
+@@ -1687,7 +1611,7 @@ mapi_folder_synchronize_sync (CamelFolde
+ 		g_clear_object (&info);
+ 	}
+ 
+-	camel_folder_summary_free_array (known_uids);
++	g_ptr_array_unref (known_uids);
+ 	camel_folder_summary_unlock (folder_summary);
+ 
+ 	/*
+@@ -1973,16 +1897,12 @@ camel_mapi_folder_class_init (CamelMapiF
+ 
+ 	object_class = G_OBJECT_CLASS (class);
+ 	object_class->dispose = mapi_folder_dispose;
+-	object_class->finalize = mapi_folder_finalize;
+ 	object_class->constructed = mapi_folder_constructed;
+ 
+ 	folder_class = CAMEL_FOLDER_CLASS (class);
+ 	folder_class->get_permanent_flags = mapi_folder_get_permanent_flags;
+ 	folder_class->rename = mapi_folder_rename;
+-	folder_class->search_by_expression = mapi_folder_search_by_expression;
+ 	folder_class->cmp_uids = mapi_cmp_uids;
+-	folder_class->search_by_uids = mapi_folder_search_by_uids;
+-	folder_class->search_free = mapi_folder_search_free;
+ 	folder_class->append_message_sync = mapi_folder_append_message_sync;
+ 	folder_class->expunge_sync = mapi_folder_expunge_sync;
+ 	folder_class->get_message_sync = mapi_folder_get_message_sync;
+@@ -2002,8 +1922,6 @@ camel_mapi_folder_init (CamelMapiFolder
+ 
+ 	camel_folder_set_flags (folder, CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY);
+ 
+-	g_mutex_init (&mapi_folder->priv->search_lock);
+-
+ 	mapi_folder->need_rescan = TRUE;
+ }
+ 
+@@ -2072,9 +1990,8 @@ camel_mapi_folder_new (CamelStore *store
+ 
+ 	/* set/load persistent state */
+ 	state_file = g_build_filename (folder_dir, short_name, "cmeta", NULL);
+-	camel_object_set_state_filename (CAMEL_OBJECT (folder), state_file);
+-	g_free(state_file);
+-	camel_object_state_read (CAMEL_OBJECT (folder));
++	camel_folder_take_state_filename (folder, g_steal_pointer (&state_file));
++	camel_folder_load_state (folder);
+ 
+ 	state_file = g_build_filename (folder_dir, short_name, NULL);
+ 	mapi_folder->cache = camel_data_cache_new (state_file, error);
+@@ -2120,12 +2037,6 @@ camel_mapi_folder_new (CamelStore *store
+ 		}
+ 	}
+ 
+-	mapi_folder->search = camel_folder_search_new ();
+-	if (!mapi_folder->search) {
+-		g_object_unref (folder);
+-		return NULL;
+-	}
+-
+ 	si = camel_store_summary_path (mapi_store->summary, folder_name);
+ 	if (si) {
+ 		CamelMapiStoreInfo *msi = (CamelMapiStoreInfo *) si;
+--- evolution-mapi-3.56.0.orig/src/camel/camel-mapi-folder-summary.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/camel/camel-mapi-folder-summary.c	2026-08-22 23:19:09.826629781 +0200
+@@ -35,8 +35,8 @@
+ #define CAMEL_MAPI_FOLDER_SUMMARY_VERSION (1)
+ 
+ /*Prototypes*/
+-static CamelFIRecord *mapi_summary_header_save (CamelFolderSummary *, GError **error);
+-static gboolean mapi_summary_header_load (CamelFolderSummary *, CamelFIRecord *fir);
++static gboolean mapi_summary_header_save (CamelFolderSummary *, CamelStoreDBFolderRecord *inout_record, GError **error);
++static gboolean mapi_summary_header_load (CamelFolderSummary *, CamelStoreDBFolderRecord *record);
+ 
+ /*End of Prototypes*/
+ 
+@@ -88,7 +88,7 @@ camel_mapi_folder_summary_new (CamelFold
+ }
+ 
+ static gboolean
+-mapi_summary_header_load (CamelFolderSummary *summary, CamelFIRecord *fir)
++mapi_summary_header_load (CamelFolderSummary *summary, CamelStoreDBFolderRecord *record)
+ {
+ 	CamelMapiFolderSummary *mapi_summary = CAMEL_MAPI_FOLDER_SUMMARY (summary);
+ 	CamelFolderSummaryClass *folder_summary_class;
+@@ -97,10 +97,10 @@ mapi_summary_header_load (CamelFolderSum
+ 	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+ 		camel_mapi_folder_summary_parent_class);
+ 
+-	if (!folder_summary_class->summary_header_load (summary, fir))
++	if (!folder_summary_class->summary_header_load (summary, record))
+ 		return FALSE;
+ 
+-	part = fir->bdata;
++	part = record->bdata;
+ 
+ 	if (part)
+ 		mapi_summary->version = camel_util_bdata_get_number (&part, 0);
+@@ -108,22 +108,19 @@ mapi_summary_header_load (CamelFolderSum
+ 	return TRUE;
+ }
+ 
+-static CamelFIRecord *
+-mapi_summary_header_save (CamelFolderSummary *summary, GError **error)
++static gboolean
++mapi_summary_header_save (CamelFolderSummary *summary, CamelStoreDBFolderRecord *inout_record, GError **error)
+ {
+ 	CamelFolderSummaryClass *folder_summary_class;
+-	struct _CamelFIRecord *fir;
+ 
+ 	folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_mapi_folder_summary_parent_class);
+ 
+-	fir = folder_summary_class->summary_header_save (summary, error);
+-
+-	if (!fir)
+-		return NULL;
++	if (!folder_summary_class->summary_header_save (summary, inout_record, error))
++		return FALSE;
+ 
+-	fir->bdata = g_strdup_printf ("%d", CAMEL_MAPI_FOLDER_SUMMARY_VERSION);
++	inout_record->bdata = g_strdup_printf ("%d", CAMEL_MAPI_FOLDER_SUMMARY_VERSION);
+ 
+-	return fir;
++	return TRUE;
+ }
+ 
+ void
+@@ -136,7 +133,7 @@ mapi_summary_clear (CamelFolderSummary *
+ 	GPtrArray *known_uids;
+ 
+ 	changes = camel_folder_change_info_new ();
+-	known_uids = camel_folder_summary_get_array (summary);
++	known_uids = camel_folder_summary_dup_uids (summary);
+ 	for (i = 0; known_uids && i < known_uids->len; i++) {
+ 		if (!(info = camel_folder_summary_get (summary, g_ptr_array_index (known_uids, i))))
+ 			continue;
+@@ -147,7 +144,7 @@ mapi_summary_clear (CamelFolderSummary *
+ 		g_clear_object (&info);
+ 	}
+ 
+-	camel_folder_summary_free_array (known_uids);
++	g_ptr_array_unref (known_uids);
+ 	camel_folder_summary_clear (summary, NULL);
+ 
+ 	if (camel_folder_change_info_changed (changes))
+--- evolution-mapi-3.56.0.orig/src/camel/camel-mapi-message-info.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/camel/camel-mapi-message-info.c	2026-08-22 23:19:27.883164488 +0200
+@@ -70,7 +70,7 @@ mapi_message_info_clone (const CamelMess
+ 
+ static gboolean
+ mapi_message_info_load (CamelMessageInfo *mi,
+-			const CamelMIRecord *record,
++			const CamelStoreDBMessageRecord *record,
+ 			/* const */ gchar **bdata_ptr)
+ {
+ 	CamelMapiMessageInfo *mmi;
+@@ -93,7 +93,7 @@ mapi_message_info_load (CamelMessageInfo
+ 
+ static gboolean
+ mapi_message_info_save (const CamelMessageInfo *mi,
+-			CamelMIRecord *record,
++			CamelStoreDBMessageRecord *record,
+ 			GString *bdata_str)
+ {
+ 	CamelMapiMessageInfo *mmi;
+--- evolution-mapi-3.56.0.orig/src/camel/camel-mapi-provider.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/camel/camel-mapi-provider.c	2026-08-22 23:20:17.924083268 +0200
+@@ -32,11 +32,6 @@
+ #include "camel-mapi-store.h"
+ #include "camel-mapi-transport.h"
+ 
+-static void add_hash (guint *, gchar *);
+-static guint mapi_url_hash (gconstpointer);
+-static gint check_equal (gchar *, gchar *);
+-static gint mapi_url_equal (gconstpointer, gconstpointer);
+-
+ static CamelProviderConfEntry mapi_conf_entries[] = {
+ 	{ CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL,
+ 	  N_("Checking for new mail") },
+@@ -89,24 +84,12 @@ CamelServiceAuthType camel_mapi_password
+ 	TRUE
+ };
+ 
+-static gint
+-mapi_auto_detect_cb(CamelURL *url, GHashTable **auto_detected, GError **error)
+-{
+-	*auto_detected = g_hash_table_new (g_str_hash, g_str_equal);
+-	g_hash_table_insert (*auto_detected, g_strdup ("poa"), g_strdup (url->host));
+-
+-	return 0;
+-}
+-
+ void
+ camel_provider_module_init(void)
+ {
+ 	mapi_provider.name = "Exchange MAPI";
+ 	mapi_provider.translation_domain = (gchar *) GETTEXT_PACKAGE;
+-	mapi_provider.auto_detect = mapi_auto_detect_cb;
+ 	mapi_provider.authtypes = g_list_prepend (mapi_provider.authtypes, &camel_mapi_password_authtype);
+-	mapi_provider.url_hash = mapi_url_hash;
+-	mapi_provider.url_equal = mapi_url_equal;
+ 	mapi_provider.object_types[CAMEL_PROVIDER_STORE] = camel_mapi_store_get_type();
+ 	mapi_provider.object_types[CAMEL_PROVIDER_TRANSPORT] = camel_mapi_transport_get_type();
+ 
+@@ -118,55 +101,3 @@ camel_provider_module_init(void)
+ 
+ 	camel_provider_register (&mapi_provider);
+ }
+-
+-static void
+-add_hash(guint *hash, gchar *s)
+-{
+-	if (s) {
+-		*hash ^= g_str_hash(s);
+-	}
+-}
+-
+-static guint
+-mapi_url_hash(gconstpointer key)
+-{
+-	const CamelURL	*u = (CamelURL *)key;
+-	guint		hash = 0;
+-
+-	add_hash (&hash, u->user);
+-	add_hash (&hash, u->authmech);
+-	add_hash (&hash, u->host);
+-	hash ^= u->port;
+-
+-	return hash;
+-}
+-
+-static gint
+-check_equal(gchar *s1, gchar *s2)
+-{
+-	if (s1 == NULL) {
+-		if (s2 == NULL) {
+-			return TRUE;
+-		} else {
+-			return FALSE;
+-		}
+-	}
+-	if (s2 == NULL) {
+-		return FALSE;
+-	}
+-
+-	return strcmp (s1, s2) == 0;
+-}
+-
+-static gint
+-mapi_url_equal (gconstpointer a, gconstpointer b)
+-{
+-	const CamelURL	*u1 = a;
+-	const CamelURL	*u2 = b;
+-
+-	return check_equal (u1->protocol, u2->protocol)
+-		&& check_equal (u1->user, u2->user)
+-		&& check_equal (u1->authmech, u2->authmech)
+-		&& check_equal (u1->host, u2->host)
+-		&& u1->port == u2->port;
+-}
+--- evolution-mapi-3.56.0.orig/src/camel/camel-mapi-store.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/camel/camel-mapi-store.c	2026-08-22 23:18:50.291519360 +0200
+@@ -518,7 +518,7 @@ mapi_folders_sync (CamelMapiStore *store
+ 		    (msi->mapi_folder_flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED) == 0))
+ 			g_hash_table_insert (old_cache_folders, g_strdup (camel_store_info_get_path ((CamelStoreInfo *) msi)), GINT_TO_POINTER (1));
+ 	}
+-	camel_store_summary_array_free (store->summary, array);
++	g_ptr_array_unref (array);
+ 
+ 	subscription_list = (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST);
+ 	if (subscription_list) {
+@@ -846,7 +846,7 @@ mapi_get_folder_info_offline (CamelStore
+ 		}
+ 	}
+ 
+-	camel_store_summary_array_free (mapi_store->summary, array);
++	g_ptr_array_unref (array);
+ 
+ 	if (!subscription_list && !*top) {
+ 		if (has_public_folders) {
+@@ -970,7 +970,7 @@ mapi_rename_folder_infos (CamelMapiStore
+ 		}
+ 	}
+ 
+-	camel_store_summary_array_free (mapi_store->summary, array);
++	g_ptr_array_unref (array);
+ }
+ 
+ static void
+@@ -2049,7 +2049,7 @@ mapi_store_unsubscribe_subfolders (Camel
+ 			FALSE, cancellable, error);
+ 	}
+ 
+-	camel_store_summary_array_free (mapi_store->summary, array);
++	g_ptr_array_unref (array);
+ 	g_slist_free (subfolders);
+ 
+ 	return res;
+@@ -2956,7 +2956,7 @@ mapi_store_update_foreign_subfolders_thr
+ 		}
+ 	}
+ 
+-	camel_store_summary_array_free (mapi_store->summary, array);
++	g_ptr_array_unref (array);
+ 	g_hash_table_destroy (processed_fids);
+ 	g_object_unref (connection);
+ }
+@@ -3043,7 +3043,7 @@ mapi_authenticate_sync (CamelService *se
+ 			}
+ 		}
+ 
+-		camel_store_summary_array_free (store->summary, array);
++		g_ptr_array_unref (array);
+ 	} else if (!krb_error && (
+ 		   g_error_matches (mapi_error, E_MAPI_ERROR, MAPI_E_LOGON_FAILED) ||
+ 		   g_error_matches (mapi_error, E_MAPI_ERROR, ecRpcFailed))) {
+@@ -3234,7 +3234,7 @@ mapi_folders_update_hash_tables_from_cac
+ 		g_free (pid);
+ 	}
+ 
+-	camel_store_summary_array_free (store->summary, array);
++	g_ptr_array_unref (array);
+ }
+ 
+ /* static const gchar * */
+--- evolution-mapi-3.56.0.orig/src/camel/camel-mapi-store-summary.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/camel/camel-mapi-store-summary.c	2026-08-22 23:18:50.291855753 +0200
+@@ -285,7 +285,7 @@ camel_mapi_store_summary_get_folder_id (
+ 		}
+ 	}
+ 
+-	camel_store_summary_array_free (s, array);
++	g_ptr_array_unref (array);
+ 
+ 	return adept;
+ }
+--- evolution-mapi-3.56.0.orig/src/configuration/e-mapi-subscribe-foreign-folder.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/configuration/e-mapi-subscribe-foreign-folder.c	2026-08-22 23:18:57.909262132 +0200
+@@ -106,7 +106,7 @@ add_foreign_folder_to_camel (CamelMapiSt
+ 		}
+ 	}
+ 
+-	camel_store_summary_array_free (mapi_store->summary, array);
++	g_ptr_array_unref (array);
+ 
+ 	if (res) {
+ 		gchar *path;
diff --git a/evolution-mapi-eds-3.60.patch b/evolution-mapi-eds-3.60.patch
new file mode 100644
index 0000000..0273949
--- /dev/null
+++ b/evolution-mapi-eds-3.60.patch
@@ -0,0 +1,59 @@
+--- evolution-mapi-3.56.0.orig/src/libexchangemapi/e-mapi-book-utils.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/libexchangemapi/e-mapi-book-utils.c	2026-08-22 23:14:04.475173291 +0200
+@@ -480,7 +480,7 @@ e_mapi_book_utils_contact_to_object (ECo
+ 			member_values = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ 			member_ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ 
+-			local = e_contact_get_attributes (old_contact, E_CONTACT_EMAIL);
++			local = e_vcard_get_attributes_by_name (E_VCARD (old_contact), e_contact_vcard_attribute (E_CONTACT_EMAIL));
+ 			for (l = local; l; l = l->next) {
+ 				EVCardAttribute *attr = l->data;
+ 				GList *param;
+@@ -499,7 +499,7 @@ e_mapi_book_utils_contact_to_object (ECo
+ 				}
+ 			}
+ 
+-			g_list_free_full (local, (GDestroyNotify) e_vcard_attribute_free);
++			g_list_free (local);
+ 		}
+ 
+ 		set_value (PidTagMessageClass, IPM_DISTLIST);
+@@ -510,7 +510,7 @@ e_mapi_book_utils_contact_to_object (ECo
+ 		set_con_value (PidTagDisplayName, E_CONTACT_FILE_AS);
+ 		set_con_value (PidTagNormalizedSubject, E_CONTACT_FILE_AS);
+ 
+-		local = e_contact_get_attributes (contact, E_CONTACT_EMAIL);
++		local = e_vcard_get_attributes_by_name (E_VCARD (contact), e_contact_vcard_attribute (E_CONTACT_EMAIL));
+ 		if (member_ids)
+ 			local = g_list_sort_with_data (local, cmp_member_id, member_ids);
+ 
+@@ -564,7 +564,6 @@ e_mapi_book_utils_contact_to_object (ECo
+ 			g_hash_table_destroy (member_values);
+ 		if (member_ids)
+ 			g_hash_table_destroy (member_ids);
+-		g_list_foreach (local, (GFunc)e_vcard_attribute_free, NULL);
+ 		g_list_free (local);
+ 
+ 		set_value (PidLidDistributionListOneOffMembers, oneoff_members);
+--- evolution-mapi-3.56.0.orig/src/libexchangemapi/e-mapi-mail-utils.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/libexchangemapi/e-mapi-mail-utils.c	2026-08-22 23:14:09.303067003 +0200
+@@ -565,7 +565,7 @@ classify_attachments (EMapiConnection *c
+ 						if (!e_contact_get_const (contact, E_CONTACT_UID))
+ 							e_contact_set (contact, E_CONTACT_UID, "");
+ 
+-						str = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
++						str = e_vcard_convert_to_string (E_VCARD (contact), E_VCARD_VERSION_30);
+ 						if (str) {
+ 							camel_mime_part_set_content (part, str, strlen (str), "text/x-vcard");
+ 
+--- evolution-mapi-3.56.0.orig/src/addressbook/e-book-backend-mapi.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/addressbook/e-book-backend-mapi.c	2026-08-22 23:14:39.664046528 +0200
+@@ -573,7 +573,7 @@ ebb_mapi_preload_infos_sync (EBookBacken
+ 					EBookMetaBackendInfo *nfo = g_hash_table_lookup (infos, e_contact_get_const (contact, E_CONTACT_UID));
+ 
+ 					if (nfo && !nfo->object)
+-						nfo->object = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
++						nfo->object = e_vcard_convert_to_string (E_VCARD (contact), E_VCARD_VERSION_30);
+ 				}
+ 			}
+ 		}
diff --git a/evolution-mapi-libical4.patch b/evolution-mapi-libical4.patch
new file mode 100644
index 0000000..deaca94
--- /dev/null
+++ b/evolution-mapi-libical4.patch
@@ -0,0 +1,49 @@
+--- evolution-mapi-3.56.0.orig/src/libexchangemapi/e-mapi-cal-utils.c	2025-03-14 08:30:39.000000000 +0100
++++ evolution-mapi-3.56.0/src/libexchangemapi/e-mapi-cal-utils.c	2026-08-22 23:13:50.890486900 +0200
+@@ -168,7 +168,7 @@ get_prop_from_taskstatus (ICalPropertySt
+ 	}
+ }
+ 
+-static ICalProperty_Class
++static ICalPropertyClassenum
+ get_class_from_prop (uint32_t prop)
+ {
+ 	/* FIXME: is this mapping correct ? */
+@@ -185,7 +185,7 @@ get_class_from_prop (uint32_t prop)
+ }
+ 
+ static uint32_t
+-get_prop_from_class (ICalProperty_Class classif)
++get_prop_from_class (ICalPropertyClassenum classif)
+ {
+ 	/* FIXME: is this mapping correct ? */
+ 	switch (classif) {
+@@ -1247,7 +1247,7 @@ e_mapi_cal_util_object_to_comp (EMapiCon
+ 
+ 				itt1 = i_cal_time_new_from_timet_with_zone (displaytime.tv_sec, 0, NULL);
+ 				itt2 = i_cal_time_new_from_timet_with_zone (start.tv_sec, 0, NULL);
+-				duration = i_cal_time_subtract (itt1, itt2);
++				duration = i_cal_duration_from_times (itt1, itt2);
+ 				g_clear_object (&itt1);
+ 				g_clear_object (&itt2);
+ 
+@@ -1851,7 +1851,7 @@ e_mapi_cal_utils_comp_to_object (EMapiCo
+ 			trigger = e_cal_component_alarm_get_trigger (alarm);
+ 			switch (e_cal_component_alarm_trigger_get_kind (trigger)) {
+ 			case E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_START:
+-				dur_int = (i_cal_duration_as_int (e_cal_component_alarm_trigger_get_duration (trigger))) / SECS_IN_MINUTE;
++				dur_int = (i_cal_duration_as_seconds (e_cal_component_alarm_trigger_get_duration (trigger))) / SECS_IN_MINUTE;
+ 				/* we cannot set an alarm to popup after the start of an appointment on Exchange */
+ 				flag32 = (dur_int < 0) ? -(dur_int) : 0;
+ 				break;
+@@ -2002,8 +2002,8 @@ e_mapi_cal_utils_comp_to_object (EMapiCo
+ 		}
+ 
+ 		/* Duration */
+-		duration = i_cal_time_subtract (dtend, dtstart);
+-		flag32 = i_cal_duration_as_int (duration);
++		duration = i_cal_duration_from_times (dtend, dtstart);
++		flag32 = i_cal_duration_as_seconds (duration);
+ 		flag32 /= MINUTES_IN_HOUR;
+ 		set_value (PidLidAppointmentDuration, &flag32);
+ 		g_clear_object (&duration);
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/evolution-mapi.git/commitdiff/49e6ded6dfdf12745e51003aa3834e291680a14f



More information about the pld-cvs-commit mailing list