Fixes #59352. Adds the EGwItemOrganizer structure and functions to convert
authorHarish Krishnaswamy <kharish@src.gnome.org>
Tue, 15 Jun 2004 15:59:07 +0000 (15:59 +0000)
committerHarish Krishnaswamy <kharish@src.gnome.org>
Tue, 15 Jun 2004 15:59:07 +0000 (15:59 +0000)
it to/from the <from> element in <distribution> soap element.

calendar/ChangeLog
calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
servers/groupwise/ChangeLog
servers/groupwise/e-gw-item.c
servers/groupwise/e-gw-item.h

index 0051d9f..72026c3 100644 (file)
@@ -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 cecb73d..910e81b 100644 (file)
@@ -264,10 +264,25 @@ set_properties_from_cal_component (EGwItem *item, ECalComponent *comp, const ica
                                
                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 *item, icaltimezone *default_zone)
        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);
@@ -444,6 +460,17 @@ e_gw_item_to_cal_component (EGwItem *item, icaltimezone *default_zone)
                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 */
        switch (item_type) {
        case E_GW_ITEM_TYPE_APPOINTMENT :
index c61ca03..0c43cfa 100644 (file)
@@ -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 5fe99bc..3eba5fb 100644 (file)
@@ -52,6 +52,7 @@ struct _EGwItemPrivate {
        GSList *recipient_list;
        GSList *recurrence_dates;
        int trigger; /* alarm */
+       EGwItemOrganizer *organizer;
 
        /* properties for tasks/calendars */
        char *icalid;
@@ -228,6 +229,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);
@@ -319,6 +324,7 @@ e_gw_item_init (EGwItem *item, EGwItemClass *klass)
        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;
@@ -1338,6 +1344,19 @@ e_gw_item_new_from_soap_parameter (const char *container, SoupSoapParameter *par
                                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; 
@@ -1685,6 +1704,21 @@ e_gw_item_set_recipient_list (EGwItem  *item, GSList *new_recipient_list)
        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)
 {
@@ -1719,13 +1753,21 @@ e_gw_item_set_trigger (EGwItem *item, int trigger)
 }
 
 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 */
@@ -1788,7 +1830,7 @@ e_gw_item_append_to_soap_message (EGwItem *item, SoupSoapMessage *msg)
                        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 b0908a8..317aba5 100644 (file)
@@ -98,6 +98,11 @@ typedef struct {
        char *name;
 } 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);
@@ -169,6 +174,10 @@ void        e_gw_item_set_priority (EGwItem *item, const char *new_priority);
 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);