From: David Woodhouse Date: Sat, 17 Jul 2010 16:19:08 +0000 (+0100) Subject: Handle numbered recurrences X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=0857620e88262eced9d09ff917588d69953ec666;p=users%2Fdwmw2%2Fews-sync.git Handle numbered recurrences --- diff --git a/ews2ical.c b/ews2ical.c index bcb2992..bd3c883 100644 --- a/ews2ical.c +++ b/ews2ical.c @@ -317,6 +317,7 @@ int process_recurrence(xmlNode *xml_node) const char *end_date = NULL; const char *day_of_month = NULL; const char *month = NULL; + const char *nr_recurrences = NULL; for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) { if (xml_node->type != XML_ELEMENT_NODE) @@ -349,6 +350,14 @@ int process_recurrence(xmlNode *xml_node) if (!strcmp((char *)xml_node2->name, "EndDate")) end_date = (char *)xmlNodeGetContent(xml_node2); } + } else if (!strcmp((char *)xml_node->name, "NumberedRecurrence")) { + for (xml_node2 = xml_node->children; xml_node2; + xml_node2 = xml_node2->next) { + if (xml_node2->type != XML_ELEMENT_NODE) + continue; + if (!strcmp((char *)xml_node2->name, "NumberOfOccurrences")) + nr_recurrences = (char *)xmlNodeGetContent(xml_node2); + } } } if (day_of_month && month) { @@ -360,7 +369,7 @@ int process_recurrence(xmlNode *xml_node) fprintf(stderr, "Unrecognised month name '%s'\n", month); return -1; } - fprintf(calfile, "RRULE:FREQ=YEARLY;BYMONTH=%d;BYMONTHDAY=%s\n", + fprintf(calfile, "RRULE:FREQ=YEARLY;BYMONTH=%d;BYMONTHDAY=%s", monthnr+1, day_of_month); } else if (weekly_interval && weekday) { char day[3]; @@ -370,13 +379,20 @@ int process_recurrence(xmlNode *xml_node) fprintf(calfile, "RRULE:FREQ=WEEKLY;INTERVAL=%s;BYDAY=%s;WKST=SU", weekly_interval, day); - if (end_date) - fprintf(calfile, ";UNTIL=%.4s%.2s%.2sT235959Z", - end_date, end_date + 5, end_date + 8); - fputc('\n', calfile); - return 0; + } else { + fprintf(stderr, "Unknown Recurrence type\n"); + return -1; } - return -1; + + if (end_date) { + fprintf(calfile, ";UNTIL=%.4s%.2s%.2sT235959Z", + end_date, end_date + 5, end_date + 8); + } else if (nr_recurrences) { + fprintf(calfile, ";COUNT=%s", nr_recurrences); + } + + fputc('\n', calfile); + return 0; } int process_itemid(xmlNode *xml_node)