[evolution-patches] Fix for #59352 - organizer property not being handled in meeting items



A patch for #59352 - adds the organizer property as an explicit <from>
element on the <distribution> element. The assumption that the server
uses the <from> the <recipients> element to identify the organizer was
invalid.

regards,
harish

Index: servers/groupwise/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/ChangeLog,v
retrieving revision 1.54
diff -u -p -r1.54 ChangeLog
--- servers/groupwise/ChangeLog	15 Jun 2004 09:28:28 -0000	1.54
+++ servers/groupwise/ChangeLog	15 Jun 2004 12:59:30 -0000
@@ -1,3 +1,18 @@
+2004-06-15  Harish Krishnaswamy  <kharish novell com>
+
+	Fixes #59352
+	* e-gw-item.c: 
+	(e_gw_item_init), (e_gw_item_dispose),
+	(e_gw_item_new_from_soap_parameter), (e_gw_item_get_organizer),
+	(e_gw_item_set_organizer), (add_distribution_to_soap_message):
+	Convert EGwItemOrganizer to/from the <from> soap element.		
+
+	(e_gw_item_append_to_soap_message): Add the <from> element explicitly 
+	to <distribution> element, in addition to the <recipients> element.
+
+	* e-gw-item.h: Add EGwItemOrganizer structure and get/set functions
+	for the same.
+	
 2004-06-15 Sivaiah Nallagatla   <snallagatla novell com>
 
 	* e-gw-item.h : added "name" member ot EGroupMember structure
Index: servers/groupwise/e-gw-item.h
===================================================================
RCS file:
/cvs/gnome/evolution-data-server/servers/groupwise/e-gw-item.h,v
retrieving revision 1.14
diff -u -p -r1.14 e-gw-item.h
--- servers/groupwise/e-gw-item.h	14 Jun 2004 05:53:23 -0000	1.14
+++ servers/groupwise/e-gw-item.h	15 Jun 2004 12:59:30 -0000
@@ -97,6 +97,11 @@ typedef struct {
 	char *email;
 } EGroupMember;
 
