[evolution-mapi] Bug #666952 - Wrong date in message list



commit ad228fd205c32288729c530bcb42ff86451092e9
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jan 3 16:22:44 2012 +0100

    Bug #666952 - Wrong date in message list

 src/camel/camel-mapi-folder.c           |   25 +++++++++++++++++++++----
 src/libexchangemapi/e-mapi-mail-utils.c |   23 +++++++++++++++++------
 src/libexchangemapi/e-mapi-utils.c      |    2 +-
 3 files changed, 39 insertions(+), 11 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index c993b4f..543db40 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -492,6 +492,8 @@ gather_object_summary_cb (EMapiConnection *conn,
 
 	info = camel_folder_summary_get (gos->folder->summary, uid_str);
 	if (!info) {
+		CamelMapiMessageInfo *minfo;
+
 		is_new = TRUE;
 
 		if (transport_headers && *transport_headers) {
@@ -519,15 +521,16 @@ gather_object_summary_cb (EMapiConnection *conn,
 		}
 
 		if (!info) {
-			CamelMapiMessageInfo *minfo;
 			const gchar *subject, *message_id, *references, *in_reply_to, *display_to, *display_cc;
-			const struct FILETIME *delivery_time;
+			const struct FILETIME *delivery_time, *submit_time;
 			const uint32_t *msg_size;
+			gint offset = 0;
 			gchar *formatted_addr, *from_name, *from_email;
 			CamelAddress *to_addr, *cc_addr, *bcc_addr;
 
 			subject = e_mapi_util_find_array_propval (&object->properties, PR_SUBJECT_UNICODE);
-			delivery_time = e_mapi_util_find_array_propval (&object->properties, PR_MESSAGE_DELIVERY_TIME);
+			delivery_time = e_mapi_util_find_array_propval (&object->properties, PidTagMessageDeliveryTime);
+			submit_time = e_mapi_util_find_array_propval (&object->properties, PidTagClientSubmitTime);
 			msg_size = e_mapi_util_find_array_propval (&object->properties, PR_MESSAGE_SIZE);
 			message_id = e_mapi_util_find_array_propval (&object->properties, PR_INTERNET_MESSAGE_ID);
 			references = e_mapi_util_find_array_propval (&object->properties, PR_INTERNET_REFERENCES);
@@ -540,9 +543,15 @@ gather_object_summary_cb (EMapiConnection *conn,
 
 			minfo->info.uid = camel_pstring_strdup (uid_str);
 			minfo->info.subject = camel_pstring_strdup (subject);
-			minfo->info.date_sent = minfo->info.date_received = e_mapi_util_filetime_to_time_t (delivery_time);
+			minfo->info.date_sent = e_mapi_util_filetime_to_time_t (submit_time);
+			minfo->info.date_received = e_mapi_util_filetime_to_time_t (delivery_time);
 			minfo->info.size = msg_size ? *msg_size : 0;
 
+			if (minfo->info.date_sent != 0)
+				minfo->info.date_sent = camel_header_decode_date (ctime (&minfo->info.date_sent), &offset);
+			if (minfo->info.date_received != 0)
+				minfo->info.date_received = camel_header_decode_date (ctime (&minfo->info.date_received), &offset);
+
 			/* Threading related properties */
 			mapi_set_message_id (minfo, message_id);
 			if (references || in_reply_to)
@@ -595,6 +604,14 @@ gather_object_summary_cb (EMapiConnection *conn,
 			g_free (from_name);
 			g_free (from_email);
 		}
+
+		minfo = (CamelMapiMessageInfo *) info;
+		if (minfo) {
+			if (minfo->info.date_sent == 0)
+				minfo->info.date_sent = minfo->info.date_received;
+			if (minfo->info.date_received == 0)
+				minfo->info.date_received = minfo->info.date_sent;
+		}
 	}
 
 	if (info) {
diff --git a/src/libexchangemapi/e-mapi-mail-utils.c b/src/libexchangemapi/e-mapi-mail-utils.c
index 6e9b016..1bafca3 100644
--- a/src/libexchangemapi/e-mapi-mail-utils.c
+++ b/src/libexchangemapi/e-mapi-mail-utils.c
@@ -660,7 +660,7 @@ e_mapi_mail_utils_object_to_message (EMapiConnection *conn, /* const */ EMapiObj
 		g_object_unref (part);
 	} else {
 		CamelInternetAddress *to_addr, *cc_addr, *bcc_addr;
-		const struct FILETIME *delivery_time;
+		const struct FILETIME *msg_date;
 		gchar *name, *email;
 
 		to_addr = camel_internet_address_new ();
@@ -677,13 +677,15 @@ e_mapi_mail_utils_object_to_message (EMapiConnection *conn, /* const */ EMapiObj
 		g_object_unref (cc_addr);
 		g_object_unref (bcc_addr);
 
-		delivery_time = e_mapi_util_find_array_propval (&object->properties, PidTagMessageDeliveryTime);
-		if (delivery_time) {
-			time_t received_time, actual_time;
+		msg_date = e_mapi_util_find_array_propval (&object->properties, PidTagClientSubmitTime);
+		if (!msg_date)
+			msg_date = e_mapi_util_find_array_propval (&object->properties, PidTagMessageDeliveryTime);
+		if (msg_date) {
+			time_t msg_date_t, actual_time;
 			gint offset = 0;
 
-			received_time = e_mapi_util_filetime_to_time_t (delivery_time);
-			actual_time = camel_header_decode_date (ctime (&received_time), &offset);
+			msg_date_t = e_mapi_util_filetime_to_time_t (msg_date);
+			actual_time = camel_header_decode_date (ctime (&msg_date_t), &offset);
 			camel_mime_message_set_date (msg, actual_time, offset);
 		}
 
@@ -1369,6 +1371,15 @@ e_mapi_mail_utils_message_to_object (struct _CamelMimeMessage *message,
 
 			e_mapi_util_time_t_to_filetime (msg_time, &msg_date);
 
+			set_value (PidTagClientSubmitTime, &msg_date);
+		}
+
+		msg_time = camel_mime_message_get_date_received (message, &msg_time_offset);
+		if (msg_time != 0) {
+			struct FILETIME msg_date = { 0 };
+
+			e_mapi_util_time_t_to_filetime (msg_time, &msg_date);
+
 			set_value (PidTagMessageDeliveryTime, &msg_date);
 		}
 
diff --git a/src/libexchangemapi/e-mapi-utils.c b/src/libexchangemapi/e-mapi-utils.c
index ed99c18..d7b075f 100644
--- a/src/libexchangemapi/e-mapi-utils.c
+++ b/src/libexchangemapi/e-mapi-utils.c
@@ -874,7 +874,7 @@ e_mapi_util_filetime_to_time_t (const struct FILETIME *filetime)
 	NTTIME nt;
 
 	if (!filetime)
-		return (time_t) -1;
+		return (time_t) 0;
 
 	nt = filetime->dwHighDateTime;
 	nt = nt << 32;



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