diff -up evolution-ews-3.22.6/src/camel/camel-ews-folder.c.message-date-in-utc evolution-ews-3.22.6/src/camel/camel-ews-folder.c
--- evolution-ews-3.22.6/src/camel/camel-ews-folder.c.message-date-in-utc 2017-01-13 14:13:51.000000000 +0100
+++ evolution-ews-3.22.6/src/camel/camel-ews-folder.c 2017-03-17 10:16:38.925847814 +0100
@@ -592,6 +592,7 @@ camel_ews_folder_get_message (CamelFolde
add_props = e_ews_additional_props_new ();
add_props->field_uri = g_strdup ("item:MimeContent message:From message:Sender");
+ add_props->indexed_furis = g_slist_prepend (NULL, e_ews_indexed_field_uri_new ("item:InternetMessageHeader", "Date"));
res = e_ews_connection_get_items_sync (
cnc, pri, ids, "IdOnly", add_props,
@@ -700,7 +701,8 @@ camel_ews_folder_get_message (CamelFolde
message = camel_ews_folder_get_message_from_cache (ews_folder, uid, cancellable, error);
if (message) {
CamelInternetAddress *from;
- const gchar *email = NULL;
+ const gchar *email = NULL, *date_header;
+ gboolean resave = FALSE;
from = camel_mime_message_get_from (message);
@@ -711,8 +713,6 @@ camel_ews_folder_get_message (CamelFolde
if (!mailbox)
mailbox = e_ews_item_get_sender (items->data);
if (mailbox) {
- CamelStream *cache_stream;
-
email = NULL;
if (g_strcmp0 (mailbox->routing_type, "EX") == 0)
@@ -723,15 +723,33 @@ camel_ews_folder_get_message (CamelFolde
camel_mime_message_set_from (message, from);
g_object_unref (from);
- g_rec_mutex_lock (&priv->cache_lock);
- /* Ignore errors here, it's nothing fatal in this case */
- cache_stream = ews_data_cache_get (ews_folder->cache, "cur", uid, NULL);
- if (cache_stream) {
- camel_data_wrapper_write_to_stream_sync (CAMEL_DATA_WRAPPER (message), cache_stream, cancellable, NULL);
- g_object_unref (cache_stream);
- }
- g_rec_mutex_unlock (&priv->cache_lock);
+ resave = TRUE;
+ }
+ }
+
+ date_header = e_ews_item_get_date_header (items->data);
+ if (date_header && *date_header) {
+ time_t tt;
+ gint tz_offset;
+
+ tt = camel_header_decode_date (date_header, &tz_offset);
+ if (tt > 0) {
+ camel_mime_message_set_date (message, tt, tz_offset);
+ resave = TRUE;
+ }
+ }
+
+ if (resave) {
+ CamelStream *cache_stream;
+
+ g_rec_mutex_lock (&priv->cache_lock);
+ /* Ignore errors here, it's nothing fatal in this case */
+ cache_stream = ews_data_cache_get (ews_folder->cache, "cur", uid, NULL);
+ if (cache_stream) {
+ camel_data_wrapper_write_to_stream_sync (CAMEL_DATA_WRAPPER (message), cache_stream, cancellable, NULL);
+ g_object_unref (cache_stream);
}
+ g_rec_mutex_unlock (&priv->cache_lock);
}
}
diff -up evolution-ews-3.22.6/src/server/e-ews-connection.c.message-date-in-utc evolution-ews-3.22.6/src/server/e-ews-connection.c
--- evolution-ews-3.22.6/src/server/e-ews-connection.c.message-date-in-utc 2017-01-13 14:13:51.000000000 +0100
+++ evolution-ews-3.22.6/src/server/e-ews-connection.c 2017-03-17 10:16:38.926847814 +0100
@@ -383,9 +383,16 @@ e_ews_extended_field_uri_free (EEwsExten
}
EEwsIndexedFieldURI *
-e_ews_indexed_field_uri_new (void)
+e_ews_indexed_field_uri_new (const gchar *uri,
+ const gchar *index)
{
- return g_new0 (EEwsIndexedFieldURI, 1);
+ EEwsIndexedFieldURI *furi;
+
+ furi = g_new0 (EEwsIndexedFieldURI, 1);
+ furi->field_uri = g_strdup (uri);
+ furi->field_index = g_strdup (index);
+
+ return furi;
}
void
diff -up evolution-ews-3.22.6/src/server/e-ews-connection.h.message-date-in-utc evolution-ews-3.22.6/src/server/e-ews-connection.h
--- evolution-ews-3.22.6/src/server/e-ews-connection.h.message-date-in-utc 2017-01-13 14:13:51.000000000 +0100
+++ evolution-ews-3.22.6/src/server/e-ews-connection.h 2017-03-17 10:16:38.927847814 +0100
@@ -371,7 +371,8 @@ EEwsExtendedFieldURI *
void e_ews_extended_field_uri_free (EEwsExtendedFieldURI *ex_field_uri);
EEwsIndexedFieldURI *
- e_ews_indexed_field_uri_new (void);
+ e_ews_indexed_field_uri_new (const gchar *uri,
+ const gchar *index);
void e_ews_indexed_field_uri_free (EEwsIndexedFieldURI *id_field_uri);
EEwsAdditionalProps *
diff -up evolution-ews-3.22.6/src/server/e-ews-item.c.message-date-in-utc evolution-ews-3.22.6/src/server/e-ews-item.c
--- evolution-ews-3.22.6/src/server/e-ews-item.c.message-date-in-utc 2016-06-14 15:29:01.000000000 +0200
+++ evolution-ews-3.22.6/src/server/e-ews-item.c 2017-03-17 10:16:38.927847814 +0100
@@ -108,6 +108,7 @@ struct _EEwsItemPrivate {
gchar *subject;
gchar *mime_content;
+ gchar *date_header;
time_t date_received;
time_t date_sent;
time_t date_created;
@@ -210,6 +211,9 @@ e_ews_item_dispose (GObject *object)
g_free (priv->references);
priv->references = NULL;
+ g_free (priv->date_header);
+ priv->date_header = NULL;
+
g_free (priv->timezone);
priv->timezone = NULL;
@@ -1043,6 +1047,20 @@ e_ews_item_set_from_soap_parameter (EEws
priv->item_id->change_key = e_soap_parameter_get_property (subparam, "ChangeKey");
} else if (!g_ascii_strcasecmp (name, "Subject")) {
priv->subject = e_soap_parameter_get_string_value (subparam);
+ } else if (!g_ascii_strcasecmp (name, "InternetMessageHeaders")) {
+ for (subparam1 = e_soap_parameter_get_first_child_by_name (subparam, "InternetMessageHeader");
+ subparam1;
+ subparam1 = e_soap_parameter_get_next_child (subparam1)) {
+ gchar *str = e_soap_parameter_get_property (subparam1, "HeaderName");
+
+ if (g_strcmp0 (str, "Date") == 0) {
+ priv->date_header = e_soap_parameter_get_string_value (subparam1);
+ g_free (str);
+ break;
+ }
+
+ g_free (str);
+ }
} else if (!g_ascii_strcasecmp (name, "DateTimeReceived")) {
value = e_soap_parameter_get_string_value (subparam);
priv->date_received = ews_item_parse_date (value);
@@ -1309,6 +1327,7 @@ e_ews_item_get_in_replyto (EEwsItem *ite
return (const gchar *) item->priv->in_replyto;
}
+
const gchar *
e_ews_item_get_references (EEwsItem *item)
{
@@ -1317,6 +1336,14 @@ e_ews_item_get_references (EEwsItem *ite
return (const gchar *) item->priv->references;
}
+const gchar *
+e_ews_item_get_date_header (EEwsItem *item)
+{
+ g_return_val_if_fail (E_IS_EWS_ITEM (item), NULL);
+
+ return item->priv->date_header;
+}
+
time_t
e_ews_item_get_date_received (EEwsItem *item)
{
diff -up evolution-ews-3.22.6/src/server/e-ews-item.h.message-date-in-utc evolution-ews-3.22.6/src/server/e-ews-item.h
--- evolution-ews-3.22.6/src/server/e-ews-item.h.message-date-in-utc 2016-04-27 18:57:55.000000000 +0200
+++ evolution-ews-3.22.6/src/server/e-ews-item.h 2017-03-17 10:16:38.927847814 +0100
@@ -185,6 +185,7 @@ const gchar * e_ews_item_get_msg_id (EE
const gchar * e_ews_item_get_uid (EEwsItem *item);
const gchar * e_ews_item_get_in_replyto (EEwsItem *item);
const gchar * e_ews_item_get_references (EEwsItem *item);
+const gchar * e_ews_item_get_date_header (EEwsItem *item);
time_t e_ews_item_get_date_received (EEwsItem *item);
time_t e_ews_item_get_date_sent (EEwsItem *item);
time_t e_ews_item_get_date_created (EEwsItem *item);