[evolution-mapi/gnome-3-2] Bug #666952 - Wrong date in message list



commit b76de11d0ca47211b9cd46fee1cfff29885e4d61
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jan 3 16:23:28 2012 +0100

    Bug #666952 - Wrong date in message list

 src/camel/camel-mapi-folder.c                  |   21 +++++++++++++-
 src/libexchangemapi/exchange-mapi-mail-utils.c |   34 ++++++++++++++++++++---
 src/libexchangemapi/exchange-mapi-utils.c      |    2 +-
 3 files changed, 49 insertions(+), 8 deletions(-)
---
diff --git a/src/camel/camel-mapi-folder.c b/src/camel/camel-mapi-folder.c
index d5bd1d9..a57d340 100644
--- a/src/camel/camel-mapi-folder.c
+++ b/src/camel/camel-mapi-folder.c
@@ -150,7 +150,7 @@ fetch_items_summary_cb (FetchItemsCallbackData *item_data, gpointer data)
 	GSList **slist = &(fi_data->items_list);
 
 	long *flags = NULL;
-	struct FILETIME *delivery_date = NULL;
+	struct FILETIME *delivery_date = NULL, *submit_time = NULL;
 	struct FILETIME *last_modification_time = NULL;
 	struct timeval item_modification_time = { 0 };
 	struct timeval fi_data_mod_time = { 0 };
@@ -179,6 +179,9 @@ fetch_items_summary_cb (FetchItemsCallbackData *item_data, gpointer data)
 		case PR_MESSAGE_DELIVERY_TIME:
 			delivery_date = (struct FILETIME *) prop_data;
 			break;
+		case PidTagClientSubmitTime:
+			submit_time = (struct FILETIME *) prop_data;
+			break;
 		case PR_LAST_MODIFICATION_TIME:
 			last_modification_time = (struct FILETIME *) prop_data;
 			break;