+typedef struct {
+	char *email;
+	char *display_name;
+} EGwItemOrganizer;
+
 GType       e_gw_item_get_type (void);
 EGwItem    *e_gw_item_new_empty (void);
 EGwItem    *e_gw_item_new_from_soap_parameter (const char *container,
SoupSoapParameter *param);
@@ -167,6 +172,10 @@ void        e_gw_item_set_priority (EGwI
 
 GSList *e_gw_item_get_recipient_list (EGwItem *item);
 void e_gw_item_set_recipient_list (EGwItem *item, GSList
*new_recipient_list);
+
+EGwItemOrganizer *e_gw_item_get_organizer (EGwItem *item);
+void e_gw_item_set_organizer (EGwItem  *item, EGwItemOrganizer
*organizer);
+
 
 GSList *e_gw_item_get_recurrence_dates (EGwItem *item);
 void e_gw_item_set_recurrence_dates (EGwItem  *item, GSList
*new_recurrence_dates);
Index: servers/groupwise/e-gw-item.c
===================================================================
RCS file:
/cvs/gnome/evolution-data-server/servers/groupwise/e-gw-item.c,v
retrieving revision 1.37
diff -u -p -r1.37 e-gw-item.c
--- servers/groupwise/e-gw-item.c	14 Jun 2004 05:53:23 -0000	1.37
+++ servers/groupwise/e-gw-item.c	15 Jun 2004 12:59:31 -0000
@@ -52,6 +52,7 @@ struct _EGwItemPrivate {
 	GSList *recipient_list;
 	GSList *recurrence_dates;
 	int trigger; /* alarm */
+	EGwItemOrganizer *organizer;
 
 	/* properties for tasks/calendars */
 	char *icalid;
@@ -226,6 +227,10 @@ e_gw_item_dispose (GObject *object)
 			g_slist_free (priv->recipient_list);
 			priv->recipient_list = NULL;
 		}	
+		if (priv->organizer) {
+			g_free (priv->organizer);
+			priv->organizer = NULL;
+		}
 		if (priv->recurrence_dates) {
 			g_slist_foreach (priv->recurrence_dates, free_string, NULL);
 			g_slist_free (priv->recurrence_dates);
@@ -317,6 +322,7 @@ e_gw_item_init (EGwItem *item, EGwItemCl
 	priv->due_date = NULL; 
 	priv->trigger = 0;
 	priv->recipient_list = NULL;
+	priv->organizer = NULL;
 	priv->recurrence_dates = NULL;
 	priv->completed = FALSE;
 	priv->im_list = NULL;
@@ -1332,6 +1338,19 @@ e_gw_item_new_from_soap_parameter (const
 				item->priv->recipient_list = NULL;
 				set_recipient_list_from_soap_parameter
(&item->priv->recipient_list, tp);
 			}
+			tp = soup_soap_parameter_get_first_child_by_name (child, "from");
+			if (tp) {
+				SoupSoapParameter *subparam;
+				EGwItemOrganizer *organizer = g_new0 (EGwItemOrganizer, 1);
+
+				subparam = soup_soap_parameter_get_first_child_by_name (tp,
"displayName");
+				if (subparam) 
+					organizer->display_name = soup_soap_parameter_get_string_value
(subparam);
+				subparam = soup_soap_parameter_get_first_child_by_name (tp,
"email");
+				if (subparam) 
+					organizer->email = soup_soap_parameter_get_string_value
(subparam);
+				e_gw_item_set_organizer (item, organizer);
+			}
 
 		} else if (!g_ascii_strcasecmp (name, "dueDate")) {
 			char *formatted_date; 
@@ -1679,6 +1698,21 @@ e_gw_item_set_recipient_list (EGwItem  *
 	item->priv->recipient_list = new_recipient_list;
 }
 
+EGwItemOrganizer *
+e_gw_item_get_organizer (EGwItem *item)
+{
+	g_return_val_if_fail (E_IS_GW_ITEM (item), NULL);
+	return item->priv->organizer;
+}
+
+void
+e_gw_item_set_organizer (EGwItem  *item, EGwItemOrganizer *organizer)
+{
+	/* free organizer */ 
+	g_free (item->priv->organizer);
+	item->priv->organizer = organizer;
+}
+
 GSList *
 e_gw_item_get_recurrence_dates (EGwItem *item)
 {
@@ -1713,13 +1747,21 @@ e_gw_item_set_trigger (EGwItem *item, in
 }
 
 static void
-add_distribution_to_soap_message (GSList *recipient_list,
SoupSoapMessage *msg)
+add_distribution_to_soap_message (EGwItemOrganizer *organizer, GSList
*recipient_list, SoupSoapMessage *msg)
 {
 	GSList *rl;
 	
 	/* start distribution element */
 	soup_soap_message_start_element (msg, "distribution", NULL, NULL);
-	/*FIXME  Add the from element to identify the organizer */
+	if (organizer) {
+		soup_soap_message_start_element (msg, "from", NULL, NULL);
+		e_gw_message_write_string_parameter (msg, "displayName", NULL,
+				organizer->display_name ? organizer->display_name : "");
+		e_gw_message_write_string_parameter (msg, "email", NULL, 
+				organizer->email ? organizer->email : "");
+		
+		soup_soap_message_end_element (msg);
+	}
 	/* start recipients */
 	soup_soap_message_start_element (msg, "recipients", NULL, NULL);
 	/* add each recipient */
@@ -1782,7 +1824,7 @@ e_gw_item_append_to_soap_message (EGwIte
 			g_free (alarm);
 		}
 		if (priv->recipient_list != NULL)
-			add_distribution_to_soap_message (priv->recipient_list, msg);
+			add_distribution_to_soap_message (priv->organizer,
priv->recipient_list, msg);
 		if (priv->end_date) {
 			e_gw_message_write_string_parameter (msg, "endDate", NULL,
priv->end_date);
 		} else
Index: calendar/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/ChangeLog,v
retrieving revision 1.291
diff -u -p -r1.291 ChangeLog
--- calendar/ChangeLog	14 Jun 2004 16:30:25 -0000	1.291
+++ calendar/ChangeLog	15 Jun 2004 12:59:32 -0000
@@ -1,3 +1,11 @@
+2004-06-15  Harish Krishnaswamy  <kharish novell com>
+
+	Fixes #59352	
+	* backends/groupwise/e-cal-backend-groupwise-utils.c:
+	(set_properties_from_cal_component), (e_gw_item_to_cal_component):
+	Handle the organizer property of ecal and allow storing to and 
+	from e-gw-item.
+
 2004-06-14  Rodrigo Moya <rodrigo novell com>
 
 	Fixes #57088
Index: calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
===================================================================
RCS file:
/cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c,v
retrieving revision 1.21
diff -u -p -r1.21 e-cal-backend-groupwise-utils.c
--- calendar/backends/groupwise/e-cal-backend-groupwise-utils.c	14 Jun
2004 05:53:23 -0000	1.21
+++ calendar/backends/groupwise/e-cal-backend-groupwise-utils.c	15 Jun
2004 12:59:32 -0000
@@ -264,10 +264,25 @@ set_properties_from_cal_component (EGwIt
 				
 		e_gw_item_set_recipient_list (item, recipient_list);
 	}
+
+	if (e_cal_component_has_organizer (comp)) {
+		ECalComponentOrganizer *cal_organizer;
+		EGwItemOrganizer *organizer = NULL;
+
+		e_cal_component_get_organizer (comp, cal_organizer);
+		if (cal_organizer) {
+			organizer = g_new0 (EGwItemOrganizer, 1);
+			organizer->display_name = g_strdup (cal_organizer->cn);
+			organizer->email = g_strdup (cal_organizer->value + 7);
+			e_gw_item_set_organizer (item, organizer);
+		}
+	}
+
+	
 	/* check if recurrences exist and update the item */
 	if (e_cal_component_has_recurrences (comp)) {
 
-		GSList *recur_dates = NULL, *tmp;
+		GSList *recur_dates = NULL;
 		
 
 		e_cal_recur_generate_instances (comp, -1, -1,
@@ -307,6 +322,7 @@ e_gw_item_to_cal_component (EGwItem *ite
 	int percent;
 	int alarm_duration;
 	GSList *recipient_list, *rl, *attendee_list = NULL;
+	EGwItemOrganizer *organizer;
 	EGwItemType item_type;
 
 	g_return_val_if_fail (E_IS_GW_ITEM (item), NULL);
@@ -442,6 +458,17 @@ e_gw_item_to_cal_component (EGwItem *ite
 		}
 
 		e_cal_component_set_attendee_list (comp, attendee_list);
+	}
+
+	/* set organizer if it exists */
+	organizer = e_gw_item_get_organizer (item);
+	if (organizer) {
+		ECalComponentOrganizer *cal_organizer;
+		
+		cal_organizer = g_new0 (ECalComponentOrganizer, 1);
+		cal_organizer->cn = g_strdup (organizer->display_name);
+		cal_organizer->value = g_strconcat("MAILTO:", organizer->email,
NULL);
+		e_cal_component_set_organizer (comp, cal_organizer);
 	}
 
 	/* set specific properties */




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