[evolution-ews] Order updateble meeting's properties for meeting organizer or attendee



commit 88ee10b41fcf5f166a66e42b9f22713a70f715ea
Author: Pavel Ocheretny <pocheretny src gnome org>
Date:   Sun Jul 10 18:53:03 2011 +0300

    Order updateble meeting's properties for meeting organizer or attendee

 src/calendar/e-cal-backend-ews-utils.c |   35 +++++++++++++++++++++----------
 src/calendar/e-cal-backend-ews-utils.h |    1 +
 src/calendar/e-cal-backend-ews.c       |   19 ++++++++++++++--
 3 files changed, 41 insertions(+), 14 deletions(-)
---
diff --git a/src/calendar/e-cal-backend-ews-utils.c b/src/calendar/e-cal-backend-ews-utils.c
index b6a8bac..9caacba 100644
--- a/src/calendar/e-cal-backend-ews-utils.c
+++ b/src/calendar/e-cal-backend-ews-utils.c
@@ -44,21 +44,13 @@
  * Iterate over the icalcomponent properties and collect attendees
  */
 void e_ews_collect_attendees(icalcomponent *comp, GSList **required, GSList **optional, GSList **resource) {
-	icalproperty *prop, *org_prop = NULL;
+	icalproperty *prop;
 	icalparameter *param;
-	const gchar *org = NULL, *str = NULL;
+	const gchar *str = NULL;
 	const char *org_email_address = NULL;
 
 	/* we need to know who the orgenizer is so we wont duplicate him/her */
-	org_prop = icalcomponent_get_first_property (comp, ICAL_ORGANIZER_PROPERTY);
-	org = icalproperty_get_organizer(org_prop);
-	if (!org)
-		org = "";
-	else
-		if (!g_ascii_strncasecmp (org, "MAILTO:", 7))
-				org_email_address = (org) + 7;
-			else
-				org_email_address = org;
+	org_email_address = e_ews_collect_orginizer (comp);
 
 	/* iterate over every attendee property */
 	for (prop = icalcomponent_get_first_property (comp, ICAL_ATTENDEE_PROPERTY);
@@ -588,3 +580,24 @@ void ewscal_get_attach_differences (const GSList *original, const GSList *modifi
 	*removed = original_copy;
 	*added = modified_copy;
 }
+
+/*
+ * get meeting orginizer e-mail address
+ */
+const char *e_ews_collect_orginizer(icalcomponent *comp)
+{
+	icalproperty *org_prop = NULL;
+	const gchar *org = NULL;
+	const char *org_email_address = NULL;
+
+	org_prop = icalcomponent_get_first_property (comp, ICAL_ORGANIZER_PROPERTY);
+	org = icalproperty_get_organizer(org_prop);
+	if (!org)
+		org = "";
+	else
+		if (!g_ascii_strncasecmp (org, "MAILTO:", 7))
+				org_email_address = (org) + 7;
+			else
+				org_email_address = org;
+	return org_email_address;
+}
diff --git a/src/calendar/e-cal-backend-ews-utils.h b/src/calendar/e-cal-backend-ews-utils.h
index f03cc0e..7e41adc 100644
--- a/src/calendar/e-cal-backend-ews-utils.h
+++ b/src/calendar/e-cal-backend-ews-utils.h
@@ -29,6 +29,7 @@
 
 G_BEGIN_DECLS
 
+const char *e_ews_collect_orginizer(icalcomponent *comp);
 void e_ews_collect_attendees(icalcomponent *comp, GSList **required, GSList **optional, GSList **resource);
 
 void ewscal_set_time (ESoapMessage *msg, const gchar *name, icaltimetype *t);
diff --git a/src/calendar/e-cal-backend-ews.c b/src/calendar/e-cal-backend-ews.c
index aa944d2..6e91c8b 100644
--- a/src/calendar/e-cal-backend-ews.c
+++ b/src/calendar/e-cal-backend-ews.c
@@ -1611,7 +1611,8 @@ convert_vevent_component_to_updatexml(ESoapMessage *msg, gpointer user_data)
 	icalcomponent *icalcomp = e_cal_component_get_icalcomponent (modify_data->comp);
 	GSList *required = NULL, *optional = NULL, *resource = NULL;
 	icaltimetype dtstart, dtend;
-	icalproperty *prop;
+	icalproperty *prop, *transp;
+	const char *org_email_address = NULL;
 
 	e_ews_message_start_item_change (msg, E_EWS_ITEMCHANGE_TYPE_ITEM,
 					 modify_data->itemid, modify_data->changekey, 0);
@@ -1620,6 +1621,20 @@ convert_vevent_component_to_updatexml(ESoapMessage *msg, gpointer user_data)
 
 	convert_property_to_updatexml  (msg, "Body", icalcomponent_get_description(icalcomp), "item", "BodyType", "Text");
 
+	convert_property_to_updatexml  (msg, "Location", icalcomponent_get_location(icalcomp), "calendar", NULL, NULL);
+
+	transp = icalcomponent_get_first_property (icalcomp, ICAL_TRANSP_PROPERTY);
+	if (!g_strcmp0 (icalproperty_get_value_as_string (transp), "TRANSPARENT"))
+		convert_property_to_updatexml  (msg, "LegacyFreeBusyStatus","Free" , "calendar", NULL, NULL);
+	else
+		convert_property_to_updatexml  (msg, "LegacyFreeBusyStatus","Busy" , "calendar", NULL, NULL);
+
+	org_email_address = e_ews_collect_orginizer (icalcomp);
+	if (g_ascii_strcasecmp (org_email_address, modify_data->cbews->priv->user_email)) {
+		e_ews_message_end_item_change (msg);
+		return;
+	}
+	/* Update other properties allowed only for meeting organizers*/
 	dtstart = icalcomponent_get_dtstart (icalcomp);
 	dtend = icalcomponent_get_dtend (icalcomp);
 
@@ -1631,8 +1646,6 @@ convert_vevent_component_to_updatexml(ESoapMessage *msg, gpointer user_data)
 	ewscal_set_time (msg, "End", &dtend);
 	e_ews_message_end_set_item_field (msg);
 
-	convert_property_to_updatexml  (msg, "Location", icalcomponent_get_location(icalcomp), "calendar", NULL, NULL);
-
 	e_ews_collect_attendees(icalcomp, &required, &optional, &resource);
 	if (required != NULL) {
 		e_ews_message_start_set_item_field (msg, "RequiredAttendees", "calendar");



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