[evolution-ews] Bug #677888 - Notes on Exchange do not show up as Memos



commit 0756a0ae5bec78943e1d2fbbe0ffa5ebbc5cf543
Author: Milan Crha <mcrha redhat com>
Date:   Thu Nov 29 19:13:12 2012 +0100

    Bug #677888 - Notes on Exchange do not show up as Memos

 src/addressbook/e-book-backend-ews.c   |    4 +-
 src/calendar/e-cal-backend-ews.c       |  300 ++++++++++++++++++++++++--------
 src/camel/camel-ews-folder.c           |   14 +-
 src/camel/camel-ews-utils.c            |    2 +-
 src/collection/e-ews-backend.c         |   15 ++
 src/server/e-ews-connection.c          |   18 ++-
 src/server/e-ews-connection.h          |    9 +
 src/server/e-ews-enums.h               |    3 +-
 src/server/e-ews-folder.c              |   45 ++---
 src/server/e-ews-item.c                |   27 ++-
 src/server/e-ews-item.h                |    3 +-
 src/server/tests/test-syncfolder.c     |    2 +-
 src/utils/e-ews-query-to-restriction.c |    4 +-
 13 files changed, 321 insertions(+), 125 deletions(-)
---
diff --git a/src/addressbook/e-book-backend-ews.c b/src/addressbook/e-book-backend-ews.c
index b6bff41..86cd492 100644
--- a/src/addressbook/e-book-backend-ews.c
+++ b/src/addressbook/e-book-backend-ews.c
@@ -2199,7 +2199,7 @@ ebews_fetch_items (EBookBackendEws *ebews,
 		e_ews_connection_get_items_sync (
 			cnc, EWS_PRIORITY_MEDIUM,
 			contact_item_ids, "Default", CONTACT_ITEM_PROPS,
-			FALSE, NULL, &new_items, NULL, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_TEXT, &new_items, NULL, NULL,
 			cancellable, error);
 	if (*error)
 		goto cleanup;
@@ -2217,7 +2217,7 @@ ebews_fetch_items (EBookBackendEws *ebews,
 		e_ews_connection_get_items_sync (
 			cnc, EWS_PRIORITY_MEDIUM,
 			dl_ids, "Default", NULL,
-			FALSE, NULL, &new_items, NULL, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_TEXT, &new_items, NULL, NULL,
 			cancellable, error);
 	if (*error)
 		goto cleanup;
diff --git a/src/calendar/e-cal-backend-ews.c b/src/calendar/e-cal-backend-ews.c
index a475fbb..becb0d4 100644
--- a/src/calendar/e-cal-backend-ews.c
+++ b/src/calendar/e-cal-backend-ews.c
@@ -1075,6 +1075,28 @@ add_attendees_list_to_message (ESoapMessage *msg,
 }
 
 static void
+convert_sensitivity_calcomp_to_xml (ESoapMessage *msg,
+				    icalcomponent *icalcomp)
+{
+	icalproperty *prop;
+
+	g_return_if_fail (msg != NULL);
+	g_return_if_fail (icalcomp != NULL);
+
+	prop = icalcomponent_get_first_property (icalcomp, ICAL_CLASS_PROPERTY);
+	if (prop) {
+		icalproperty_class classify = icalproperty_get_class (prop);
+		if (classify == ICAL_CLASS_PUBLIC) {
+			e_ews_message_write_string_parameter (msg, "Sensitivity", NULL, "Normal");
+		} else if (classify == ICAL_CLASS_PRIVATE) {
+			e_ews_message_write_string_parameter (msg, "Sensitivity", NULL, "Private");
+		} else if (classify == ICAL_CLASS_CONFIDENTIAL) {
+			e_ews_message_write_string_parameter (msg, "Sensitivity", NULL, "Personal");
+		}
+	}
+}
+
+static void
 convert_vevent_calcomp_to_xml (ESoapMessage *msg,
                                gpointer user_data)
 {
@@ -1099,6 +1121,8 @@ convert_vevent_calcomp_to_xml (ESoapMessage *msg,
 	if (value)
 		e_ews_message_write_string_parameter (msg, "Subject", NULL, value);
 
+	convert_sensitivity_calcomp_to_xml (msg, icalcomp);
+
 	/* description */
 	value = icalcomponent_get_description (icalcomp);
 	if (value)
@@ -1186,6 +1210,8 @@ convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
 
 	e_ews_message_write_string_parameter (msg, "Subject", NULL, icalcomponent_get_summary (icalcomp));
 
+	convert_sensitivity_calcomp_to_xml (msg, icalcomp);
+
 	e_ews_message_write_string_parameter_with_attribute (msg, "Body", NULL, icalcomponent_get_description (icalcomp), "BodyType", "Text");
 
 	prop = icalcomponent_get_first_property (icalcomp, ICAL_DUE_PROPERTY);
@@ -1225,6 +1251,29 @@ convert_vtodo_calcomp_to_xml (ESoapMessage *msg,
 }
 
 static void
+convert_vjournal_calcomp_to_xml (ESoapMessage *msg,
+				 gpointer user_data)
+{
+	EwsConvertData *convert_data = user_data;
+	icalcomponent *icalcomp = convert_data->icalcomp;
+	const gchar *text;
+
+	e_soap_message_start_element (msg, "Message", NULL, NULL);
+	e_ews_message_write_string_parameter (msg, "ItemClass", NULL, "IPM.StickyNote");
+
+	e_ews_message_write_string_parameter (msg, "Subject", NULL, icalcomponent_get_summary (icalcomp));
+
+	convert_sensitivity_calcomp_to_xml (msg, icalcomp);
+
+	text = icalcomponent_get_description (icalcomp);
+	if (!text || !*text)
+		text = icalcomponent_get_summary (icalcomp);
+	e_ews_message_write_string_parameter_with_attribute (msg, "Body", NULL, text, "BodyType", "Text");
+
+	e_soap_message_end_element (msg); /* Message */
+}
+
+static void
 convert_calcomp_to_xml (ESoapMessage *msg,
                         gpointer user_data)
 {
@@ -1237,7 +1286,11 @@ convert_calcomp_to_xml (ESoapMessage *msg,
 	case ICAL_VTODO_COMPONENT:
 		convert_vtodo_calcomp_to_xml (msg, user_data);
 		break;
+	case ICAL_VJOURNAL_COMPONENT:
+		convert_vjournal_calcomp_to_xml (msg, user_data);
+		break;
 	default:
+		g_warn_if_reached ();
 		break;
 	}
 
@@ -1348,7 +1401,9 @@ ews_create_attachments_cb (GObject *object,
 		}
 	} else if (create_data->cb_type == 2) {
 		const gchar *send_meeting_invitations;
+		const gchar *send_or_save;
 		EwsModifyData * modify_data;
+
 		modify_data = g_new0 (EwsModifyData, 1);
 		modify_data->cbews = g_object_ref (create_data->cbews);
 		modify_data->comp = create_data->comp;
@@ -1358,16 +1413,19 @@ ews_create_attachments_cb (GObject *object,
 		modify_data->itemid = create_data->itemid;
 		modify_data->changekey = change_key;
 
-		if (e_cal_component_has_attendees (create_data->comp))
+		if (e_cal_component_has_attendees (create_data->comp)) {
 			send_meeting_invitations = "SendToAllAndSaveCopy";
-		else
+			send_or_save = "SendAndSaveCopy";
+		} else {
 			/*In case of appointment we have to set SendMeetingInvites to SendToNone */
 			send_meeting_invitations = "SendToNone";
+			send_or_save = "SaveOnly";
+		}
 
 		e_ews_connection_update_items (
 			priv->cnc, EWS_PRIORITY_MEDIUM,
 			"AlwaysOverwrite",
-			"SendAndSaveCopy",
+			send_or_save,
 			send_meeting_invitations,
 			priv->folder_id,
 			convert_component_to_updatexml,
@@ -1419,7 +1477,7 @@ ews_create_object_cb (GObject *object,
 	item_id = e_ews_item_get_id (item);
 	g_slist_free (ids);
 
-	if (e_ews_item_get_item_type (item) == E_EWS_ITEM_TYPE_CALENDAR_ITEM) {
+	if (e_ews_item_get_item_type (item) == E_EWS_ITEM_TYPE_EVENT) {
 
 		items = g_slist_append (items, item_id->id);
 
@@ -1429,7 +1487,7 @@ ews_create_object_cb (GObject *object,
 			items,
 			"IdOnly",
 			"calendar:UID",
-			FALSE, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_TEXT,
 			&items_req,
 			NULL, NULL, priv->cancellable, &error);
 		if (!res && error != NULL) {
@@ -1483,7 +1541,7 @@ ews_create_object_cb (GObject *object,
 	e_cal_backend_store_freeze_changes (priv->store);
 
 	/* set a new ical property containing the change key we got from the exchange server for future use */
-	if (e_ews_item_get_item_type (item) == E_EWS_ITEM_TYPE_CALENDAR_ITEM)
+	if (e_ews_item_get_item_type (item) == E_EWS_ITEM_TYPE_EVENT)
 		e_cal_component_set_uid (create_data->comp, e_ews_item_get_uid (item));
 	else
 		e_cal_component_set_uid (create_data->comp, item_id->id);
@@ -1844,6 +1902,18 @@ convert_vevent_component_to_updatexml (ESoapMessage *msg,
 	} else if (!value && old_value)
 		convert_vevent_property_to_updatexml (msg, "Subject", "", "item", NULL, NULL);
 
+	prop = icalcomponent_get_first_property (icalcomp, ICAL_CLASS_PROPERTY);
+	if (prop) {
+		icalproperty_class classify = icalproperty_get_class (prop);
+		if (classify == ICAL_CLASS_PUBLIC) {
+			convert_vevent_property_to_updatexml (msg, "Sensitivity", "Normal", "item", NULL, NULL);
+		} else if (classify == ICAL_CLASS_PRIVATE) {
+			convert_vevent_property_to_updatexml (msg, "Sensitivity", "Private", "item", NULL, NULL);
+		} else if (classify == ICAL_CLASS_CONFIDENTIAL) {
+			convert_vevent_property_to_updatexml (msg, "Sensitivity", "Personal", "item", NULL, NULL);
+		}
+	}
+
 	/*description*/
 	value = icalcomponent_get_description (icalcomp);
 	old_value = icalcomponent_get_description (icalcomp_old);
@@ -2015,6 +2085,18 @@ convert_vtodo_component_to_updatexml (ESoapMessage *msg,
 
 	convert_vtodo_property_to_updatexml (msg, "Subject", icalcomponent_get_summary (icalcomp), "item", NULL, NULL);
 
+	prop = icalcomponent_get_first_property (icalcomp, ICAL_CLASS_PROPERTY);
+	if (prop) {
+		icalproperty_class classify = icalproperty_get_class (prop);
+		if (classify == ICAL_CLASS_PUBLIC) {
+			convert_vtodo_property_to_updatexml (msg, "Sensitivity", "Normal", "item", NULL, NULL);
+		} else if (classify == ICAL_CLASS_PRIVATE) {
+			convert_vtodo_property_to_updatexml (msg, "Sensitivity", "Private", "item", NULL, NULL);
+		} else if (classify == ICAL_CLASS_CONFIDENTIAL) {
+			convert_vtodo_property_to_updatexml (msg, "Sensitivity", "Personal", "item", NULL, NULL);
+		}
+	}
+
 	convert_vtodo_property_to_updatexml (msg, "Body", icalcomponent_get_description (icalcomp), "item", "BodyType", "Text");
 
 	prop = icalcomponent_get_first_property (icalcomp, ICAL_DUE_PROPERTY);
@@ -2068,6 +2150,56 @@ convert_vtodo_component_to_updatexml (ESoapMessage *msg,
 }
 
 static void
+convert_vjournal_property_to_updatexml (ESoapMessage *msg,
+                                     const gchar *name,
+                                     const gchar *value,
+                                     const gchar *prefix,
+                                     const gchar *attr_name,
+                                     const gchar *attr_value)
+{
+	e_ews_message_start_set_item_field (msg, name, prefix, "Message");
+	e_ews_message_write_string_parameter_with_attribute (msg, name, NULL, value, attr_name, attr_value);
+	e_ews_message_end_set_item_field (msg);
+}
+
+static void
+convert_vjournal_component_to_updatexml (ESoapMessage *msg,
+					 gpointer user_data)
+{
+	EwsModifyData *modify_data = user_data;
+	icalcomponent *icalcomp = e_cal_component_get_icalcomponent (modify_data->comp);
+	icalproperty *prop;
+	const gchar *text;
+
+	e_ews_message_start_item_change (
+		msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
+		modify_data->itemid, modify_data->changekey, 0);
+
+	convert_vjournal_property_to_updatexml (msg, "ItemClass", "IPM.StickyNote", "item", NULL, NULL);
+	convert_vjournal_property_to_updatexml (msg, "Subject", icalcomponent_get_summary (icalcomp), "item", NULL, NULL);
+
+	prop = icalcomponent_get_first_property (icalcomp, ICAL_CLASS_PROPERTY);
+	if (prop) {
+		icalproperty_class classify = icalproperty_get_class (prop);
+		if (classify == ICAL_CLASS_PUBLIC) {
+			convert_vjournal_property_to_updatexml (msg, "Sensitivity", "Normal", "item", NULL, NULL);
+		} else if (classify == ICAL_CLASS_PRIVATE) {
+			convert_vjournal_property_to_updatexml (msg, "Sensitivity", "Private", "item", NULL, NULL);
+		} else if (classify == ICAL_CLASS_CONFIDENTIAL) {
+			convert_vjournal_property_to_updatexml (msg, "Sensitivity", "Personal", "item", NULL, NULL);
+		}
+	}
+
+	text = icalcomponent_get_description (icalcomp);
+	if (!text || !*text)
+		text = icalcomponent_get_summary (icalcomp);
+
+	convert_vjournal_property_to_updatexml (msg, "Body", text, "item", "BodyType", "Text");
+
+	e_ews_message_end_item_change (msg);
+}
+
+static void
 convert_component_to_updatexml (ESoapMessage *msg,
                                 gpointer user_data)
 {
@@ -2081,6 +2213,9 @@ convert_component_to_updatexml (ESoapMessage *msg,
 	case ICAL_VTODO_COMPONENT:
 		convert_vtodo_component_to_updatexml (msg, user_data);
 		break;
+	case ICAL_VJOURNAL_COMPONENT:
+		convert_vjournal_component_to_updatexml (msg, user_data);
+		break;
 	default:
 		break;
 	}
@@ -2259,6 +2394,8 @@ e_cal_backend_ews_modify_object (ECalBackend *backend,
 
 	} else {
 		const gchar *send_meeting_invitations;
+		const gchar *send_or_save;
+
 		modify_data = g_new0 (EwsModifyData, 1);
 		modify_data->cbews = g_object_ref (cbews);
 		modify_data->comp = g_object_ref (comp);
@@ -2268,16 +2405,19 @@ e_cal_backend_ews_modify_object (ECalBackend *backend,
 		modify_data->itemid = itemid;
 		modify_data->changekey = changekey;
 
-		if (e_cal_component_has_attendees (comp))
+		if (e_cal_component_has_attendees (comp)) {
 			send_meeting_invitations = "SendToAllAndSaveCopy";
-		else
+			send_or_save = "SendAndSaveCopy";
+		} else {
 			/*In case of appointment we have to set SendMeetingInvites to SendToNone */
 			send_meeting_invitations = "SendToNone";
+			send_or_save = "SaveOnly";
+		}
 
 		e_ews_connection_update_items (
 			priv->cnc, EWS_PRIORITY_MEDIUM,
 			"AlwaysOverwrite",
-			"SendAndSaveCopy",
+			send_or_save,
 			send_meeting_invitations,
 			priv->folder_id,
 			convert_component_to_updatexml,
@@ -2892,13 +3032,15 @@ add_item_to_cache (ECalBackendEws *cbews,
 {
 	ECalBackendEwsPrivate *priv;
 	icalcomponent_kind kind;
+	EEwsItemType item_type;
 	icalcomponent *vtimezone, *icalcomp, *vcomp;
 	const gchar *mime_content;
 
 	kind = e_cal_backend_get_kind ((ECalBackend *) cbews);
 	priv = cbews->priv;
 
-	if (e_ews_item_get_item_type (item) == E_EWS_ITEM_TYPE_TASK) {
+	item_type = e_ews_item_get_item_type (item);
+	if (item_type == E_EWS_ITEM_TYPE_TASK || item_type == E_EWS_ITEM_TYPE_MEMO) {
 		icalproperty *icalprop;
 		icaltimetype due_date, start_date, complete_date, created;
 		icalproperty_status status  = ICAL_STATUS_NONE;
@@ -2910,70 +3052,15 @@ add_item_to_cache (ECalBackendEws *cbews,
 
 		vcomp = icalcomponent_new (ICAL_VCALENDAR_COMPONENT);
 		/*subject*/
-		icalcomp = icalcomponent_new (ICAL_VTODO_COMPONENT);
+		icalcomp = icalcomponent_new (item_type == E_EWS_ITEM_TYPE_TASK ? ICAL_VTODO_COMPONENT : ICAL_VJOURNAL_COMPONENT);
 		icalprop = icalproperty_new_summary (e_ews_item_get_subject (item));
 		icalcomponent_add_property (icalcomp, icalprop);
-		/*status*/
-		ews_task_status = e_ews_item_get_status (item);
-		if (!g_strcmp0 (ews_task_status, "NotStarted") == 0) {
-			if (g_strcmp0 (ews_task_status, "Completed") == 0)
-				status = ICAL_STATUS_COMPLETED;
-			else if (g_strcmp0 (ews_task_status, "InProgress") == 0)
-				status = ICAL_STATUS_INPROCESS;
-			else if (g_strcmp0 (ews_task_status, "WaitingOnOthers") == 0)
-				status = ICAL_STATUS_NEEDSACTION;
-			else if (g_strcmp0 (ews_task_status, "Deferred") == 0)
-				status = ICAL_STATUS_CANCELLED;
-			icalprop = icalproperty_new_status (status);
-			icalcomponent_add_property (icalcomp, icalprop);
-			}
-		/*precent complete*/
-		icalprop  = icalproperty_new_percentcomplete (atoi (e_ews_item_get_percent_complete (item)));
-		icalcomponent_add_property (icalcomp, icalprop);
-
-		/*due date*/
-		e_ews_item_task_has_due_date (item, &has_this_date);
-		if (has_this_date) {
-			due_date = icaltime_from_timet_with_zone (e_ews_item_get_due_date (item), 0, priv->default_zone);
-			due_date.is_date = 1;
-			icalprop = icalproperty_new_due (due_date);
-			icalcomponent_add_property (icalcomp, icalprop);
-		}
-
-		/*start date*/
-		has_this_date = FALSE;
-		e_ews_item_task_has_start_date (item, &has_this_date);
-		if (has_this_date) {
-			start_date = icaltime_from_timet_with_zone (e_ews_item_get_start_date (item), 0, priv->default_zone);
-			start_date.is_date = 1;
-			icalprop = icalproperty_new_dtstart (start_date);
-			icalcomponent_add_property (icalcomp, icalprop);
-		}
-
-		/*complete date*/
-		has_this_date = FALSE;
-		e_ews_item_task_has_complete_date (item, &has_this_date);
-		if (has_this_date) {
-			complete_date = icaltime_from_timet_with_zone (e_ews_item_get_complete_date (item), 0, priv->default_zone);
-			complete_date.is_date = 1;
-			icalprop = icalproperty_new_completed (complete_date);
-			icalcomponent_add_property (icalcomp, icalprop);
-		}
 
 		/*date time created*/
 		created = icaltime_from_timet_with_zone (e_ews_item_get_date_created (item), 0, priv->default_zone);
 		icalprop = icalproperty_new_created (created);
 		icalcomponent_add_property (icalcomp, icalprop);
 
-		/*priority*/
-		item_importance = e_ews_item_get_importance (item);
-		if (item_importance == EWS_ITEM_HIGH)
-			priority = 3;
-		else if (item_importance == EWS_ITEM_LOW)
-			priority = 7;
-		icalprop = icalproperty_new_priority (priority);
-		icalcomponent_add_property (icalcomp, icalprop);
-
 		/*sensitivity*/
 		sensitivity = e_ews_item_get_sensitivity (item);
 		if (g_strcmp0 (sensitivity, "Normal") == 0)
@@ -2991,7 +3078,7 @@ add_item_to_cache (ECalBackendEws *cbews,
 		icalcomponent_add_property (icalcomp, icalprop);
 
 		/*task assaingments*/
-		if (e_ews_item_get_delegator (item)!= NULL) {
+		if (e_ews_item_get_delegator (item) != NULL) {
 			const gchar *task_owner = e_ews_item_get_delegator (item);
 			GSList *mailboxes = NULL, *l;
 			GError *error = NULL;
@@ -3031,6 +3118,65 @@ add_item_to_cache (ECalBackendEws *cbews,
 			g_slist_free (mailboxes);
 		}
 
+		if (item_type == E_EWS_ITEM_TYPE_TASK) {
+			/*start date*/
+			has_this_date = FALSE;
+			e_ews_item_task_has_start_date (item, &has_this_date);
+			if (has_this_date) {
+				start_date = icaltime_from_timet_with_zone (e_ews_item_get_start_date (item), 0, priv->default_zone);
+				start_date.is_date = 1;
+				icalprop = icalproperty_new_dtstart (start_date);
+				icalcomponent_add_property (icalcomp, icalprop);
+			}
+
+			/*status*/
+			ews_task_status = e_ews_item_get_status (item);
+			if (!g_strcmp0 (ews_task_status, "NotStarted") == 0) {
+				if (g_strcmp0 (ews_task_status, "Completed") == 0)
+					status = ICAL_STATUS_COMPLETED;
+				else if (g_strcmp0 (ews_task_status, "InProgress") == 0)
+					status = ICAL_STATUS_INPROCESS;
+				else if (g_strcmp0 (ews_task_status, "WaitingOnOthers") == 0)
+					status = ICAL_STATUS_NEEDSACTION;
+				else if (g_strcmp0 (ews_task_status, "Deferred") == 0)
+					status = ICAL_STATUS_CANCELLED;
+				icalprop = icalproperty_new_status (status);
+				icalcomponent_add_property (icalcomp, icalprop);
+			}
+
+			/*precent complete*/
+			icalprop  = icalproperty_new_percentcomplete (atoi (e_ews_item_get_percent_complete (item)));
+			icalcomponent_add_property (icalcomp, icalprop);
+
+			/*due date*/
+			e_ews_item_task_has_due_date (item, &has_this_date);
+			if (has_this_date) {
+				due_date = icaltime_from_timet_with_zone (e_ews_item_get_due_date (item), 0, priv->default_zone);
+				due_date.is_date = 1;
+				icalprop = icalproperty_new_due (due_date);
+				icalcomponent_add_property (icalcomp, icalprop);
+			}
+
+			/*complete date*/
+			has_this_date = FALSE;
+			e_ews_item_task_has_complete_date (item, &has_this_date);
+			if (has_this_date) {
+				complete_date = icaltime_from_timet_with_zone (e_ews_item_get_complete_date (item), 0, priv->default_zone);
+				complete_date.is_date = 1;
+				icalprop = icalproperty_new_completed (complete_date);
+				icalcomponent_add_property (icalcomp, icalprop);
+			}
+
+			/*priority*/
+			item_importance = e_ews_item_get_importance (item);
+			if (item_importance == EWS_ITEM_HIGH)
+				priority = 3;
+			else if (item_importance == EWS_ITEM_LOW)
+				priority = 7;
+			icalprop = icalproperty_new_priority (priority);
+			icalcomponent_add_property (icalcomp, icalprop);
+		}
+
 		icalcomponent_add_component (vcomp,icalcomp);
 	} else {
 		struct icaltimetype dt;
@@ -3303,6 +3449,7 @@ ews_cal_sync_get_items_sync (ECalBackendEws *cbews,
 		additional_props,
 		FALSE,
 		NULL,
+		E_EWS_BODY_TYPE_TEXT,
 		&items,
 		NULL, NULL,
 		priv->cancellable,
@@ -3361,7 +3508,7 @@ cal_backend_ews_process_folder_items (ECalBackendEws *cbews,
                                       GHashTable *ex_to_smtp)
 {
 	ECalBackendEwsPrivate *priv;
-	GSList *l[2], *m, *cal_item_ids = NULL, *task_item_ids = NULL;
+	GSList *l[2], *m, *cal_item_ids = NULL, *task_memo_item_ids = NULL;
 	gint i;
 
 	priv = cbews->priv;
@@ -3376,10 +3523,10 @@ cal_backend_ews_process_folder_items (ECalBackendEws *cbews,
 			const EwsId *id;
 
 			id = e_ews_item_get_id (item);
-			if (type == E_EWS_ITEM_TYPE_CALENDAR_ITEM)
+			if (type == E_EWS_ITEM_TYPE_EVENT)
 				cal_item_ids = g_slist_prepend (cal_item_ids, id->id);
-			else if (type == E_EWS_ITEM_TYPE_TASK)
-				task_item_ids = g_slist_prepend (task_item_ids, id->id);
+			else if (type == E_EWS_ITEM_TYPE_TASK || type == E_EWS_ITEM_TYPE_MEMO)
+				task_memo_item_ids = g_slist_prepend (task_memo_item_ids, id->id);
 		}
 	}
 
@@ -3406,17 +3553,17 @@ cal_backend_ews_process_folder_items (ECalBackendEws *cbews,
 			ex_to_smtp);
 	}
 
-	if (task_item_ids) {
+	if (task_memo_item_ids) {
 		ews_cal_sync_get_items_sync (
 			cbews,
-			task_item_ids,
+			task_memo_item_ids,
 			"AllProperties",
 			NULL,
 			ex_to_smtp);
 	}
 
 	g_slist_free (cal_item_ids);
-	g_slist_free (task_item_ids);
+	g_slist_free (task_memo_item_ids);
 }
 
 static void
@@ -3469,7 +3616,7 @@ ews_start_sync_thread (gpointer data)
 		e_ews_connection_sync_folder_items_sync (
 			priv->cnc, EWS_PRIORITY_MEDIUM,
 			old_sync_state, priv->folder_id,
-			"IdOnly", NULL,
+			"IdOnly", "item:ItemClass",
 			EWS_MAX_FETCH_COUNT,
 			&new_sync_state,
 			&includes_last_item,
@@ -3861,6 +4008,9 @@ e_cal_backend_ews_get_backend_property (ECalBackend *backend,
 		case ICAL_VTODO_COMPONENT:
 			e_cal_component_set_new_vtype (comp, E_CAL_COMPONENT_TODO);
 			break;
+		case ICAL_VJOURNAL_COMPONENT:
+			e_cal_component_set_new_vtype (comp, E_CAL_COMPONENT_JOURNAL);
+			break;
 		default:
 			g_object_unref (comp);
 			e_data_cal_respond_get_backend_property (cal, opid, EDC_ERROR (ObjectNotFound), NULL);
diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index 80b1c10..26489a2 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -453,7 +453,7 @@ camel_ews_folder_get_message (CamelFolder *folder,
 
 	res = e_ews_connection_get_items_sync (
 		cnc, pri, ids, "IdOnly", "item:MimeContent",
-		TRUE, mime_dir,
+		TRUE, mime_dir, E_EWS_BODY_TYPE_ANY,
 		&items,
 		(ESoapProgressFn) camel_operation_progress,
 		(gpointer) cancellable,
@@ -486,7 +486,7 @@ camel_ews_folder_get_message (CamelFolder *folder,
 		res = e_ews_connection_get_items_sync (
 			cnc, pri, ids, "IdOnly",
 			"meeting:AssociatedCalendarItemId",
-			FALSE, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_ANY,
 			&items_req,
 			(ESoapProgressFn) camel_operation_progress,
 			(gpointer) cancellable,
@@ -1264,7 +1264,7 @@ sync_updated_items (CamelEwsFolder *ews_folder,
 		e_ews_connection_get_items_sync (
 			cnc, EWS_PRIORITY_MEDIUM,
 			msg_ids, "IdOnly", SUMMARY_MESSAGE_FLAGS,
-			FALSE, NULL, &items, NULL, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_ANY, &items, NULL, NULL,
 			cancellable, &local_error);
 
 	camel_ews_utils_sync_updated_items (ews_folder, items);
@@ -1279,7 +1279,7 @@ sync_updated_items (CamelEwsFolder *ews_folder,
 		e_ews_connection_get_items_sync (
 			cnc, EWS_PRIORITY_MEDIUM,
 			generic_item_ids, "IdOnly", SUMMARY_ITEM_FLAGS,
-			FALSE, NULL, &items, NULL, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_ANY, &items, NULL, NULL,
 			cancellable, &local_error);
 	camel_ews_utils_sync_updated_items (ews_folder, items);
 
@@ -1347,7 +1347,7 @@ sync_created_items (CamelEwsFolder *ews_folder,
 		e_ews_connection_get_items_sync (
 			cnc, EWS_PRIORITY_MEDIUM,
 			msg_ids, "IdOnly", SUMMARY_MESSAGE_PROPS,
-			FALSE, NULL, &items, NULL, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_ANY, &items, NULL, NULL,
 			cancellable, &local_error);
 
 	if (local_error) {
@@ -1363,7 +1363,7 @@ sync_created_items (CamelEwsFolder *ews_folder,
 		e_ews_connection_get_items_sync (
 			cnc, EWS_PRIORITY_MEDIUM,
 			post_item_ids, "IdOnly", SUMMARY_POSTITEM_PROPS,
-			FALSE, NULL, &items, NULL, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_ANY, &items, NULL, NULL,
 			cancellable, &local_error);
 
 	if (local_error) {
@@ -1379,7 +1379,7 @@ sync_created_items (CamelEwsFolder *ews_folder,
 		e_ews_connection_get_items_sync (
 			cnc, EWS_PRIORITY_MEDIUM,
 			generic_item_ids, "IdOnly", SUMMARY_ITEM_PROPS,
-			FALSE, NULL, &items, NULL, NULL,
+			FALSE, NULL, E_EWS_BODY_TYPE_ANY, &items, NULL, NULL,
 			cancellable, &local_error);
 
 	camel_ews_utils_sync_created_items (ews_folder, cnc, items, cancellable);
diff --git a/src/camel/camel-ews-utils.c b/src/camel/camel-ews-utils.c
index 89c9664..c58d593 100644
--- a/src/camel/camel-ews-utils.c
+++ b/src/camel/camel-ews-utils.c
@@ -713,7 +713,7 @@ camel_ews_utils_sync_created_items (CamelEwsFolder *ews_folder,
 		}
 
 		item_type = e_ews_item_get_item_type (item);
-		if (item_type == E_EWS_ITEM_TYPE_CALENDAR_ITEM ||
+		if (item_type == E_EWS_ITEM_TYPE_EVENT ||
 			 item_type == E_EWS_ITEM_TYPE_MEETING_MESSAGE ||
 			 item_type == E_EWS_ITEM_TYPE_MEETING_REQUEST ||
 			 item_type == E_EWS_ITEM_TYPE_MEETING_RESPONSE ||
diff --git a/src/collection/e-ews-backend.c b/src/collection/e-ews-backend.c
index a6cee3e..e709d4d 100644
--- a/src/collection/e-ews-backend.c
+++ b/src/collection/e-ews-backend.c
@@ -198,6 +198,9 @@ ews_backend_new_child (EEwsBackend *backend,
 		case E_EWS_FOLDER_TYPE_TASKS:
 			extension_name = E_SOURCE_EXTENSION_TASK_LIST;
 			break;
+		case E_EWS_FOLDER_TYPE_MEMOS:
+			extension_name = E_SOURCE_EXTENSION_MEMO_LIST;
+			break;
 		case E_EWS_FOLDER_TYPE_CONTACTS:
 			extension_name = E_SOURCE_EXTENSION_ADDRESS_BOOK;
 			break;
@@ -244,6 +247,14 @@ ews_backend_new_task_list (EEwsBackend *backend,
 }
 
 static ESource *
+ews_backend_new_memo_list (EEwsBackend *backend,
+                           EEwsFolder *folder)
+{
+	/* No extra configuration to do. */
+	return ews_backend_new_child (backend, folder);
+}
+
+static ESource *
 ews_backend_new_address_book (EEwsBackend *backend,
                               EEwsFolder *folder)
 {
@@ -283,6 +294,10 @@ ews_backend_sync_created_folders (EEwsBackend *backend,
 				source = ews_backend_new_task_list (
 					backend, folder);
 				break;
+			case E_EWS_FOLDER_TYPE_MEMOS:
+				source = ews_backend_new_memo_list (
+					backend, folder);
+				break;
 			case E_EWS_FOLDER_TYPE_CONTACTS:
 				source = ews_backend_new_address_book (
 					backend, folder);
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index 701964a..506cf71 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -3495,6 +3495,7 @@ e_ews_connection_get_items (EEwsConnection *cnc,
                             const gchar *additional_props,
                             gboolean include_mime,
                             const gchar *mime_directory,
+			    EEwsBodyType body_type,
                             ESoapProgressFn progress_fn,
                             gpointer progress_data,
                             GCancellable *cancellable,
@@ -3523,6 +3524,20 @@ e_ews_connection_get_items (EEwsConnection *cnc,
 	if (mime_directory)
 		e_soap_message_store_node_data (msg, "MimeContent", mime_directory, TRUE);
 
+	switch (body_type) {
+	case E_EWS_BODY_TYPE_BEST:
+		e_ews_message_write_string_parameter (msg, "BodyType", NULL, "Best");
+		break;
+	case E_EWS_BODY_TYPE_HTML:
+		e_ews_message_write_string_parameter (msg, "BodyType", NULL, "HTML");
+		break;
+	case E_EWS_BODY_TYPE_TEXT:
+		e_ews_message_write_string_parameter (msg, "BodyType", NULL, "Text");
+		break;
+	case E_EWS_BODY_TYPE_ANY:
+		break;
+	}
+
 	if (additional_props && *additional_props) {
 		gchar **prop = g_strsplit (additional_props, " ", 0);
 		gint i = 0;
@@ -3608,6 +3623,7 @@ e_ews_connection_get_items_sync (EEwsConnection *cnc,
                                  const gchar *additional_props,
                                  gboolean include_mime,
                                  const gchar *mime_directory,
+				 EEwsBodyType body_type,
                                  GSList **items,
                                  ESoapProgressFn progress_fn,
                                  gpointer progress_data,
@@ -3625,7 +3641,7 @@ e_ews_connection_get_items_sync (EEwsConnection *cnc,
 	e_ews_connection_get_items (
 		cnc, pri,ids, default_props,
 		additional_props, include_mime,
-		mime_directory, progress_fn,
+		mime_directory, body_type, progress_fn,
 		progress_data, cancellable,
 		e_async_closure_callback, closure);
 
diff --git a/src/server/e-ews-connection.h b/src/server/e-ews-connection.h
index e3732b9..86874eb 100644
--- a/src/server/e-ews-connection.h
+++ b/src/server/e-ews-connection.h
@@ -105,6 +105,13 @@ typedef enum {
 	EWS_SPECIFIED_OCCURRENCE_ONLY
 } EwsAffectedTaskOccurrencesType;
 
+typedef enum {
+	E_EWS_BODY_TYPE_ANY,
+	E_EWS_BODY_TYPE_BEST,
+	E_EWS_BODY_TYPE_HTML,
+	E_EWS_BODY_TYPE_TEXT
+} EEwsBodyType;
+
 typedef struct {
 	gchar *as_url;
 	gchar *oab_url;
@@ -321,6 +328,7 @@ void		e_ews_connection_get_items	(EEwsConnection *cnc,
 						 const gchar *additional_props,
 						 gboolean include_mime,
 						 const gchar *mime_directory,
+						 EEwsBodyType body_type,
 						 ESoapProgressFn progress_fn,
 						 gpointer progress_data,
 						 GCancellable *cancellable,
@@ -338,6 +346,7 @@ gboolean	e_ews_connection_get_items_sync	(EEwsConnection *cnc,
 						 const gchar *additional_props,
 						 gboolean include_mime,
 						 const gchar *mime_directory,
+						 EEwsBodyType body_type,
 						 GSList **items,
 						 ESoapProgressFn progress_fn,
 						 gpointer progress_data,
diff --git a/src/server/e-ews-enums.h b/src/server/e-ews-enums.h
index 89ff1cd..1c5be6b 100644
--- a/src/server/e-ews-enums.h
+++ b/src/server/e-ews-enums.h
@@ -35,7 +35,8 @@ typedef enum {
 	E_EWS_FOLDER_TYPE_CALENDAR,
 	E_EWS_FOLDER_TYPE_CONTACTS,
 	E_EWS_FOLDER_TYPE_SEARCH,
-	E_EWS_FOLDER_TYPE_TASKS
+	E_EWS_FOLDER_TYPE_TASKS,
+	E_EWS_FOLDER_TYPE_MEMOS
 } EEwsFolderType;
 
 typedef enum {
diff --git a/src/server/e-ews-folder.c b/src/server/e-ews-folder.c
index 6551b80..f789171 100644
--- a/src/server/e-ews-folder.c
+++ b/src/server/e-ews-folder.c
@@ -39,7 +39,6 @@ struct _EEwsFolderPrivate {
 	gchar *name;
 	EwsFolderId *fid;
 	EwsFolderId *parent_fid;
-	gchar *folder_class;
 	EEwsFolderType folder_type;
 	guint32 unread;
 	guint32 total;
@@ -120,29 +119,11 @@ e_ews_folder_init (EEwsFolder *folder)
 	priv->foreign = FALSE;
 }
 
-/* FIXME pick it from folder_type and make it set folder_type */
-static void
-e_ews_folder_set_folder_class (EEwsFolder *folder,
-                               const gchar *folder_class)
-{
-	EEwsFolderPrivate *priv;
-
-	g_return_if_fail (E_IS_EWS_FOLDER (folder));
-	g_return_if_fail (folder_class != NULL);
-
-	priv = folder->priv;
-
-	if (priv->folder_class)
-		g_free (priv->folder_class);
-	priv->folder_class = g_strdup (folder_class);
-}
-
 static gboolean
 e_ews_folder_set_from_soap_parameter (EEwsFolder *folder,
                                       ESoapParameter *param)
 {
 	EEwsFolderPrivate *priv = folder->priv;
-	gchar *value;
 	ESoapParameter *subparam, *node;
 
 	g_return_val_if_fail (param != NULL, FALSE);
@@ -172,6 +153,25 @@ e_ews_folder_set_from_soap_parameter (EEwsFolder *folder,
 		return FALSE;
 	}
 
+	if (priv->folder_type == E_EWS_FOLDER_TYPE_MAILBOX) {
+		subparam = e_soap_parameter_get_first_child_by_name (node, "FolderClass");
+		if (subparam) {
+			gchar *folder_class = e_soap_parameter_get_string_value (subparam);
+
+			if (g_strcmp0 (folder_class, "IPF.Contact") == 0) {
+				priv->folder_type = E_EWS_FOLDER_TYPE_CONTACTS;
+			} else if (g_strcmp0 (folder_class, "IPF.Appointment") == 0) {
+				priv->folder_type = E_EWS_FOLDER_TYPE_CALENDAR;
+			} else if (g_strcmp0 (folder_class, "IPF.Task") == 0) {
+				priv->folder_type = E_EWS_FOLDER_TYPE_TASKS;
+			} else if (g_strcmp0 (folder_class, "IPF.StickyNote") == 0) {
+				priv->folder_type = E_EWS_FOLDER_TYPE_MEMOS;
+			}
+
+			g_free (folder_class);
+		}
+	}
+
 	subparam = e_soap_parameter_get_first_child_by_name (node, "FolderId");
 	if (subparam) {
 		priv->fid = g_new0 (EwsFolderId, 1);
@@ -186,13 +186,6 @@ e_ews_folder_set_from_soap_parameter (EEwsFolder *folder,
 		priv->parent_fid->change_key = e_soap_parameter_get_property (subparam, "ChangeKey");
 	}
 
-	subparam = e_soap_parameter_get_first_child_by_name (node, "FolderClass");
-	if (subparam) {
-		value = e_soap_parameter_get_string_value (subparam);
-		e_ews_folder_set_folder_class (folder, (const gchar *) value);
-		g_free (value);
-	}
-
 	subparam = e_soap_parameter_get_first_child_by_name (node, "DisplayName");
 	if (subparam)
 		priv->name = e_soap_parameter_get_string_value (subparam);
diff --git a/src/server/e-ews-item.c b/src/server/e-ews-item.c
index c64905c..62c3fbc 100644
--- a/src/server/e-ews-item.c
+++ b/src/server/e-ews-item.c
@@ -879,7 +879,6 @@ e_ews_item_set_from_soap_parameter (EEwsItem *item,
 {
 	EEwsItemPrivate *priv = item->priv;
 	ESoapParameter *subparam, *node = NULL, *attach_id;
-	gboolean contact = FALSE, task = FALSE;
 	const gchar *name;
 
 	g_return_val_if_fail (param != NULL, FALSE);
@@ -902,14 +901,27 @@ e_ews_item_set_from_soap_parameter (EEwsItem *item,
 	 * </m:Changes> 
 	 * So check param is the node we want to use, by comparing name or is it child of the param */
 
-	if (!g_ascii_strcasecmp (name, "Message") || (node = e_soap_parameter_get_first_child_by_name (param, "Message")))
+	if (!g_ascii_strcasecmp (name, "Message") || (node = e_soap_parameter_get_first_child_by_name (param, "Message"))) {
 		priv->item_type = E_EWS_ITEM_TYPE_MESSAGE;
-	else if (!g_ascii_strcasecmp (name, "PostItem") || (node = e_soap_parameter_get_first_child_by_name (param, "PostItem")))
+		subparam = e_soap_parameter_get_first_child_by_name (node ? node : param, "ItemClass");
+		if (subparam) {
+			gchar *folder_class = e_soap_parameter_get_string_value (subparam);
+
+			if (g_strcmp0 (folder_class, "IPM.StickyNote") == 0) {
+				priv->item_type = E_EWS_ITEM_TYPE_MEMO;
+				priv->task_fields = g_new0 (struct _EEwsTaskFields, 1);
+				priv->task_fields->has_due_date = FALSE;
+				priv->task_fields->has_start_date = FALSE;
+				priv->task_fields->has_complete_date = FALSE;
+			}
+
+			g_free (folder_class);
+		}
+	} else if (!g_ascii_strcasecmp (name, "PostItem") || (node = e_soap_parameter_get_first_child_by_name (param, "PostItem")))
 		priv->item_type = E_EWS_ITEM_TYPE_POST_ITEM;
 	else if (!g_ascii_strcasecmp (name, "CalendarItem") || (node = e_soap_parameter_get_first_child_by_name (param, "CalendarItem")))
-		priv->item_type = E_EWS_ITEM_TYPE_CALENDAR_ITEM;
+		priv->item_type = E_EWS_ITEM_TYPE_EVENT;
 	else if (!g_ascii_strcasecmp (name, "Contact") || (node = e_soap_parameter_get_first_child_by_name (param, "Contact"))) {
-		contact = TRUE;
 		priv->item_type = E_EWS_ITEM_TYPE_CONTACT;
 		priv->contact_fields = g_new0 (struct _EEwsContactFields, 1);
 	} else if (!g_ascii_strcasecmp (name, "DistributionList") || (node = e_soap_parameter_get_first_child_by_name (param, "DistributionList")))
@@ -923,7 +935,6 @@ e_ews_item_set_from_soap_parameter (EEwsItem *item,
 	else if (!g_ascii_strcasecmp (name, "MeetingCancellation") || (node = e_soap_parameter_get_first_child_by_name (param, "MeetingCancellation")))
 		priv->item_type = E_EWS_ITEM_TYPE_MEETING_CANCELLATION;
 	else if (!g_ascii_strcasecmp (name, "Task") || (node = e_soap_parameter_get_first_child_by_name (param, "Task"))) {
-		task = TRUE;
 		priv->item_type = E_EWS_ITEM_TYPE_TASK;
 		priv->task_fields = g_new0 (struct _EEwsTaskFields, 1);
 		priv->task_fields->has_due_date = FALSE;
@@ -1012,7 +1023,7 @@ e_ews_item_set_from_soap_parameter (EEwsItem *item,
 			g_free (value);
 		} else if (!g_ascii_strcasecmp (name, "Attachments")) {
 			process_attachments_list (priv, subparam);
-		} else if (contact)
+		} else if (priv->item_type == E_EWS_ITEM_TYPE_CONTACT)
 			parse_contact_field (item, name, subparam);
 			/* fields below are not relevant for contacts, so skip them */	
 		else if (!g_ascii_strcasecmp (name, "Sender")) {
@@ -1058,7 +1069,7 @@ e_ews_item_set_from_soap_parameter (EEwsItem *item,
 			g_free (value);
 		} else if (!g_ascii_strcasecmp (name, "TimeZone")) {
 			priv->timezone = e_soap_parameter_get_string_value (subparam);
-		} else if (task) {
+		} else if (priv->item_type == E_EWS_ITEM_TYPE_TASK || priv->item_type == E_EWS_ITEM_TYPE_MEMO) {
 			parse_task_field (item, name, subparam);
 			/* fields below are not relevant for task, so skip them */
 		} else if (!g_ascii_strcasecmp (name, "References")) {
diff --git a/src/server/e-ews-item.h b/src/server/e-ews-item.h
index 448c746..b91bcb2 100644
--- a/src/server/e-ews-item.h
+++ b/src/server/e-ews-item.h
@@ -41,7 +41,7 @@ typedef enum {
 	E_EWS_ITEM_TYPE_UNKNOWN,
 	E_EWS_ITEM_TYPE_MESSAGE,
 	E_EWS_ITEM_TYPE_POST_ITEM,
-	E_EWS_ITEM_TYPE_CALENDAR_ITEM,
+	E_EWS_ITEM_TYPE_EVENT,
 	E_EWS_ITEM_TYPE_CONTACT,
 	E_EWS_ITEM_TYPE_GROUP,
 	E_EWS_ITEM_TYPE_MEETING_MESSAGE,
@@ -49,6 +49,7 @@ typedef enum {
 	E_EWS_ITEM_TYPE_MEETING_RESPONSE,
 	E_EWS_ITEM_TYPE_MEETING_CANCELLATION,
 	E_EWS_ITEM_TYPE_TASK,
+	E_EWS_ITEM_TYPE_MEMO,
 	E_EWS_ITEM_TYPE_GENERIC_ITEM,
 	E_EWS_ITEM_TYPE_ERROR
 } EEwsItemType;
diff --git a/src/server/tests/test-syncfolder.c b/src/server/tests/test-syncfolder.c
index 8df5bc5..420d809 100644
--- a/src/server/tests/test-syncfolder.c
+++ b/src/server/tests/test-syncfolder.c
@@ -277,7 +277,7 @@ op_test_get_item ()
 	ids = g_slist_reverse (ids);
 	e_ews_connection_get_items (
 		cnc, EWS_PRIORITY_MEDIUM,
-		g_slist_last (ids), "IdOnly", NULL, FALSE, NULL,
+		g_slist_last (ids), "IdOnly", NULL, FALSE, NULL, E_EWS_BODY_TYPE_ANY,
 		NULL, NULL, cancellable,
 		get_item_ready_callback, NULL);
 
diff --git a/src/utils/e-ews-query-to-restriction.c b/src/utils/e-ews-query-to-restriction.c
index 3069481..8939e4d 100644
--- a/src/utils/e-ews-query-to-restriction.c
+++ b/src/utils/e-ews-query-to-restriction.c
@@ -1145,7 +1145,7 @@ e_ews_convert_sexp_to_restriction (ESoapMessage *msg,
 					contact_symbols[i].func, msg);
 		}
 
-	} else if (type == E_EWS_FOLDER_TYPE_CALENDAR || type == E_EWS_FOLDER_TYPE_TASKS) {
+	} else if (type == E_EWS_FOLDER_TYPE_CALENDAR || type == E_EWS_FOLDER_TYPE_TASKS || type == E_EWS_FOLDER_TYPE_MEMOS) {
 		for (i = 0; i < G_N_ELEMENTS (calendar_symbols); i++) {
 			if (calendar_symbols[i].immediate)
 				e_sexp_add_ifunction (
@@ -1195,7 +1195,7 @@ e_ews_check_is_query (const gchar *query,
 		else
 			return TRUE;
 
-	} else if (type == E_EWS_FOLDER_TYPE_CALENDAR || type == E_EWS_FOLDER_TYPE_TASKS) {
+	} else if (type == E_EWS_FOLDER_TYPE_CALENDAR || type == E_EWS_FOLDER_TYPE_TASKS || type == E_EWS_FOLDER_TYPE_MEMOS) {
 		if (!g_strcmp0 (query, "(contains? \"summary\"  \"\")"))
 			return FALSE;
 		else



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