[evolution-mapi] Recognize Replied and Forwarded mail messages



commit d6f3bde4f5a7d856833df0448bb6a494189406ef
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jan 24 15:35:32 2012 +0100

    Recognize Replied and Forwarded mail messages

 src/camel/camel-mapi-folder.c           |   22 ++++++++++++++++++----
 src/libexchangemapi/e-mapi-connection.c |    5 +++--
 src/libexchangemapi/e-mapi-mail-utils.c |    9 +++++++++
 3 files changed, 30 insertions(+), 6 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index 0eaa248..5dbe644 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -378,7 +378,7 @@ gather_object_offline_cb (EMapiConnection *conn,
 	if (msg) {
 		gchar *uid_str;
 		const mapi_id_t *pmid;
-		const uint32_t *pmsg_flags;
+		const uint32_t *pmsg_flags, *picon_index;
 		const struct FILETIME *last_modified;
 		uint32_t msg_flags;
 		CamelMessageInfo *info;
@@ -387,6 +387,7 @@ gather_object_offline_cb (EMapiConnection *conn,
 		pmid = e_mapi_util_find_array_propval (&object->properties, PR_MID);
 		pmsg_flags = e_mapi_util_find_array_propval (&object->properties, PR_MESSAGE_FLAGS);
 		last_modified = e_mapi_util_find_array_propval (&object->properties, PR_LAST_MODIFICATION_TIME);
+		picon_index = e_mapi_util_find_array_propval (&object->properties, PidTagIconIndex);
 
 		if (!pmid) {
 			g_debug ("%s: Received message [%d/%d] without PR_MID", G_STRFUNC, obj_index, obj_total);
@@ -412,7 +413,7 @@ gather_object_offline_cb (EMapiConnection *conn,
 		info = camel_folder_summary_info_new_from_message (gos->folder->summary, msg, NULL);
 		if (info) {
 			CamelMapiMessageInfo *minfo = (CamelMapiMessageInfo *) info;
-			guint32 flags = 0, mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_ATTACHMENTS;
+			guint32 flags = 0, mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_ATTACHMENTS | CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_FORWARDED;
 
 			minfo->info.uid = camel_pstring_strdup (uid_str);
 
@@ -426,6 +427,12 @@ gather_object_offline_cb (EMapiConnection *conn,
 				flags |= CAMEL_MESSAGE_SEEN;
 			if ((msg_flags & MSGFLAG_HASATTACH) != 0)
 				flags |= CAMEL_MESSAGE_ATTACHMENTS;
+			if (picon_index) {
+				if (*picon_index == 0x105)
+					flags |= CAMEL_MESSAGE_ANSWERED;
+				if (*picon_index == 0x106)
+					flags |= CAMEL_MESSAGE_FORWARDED;
+			}
 
 			if ((camel_message_info_flags (info) & mask) != flags) {
 				if (is_new)
@@ -480,7 +487,7 @@ gather_object_summary_cb (EMapiConnection *conn,
 	struct GatherObjectSummaryData *gos = user_data;
 	gchar *uid_str;
 	const mapi_id_t *pmid;
-	const uint32_t *pmsg_flags;
+	const uint32_t *pmsg_flags, *picon_index;
 	const struct FILETIME *last_modified;
 	const gchar *transport_headers;
 	uint32_t msg_flags;
@@ -495,6 +502,7 @@ gather_object_summary_cb (EMapiConnection *conn,
 	pmsg_flags = e_mapi_util_find_array_propval (&object->properties, PR_MESSAGE_FLAGS);
 	last_modified = e_mapi_util_find_array_propval (&object->properties, PR_LAST_MODIFICATION_TIME);
 	transport_headers = e_mapi_util_find_array_propval (&object->properties, PR_TRANSPORT_MESSAGE_HEADERS_UNICODE);
+	picon_index = e_mapi_util_find_array_propval (&object->properties, PidTagIconIndex);
 
 	if (!pmid) {
 		g_debug ("%s: Received message [%d/%d] without PR_MID", G_STRFUNC, obj_index, obj_total);
@@ -639,7 +647,7 @@ gather_object_summary_cb (EMapiConnection *conn,
 
 	if (info) {
 		CamelMapiMessageInfo *minfo = (CamelMapiMessageInfo *) info;
-		guint32 flags = 0, mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_ATTACHMENTS;
+		guint32 flags = 0, mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_ATTACHMENTS | CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_FORWARDED;
 
 		if (last_modified) {
 			minfo->last_modified = e_mapi_util_filetime_to_time_t (last_modified);
@@ -651,6 +659,12 @@ gather_object_summary_cb (EMapiConnection *conn,
 			flags |= CAMEL_MESSAGE_SEEN;
 		if ((msg_flags & MSGFLAG_HASATTACH) != 0)
 			flags |= CAMEL_MESSAGE_ATTACHMENTS;
+		if (picon_index) {
+			if (*picon_index == 0x105)
+				flags |= CAMEL_MESSAGE_ANSWERED;
+			if (*picon_index == 0x106)
+				flags |= CAMEL_MESSAGE_FORWARDED;
+		}
 
 		if ((camel_message_info_flags (info) & mask) != flags) {
 			if (is_new)
diff --git a/src/libexchangemapi/e-mapi-connection.c b/src/libexchangemapi/e-mapi-connection.c
index 39a3dae..033d93c 100644
--- a/src/libexchangemapi/e-mapi-connection.c
+++ b/src/libexchangemapi/e-mapi-connection.c
@@ -2835,13 +2835,14 @@ e_mapi_connection_transfer_summary (EMapiConnection *conn,
 				goto cleanup;
 			}
 
-			tags = set_SPropTagArray (mem_ctx, 6,
+			tags = set_SPropTagArray (mem_ctx, 7,
 				PR_FID,
 				PR_MID,
 				PR_MESSAGE_FLAGS,
 				PR_LAST_MODIFICATION_TIME,
 				PR_MESSAGE_CLASS,
-				PR_TRANSPORT_MESSAGE_HEADERS_UNICODE);
+				PR_TRANSPORT_MESSAGE_HEADERS_UNICODE,
+				PidTagIconIndex);
 
 			ms = GetProps (&obj_message, MAPI_PROPS_SKIP_NAMEDID_CHECK | MAPI_UNICODE, tags, &lpProps, &prop_count);
 			if (ms == MAPI_E_SUCCESS) {
diff --git a/src/libexchangemapi/e-mapi-mail-utils.c b/src/libexchangemapi/e-mapi-mail-utils.c
index 3dec2cc..e42caa4 100644
--- a/src/libexchangemapi/e-mapi-mail-utils.c
+++ b/src/libexchangemapi/e-mapi-mail-utils.c
@@ -1397,6 +1397,15 @@ e_mapi_mail_utils_message_to_object (struct _CamelMimeMessage *message,
 	set_value (PidTagInternetCodepage, &ui32);
 
 	if ((create_flags & E_MAPI_CREATE_FLAG_SUBMIT) == 0) {
+		if ((message_camel_flags & CAMEL_MESSAGE_ANSWERED) != 0 ||
+		    (message_camel_flags & CAMEL_MESSAGE_ANSWERED_ALL) != 0) {
+			ui32 = 0x105;
+			set_value (PidTagIconIndex, &ui32);
+		} else if ((message_camel_flags & CAMEL_MESSAGE_FORWARDED) != 0) {
+			ui32 = 0x106;
+			set_value (PidTagIconIndex, &ui32);
+		}
+
 		ui32 = 0;
 		if (message_camel_flags & CAMEL_MESSAGE_SEEN)
 			ui32 |= MSGFLAG_READ;



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