@@ -194,6 +197,13 @@ fetch_items_summary_cb (FetchItemsCallbackData *item_data, gpointer data)
 
 	if (delivery_date) {
 		item->header.recieved_time = exchange_mapi_util_filetime_to_time_t (delivery_date);
+	} else {
+		item->header.recieved_time = 0;
+	}
+	if (submit_time) {
+		item->header.send_time = exchange_mapi_util_filetime_to_time_t (submit_time);
+	} else {
+		item->header.send_time = 0;
 	}
 
 	if (last_modification_time) {
@@ -386,9 +396,15 @@ mapi_update_cache (CamelFolder *folder, GSList *list, CamelFolderChangeInfo **ch
 
 			mi->info.uid = exchange_mapi_util_mapi_ids_to_uid(item->fid, item->mid);
 			mi->info.subject = camel_pstring_strdup(item->header.subject);
-			mi->info.date_sent = mi->info.date_received = item->header.recieved_time;
+			mi->info.date_sent = item->header.send_time;
+			mi->info.date_received = item->header.recieved_time;
 			mi->info.size = (guint32) item->header.size;
 
+			if (mi->info.date_sent == 0)
+				mi->info.date_sent = mi->info.date_received;
+			if (mi->info.date_received == 0)
+				mi->info.date_received = mi->info.date_sent;
+
 			/*Threading related properties*/
 			mapi_set_message_id (mi, item->header.message_id);
 			if (item->header.references || item->header.in_reply_to)
@@ -701,6 +717,7 @@ mapi_camel_get_summary_list (ExchangeMapiConnection *conn, mapi_id_t fid, TALLOC
 		PR_SUBJECT_UNICODE,
 		PR_MESSAGE_SIZE,
 		PR_MESSAGE_DELIVERY_TIME,
+		PidTagClientSubmitTime,
 		PR_MESSAGE_FLAGS,
 		PR_SENT_REPRESENTING_NAME_UNICODE,
 		PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE,
diff --git a/src/libexchangemapi/exchange-mapi-mail-utils.c b/src/libexchangemapi/exchange-mapi-mail-utils.c
index 2533e98..c554e5e 100644
--- a/src/libexchangemapi/exchange-mapi-mail-utils.c
+++ b/src/libexchangemapi/exchange-mapi-mail-utils.c
@@ -60,7 +60,7 @@ gboolean
 fetch_props_to_mail_item_cb (FetchItemsCallbackData *item_data, gpointer data)
 {
 	long *flags = NULL;
-	struct FILETIME *delivery_date = NULL;
+	struct FILETIME *delivery_date = NULL, *submit_time = NULL;
 	const gchar *msg_class = NULL, *content_class = NULL;
 	ExchangeMAPIStream *body = NULL;
 	uint32_t content_class_pid;
@@ -103,6 +103,9 @@ fetch_props_to_mail_item_cb (FetchItemsCallbackData *item_data, gpointer data)
 		case PR_MESSAGE_DELIVERY_TIME:
 			delivery_date = (struct FILETIME *) prop_data;
 			break;
+		case PidTagClientSubmitTime:
+			submit_time = (struct FILETIME *) prop_data;
+			break;
 		case PR_MESSAGE_FLAGS:
 			flags = (long *) prop_data;
 			break;
@@ -149,6 +152,13 @@ fetch_props_to_mail_item_cb (FetchItemsCallbackData *item_data, gpointer data)
 
 	if (delivery_date) {
 		item->header.recieved_time = exchange_mapi_util_filetime_to_time_t (delivery_date);
+	} else {
+		item->header.recieved_time = 0;
+	}
+	if (submit_time) {
+		item->header.send_time = exchange_mapi_util_filetime_to_time_t (submit_time);
+	} else {
+		item->header.send_time = 0;
 	}
 
 	if (flags && (*flags & MSGFLAG_READ) != 0)
@@ -263,6 +273,7 @@ mapi_mail_get_item_prop_list (ExchangeMapiConnection *conn, mapi_id_t fid, TALLO
 		PR_MESSAGE_SIZE,
 		PR_MESSAGE_FLAGS,
 		PR_MESSAGE_DELIVERY_TIME,
+		PidTagClientSubmitTime,
 		PR_MSG_EDITOR_FORMAT,
 
 		PR_SUBJECT_UNICODE,
@@ -425,10 +436,7 @@ static void
 mapi_mime_set_msg_headers (ExchangeMapiConnection *conn, CamelMimeMessage *msg, MailItem *item)
 {
 	gchar *temp_str = NULL;
-	time_t recieved_time;
 	CamelInternetAddress *addr = NULL;
-	gint offset = 0;
-	time_t actual_time;
 
 	/* Setting headers from PR_TRANSPORT_MESSAGE_HEADERS */
 	if (item->header.transport_headers) {
@@ -463,7 +471,12 @@ mapi_mime_set_msg_headers (ExchangeMapiConnection *conn, CamelMimeMessage *msg,
 		g_object_unref (parser);
 		g_object_unref (part);
 	} else {
-		recieved_time = item->header.recieved_time;
+		time_t recieved_time, actual_time;
+		gint offset = 0;
+
+		recieved_time = item->header.send_time;
+		if (!recieved_time)
+			recieved_time = item->header.recieved_time;
 		actual_time = camel_header_decode_date (ctime(&recieved_time), &offset);
 		camel_mime_message_set_date (msg, actual_time, offset);
 	}
@@ -1525,6 +1538,9 @@ mapi_mime_message_to_mail_item (CamelMimeMessage *message, gint32 message_camel_
 	msg_time = camel_mime_message_get_date (message, &msg_time_offset);
 	if (msg_time == CAMEL_MESSAGE_DATE_CURRENT)
 		msg_time = camel_mime_message_get_date_received (message, &msg_time_offset);
+	mail_item_set_time (&item->header.send_time, msg_time, msg_time_offset);
+
+	msg_time = camel_mime_message_get_date_received (message, &msg_time_offset);
 	mail_item_set_time (&item->header.recieved_time, msg_time, msg_time_offset);
 
 	to = camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_TO);
@@ -1654,6 +1670,14 @@ mapi_mail_utils_create_item_build_props (ExchangeMapiConnection *conn, mapi_id_t
 		set_value (PR_MESSAGE_DELIVERY_TIME, &msg_date);
 	}
 
+	if (item->header.send_time != 0) {
+		struct FILETIME msg_date = { 0 };
+
+		exchange_mapi_util_time_t_to_filetime (item->header.send_time, &msg_date);
+
+		set_value (PidTagClientSubmitTime, &msg_date);
+	}
+
 	if (item->header.transport_headers && *item->header.transport_headers)
 		set_value (PR_TRANSPORT_MESSAGE_HEADERS_UNICODE, item->header.transport_headers);
 
diff --git a/src/libexchangemapi/exchange-mapi-utils.c b/src/libexchangemapi/exchange-mapi-utils.c
index fcf63b1..34ef5a3 100644
--- a/src/libexchangemapi/exchange-mapi-utils.c
+++ b/src/libexchangemapi/exchange-mapi-utils.c
@@ -1124,7 +1124,7 @@ exchange_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]