]> www.infradead.org Git - users/dwmw2/ews-sync.git/commitdiff
Fix all attendees turning up as organisers, handle OptionalAttendees
authorDavid Woodhouse <dwmw2@infradead.org>
Sun, 18 Jul 2010 23:53:09 +0000 (00:53 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Sun, 18 Jul 2010 23:53:48 +0000 (00:53 +0100)
ews2ical.c

index e8277be659626237f07fc6ace758f40f5e9922eb..aa5838b5eabf62c5fb9199963e0aa2fe25cb2b1d 100644 (file)
@@ -25,6 +25,7 @@ int process_dailyrecurrence(xmlNode *xml_node, struct icalrecurrencetype *ical_r
 
 int process_organizer(icalcomponent *comp, xmlNode *xml_node);
 int process_required_attendees(icalcomponent *comp, xmlNode *xml_node);
+int process_optional_attendees(icalcomponent *comp, xmlNode *xml_node);
 int process_start(icalcomponent *comp, xmlNode *xml_node, icaltimezone *zone);
 int process_end(icalcomponent *comp, xmlNode *xml_node, icaltimezone *zone);
 int process_location(icalcomponent *comp, xmlNode *xml_node);
@@ -175,6 +176,8 @@ icalcomponent *ews_calitem_to_ical(xmlNode *xml_node)
                        process_organizer(comp, xml_node);
                else if (!strcmp((char *)xml_node->name, "RequiredAttendees"))
                        process_required_attendees(comp, xml_node);
+               else if (!strcmp((char *)xml_node->name, "OptionalAttendees"))
+                       process_optional_attendees(comp, xml_node);
                else if (!strcmp((char *)xml_node->name, "Start"))
                        process_start(comp, xml_node, icaltz);
                else if (!strcmp((char *)xml_node->name, "End"))
@@ -252,7 +255,7 @@ int process_organizer(icalcomponent *comp, xmlNode *xml_node)
        return 0;
 }
 
-int process_required_attendee(icalcomponent *comp, xmlNode *xml_node)
+int process_attendee(icalcomponent *comp, xmlNode *xml_node, icalparameter_role role)
 {
        icalproperty *prop;
        icalparameter *param;
@@ -268,11 +271,11 @@ int process_required_attendee(icalcomponent *comp, xmlNode *xml_node)
 
                        asprintf(&mailtoname, "mailto:%s", email);
                        
-                       prop = icalproperty_new_organizer(mailtoname);
+                       prop = icalproperty_new_attendee(mailtoname);
                        free(mailtoname);
                        param = icalparameter_new_cn(name);
                        icalproperty_add_parameter(prop, param);
-                       param = icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT);
+                       param = icalparameter_new_role(role);
                        icalproperty_add_parameter(prop, param);
                        icalcomponent_add_property(comp, prop);
                }
@@ -286,7 +289,22 @@ int process_required_attendees(icalcomponent *comp, xmlNode *xml_node)
                if (xml_node->type != XML_ELEMENT_NODE)
                        continue;
                if (!strcmp((char *)xml_node->name, "Attendee")) {
-                       if (process_required_attendee(comp, xml_node))
+                       if (process_attendee(comp, xml_node,
+                                            ICAL_ROLE_REQPARTICIPANT))
+                               { }
+               }
+       }
+       return 0;
+}
+
+int process_optional_attendees(icalcomponent *comp, xmlNode *xml_node)
+{
+       for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
+               if (xml_node->type != XML_ELEMENT_NODE)
+                       continue;
+               if (!strcmp((char *)xml_node->name, "Attendee")) {
+                       if (process_attendee(comp, xml_node,
+                                            ICAL_ROLE_OPTPARTICIPANT))
                                { }
                }
        }