From: David Woodhouse Date: Mon, 19 Jul 2010 00:16:36 +0000 (+0100) Subject: Attempt to handle reminders X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1ce615141e0fcf03361ad253d75c6f604749a3cf;p=users%2Fdwmw2%2Fews-sync.git Attempt to handle reminders --- diff --git a/ews2ical.c b/ews2ical.c index aa5838b..7ab05c6 100644 --- a/ews2ical.c +++ b/ews2ical.c @@ -33,6 +33,7 @@ int process_body(icalcomponent *comp, xmlNode *xml_node); int process_subject(icalcomponent *comp, xmlNode *xml_node); int process_recurrence(icalcomponent *comp, xmlNode *xml_node); int process_itemid(icalcomponent *comp, xmlNode *xmlnode); +int process_reminder_mins(icalcomponent *comp, xmlNode *xmlnode); icaltimezone *get_timezone(xmlNode *xmlnode); icaltimezone *get_meeting_timezone(xmlNode *xml_node); @@ -192,9 +193,36 @@ icalcomponent *ews_calitem_to_ical(xmlNode *xml_node) process_recurrence(comp, xml_node); else if (!strcmp((char *)xml_node->name, "ItemId")) process_itemid(comp, xml_node); + else if (!strcmp((char *)xml_node->name, "ReminderMinutesBeforeStart")) + process_reminder_mins(comp, xml_node); + else if (!strcmp((char *)xml_node->name, "ParentFolderId") || + !strcmp((char *)xml_node->name, "DateTimeReceived") || + !strcmp((char *)xml_node->name, "Size") || + !strcmp((char *)xml_node->name, "IsSubmitted") || + !strcmp((char *)xml_node->name, "IsDraft") || + !strcmp((char *)xml_node->name, "IsFromMe") || + !strcmp((char *)xml_node->name, "IsResend") || + !strcmp((char *)xml_node->name, "IsUnmodified") || + !strcmp((char *)xml_node->name, "DateTimeSent") || + !strcmp((char *)xml_node->name, "DateTimeCreated") || + !strcmp((char *)xml_node->name, "ResponseObjects") || + !strcmp((char *)xml_node->name, "DisplayCc") || + !strcmp((char *)xml_node->name, "DisplayTo") || + !strcmp((char *)xml_node->name, "Culture") || + !strcmp((char *)xml_node->name, "IsRecurring") || + !strcmp((char *)xml_node->name, "MeetingRequestWasSent") || + !strcmp((char *)xml_node->name, "IsResponseRequested") || + !strcmp((char *)xml_node->name, "MyResponseType") || + !strcmp((char *)xml_node->name, "ConflictingMeetingCount") || + !strcmp((char *)xml_node->name, "AdjacentMeetingCount") || + !strcmp((char *)xml_node->name, "TimeZone") || + !strcmp((char *)xml_node->name, "AppointmentSequenceNumber") || + !strcmp((char *)xml_node->name, "AppointmentState")) { + /* Ignore these */ + } #if 0 - else - fprintf(stderr, "Unhandled node type '%s'\n", xml_node->name); + else + fprintf(stderr, "Unhandled node type '%s'\n", xml_node->name); #endif } icalcomponent_add_component(calcomp, comp); @@ -525,6 +553,32 @@ int process_itemid(icalcomponent *comp, xmlNode *xml_node) icalcomponent_set_uid(comp, id); return 0; } +int process_reminder_mins(icalcomponent *calcomp, xmlNode *xml_node) +{ + const char *minutes; + int minutesnr; + icalcomponent *comp; + icalproperty *prop; + struct icaltriggertype trig; + + minutes = (char *)xmlNodeGetContent(xml_node); + if (!minutes) + return -1; + + minutesnr = strtol(minutes, NULL, 10); + + comp = icalcomponent_new_valarm(); + prop = icalproperty_new_action(ICAL_ACTION_DISPLAY); + icalcomponent_add_property(comp, prop); + prop = icalproperty_new_description("REMINDER"); + icalcomponent_add_property(comp, prop); + trig = icaltriggertype_from_int(-minutesnr * 60); + prop = icalproperty_new_trigger(trig); + icalcomponent_add_property(comp, prop); + + icalcomponent_add_component(calcomp, comp); + return 0; +} static const char *ews_tz_to_ical(const char *ewstz) {