[evolution-mapi/gnome-3-2] Bug #666952 - Wrong date in message list
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-mapi/gnome-3-2] Bug #666952 - Wrong date in message list
- Date: Tue, 3 Jan 2012 15:23:47 +0000 (UTC)
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]