return 0;
}
+static int weekdays_to_recur_byday(const char *days, struct icalrecurrencetype *ical_recur)
+{
+ const char *space;
+ const char *day;
+ int count = 0;
+ int daynr;
+
+ do {
+ space = strchr(days, ' ');
+ if (space)
+ day = strndup(days, space - days);
+ else
+ day = days;
+
+ daynr = weekday_to_number(day, 7);
+ if (!daynr)
+ return -1;
+
+ if (count == ICAL_BY_DAY_SIZE) {
+ fprintf(stderr, "Too many days in DaysOfWeek list\n");
+ return -1;
+ }
+
+ ical_recur->by_day[count++] = daynr;
+ if (space) {
+ free((char *)day);
+ days = space + 1;
+ }
+ } while (space);
+ return 0;
+}
+
+
+
int process_weeklyrecurrence(xmlNode *xml_node, struct icalrecurrencetype *ical_recur)
{
const char *interval = NULL, *weekday = NULL, *firstday = NULL;
- int intervalnr, daynr, firstdaynr;
+ int intervalnr, firstdaynr;
for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
if (xml_node->type != XML_ELEMENT_NODE)
fprintf(stderr, "Failed to parse Interval '%s'\n", interval);
return -1;
}
- daynr = weekday_to_number(weekday, 7);
- if (!daynr)
- return -1;
-
if (firstday)
firstdaynr = weekday_to_number(firstday, 7);
else
firstdaynr = 0;
icalrecurrencetype_clear(ical_recur);
- ical_recur->freq = ICAL_WEEKLY_RECURRENCE;
ical_recur->interval = intervalnr;
- ical_recur->by_day[0] = daynr;
ical_recur->week_start = firstdaynr;
+
+ if (weekdays_to_recur_byday(weekday, ical_recur))
+ return -1;
+
+ ical_recur->freq = ICAL_WEEKLY_RECURRENCE;
return 0;
}
int process_dailyrecurrence(xmlNode *xml_node, struct icalrecurrencetype *ical_recur)