#include <stdio.h>
#include <unistd.h>
#include <string.h>
+#include <ctype.h>
FILE *calfile;
int process_location(xmlNode *xml_node);
int process_body(xmlNode *xml_node);
int process_subject(xmlNode *xml_node);
-
+int process_recurrence(xmlNode *xml_node);
int main(int argc, char **argv)
{
process_location(xml_node);
else if (!strcmp((char *)xml_node->name, "Subject"))
process_subject(xml_node);
+ else if (!strcmp((char *)xml_node->name, "Recurrence"))
+ process_recurrence(xml_node);
else
fprintf(stderr, "Unhandled node type '%s'\n", xml_node->name);
}
int process_body(xmlNode *xml_node)
{
const char *body = (char *)xmlNodeGetContent(xml_node);
- int col = 12;
+ int col;
if (!body)
return -1;
- fprintf(calfile, "DESCRIPTION:");
+ col = fprintf(calfile, "DESCRIPTION:");
while (*body) {
switch (*body) {
fprintf(calfile, "SUMMARY:\"%s\"\n", subject);
return 0;
}
+
+int process_recurrence(xmlNode *xml_node)
+{
+ xmlNode *xml_node2;
+ const char *weekly_interval = NULL;
+ const char *weekday = NULL;
+ const char *end_date = NULL;
+
+ 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, "WeeklyRecurrence")) {
+ 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, "Interval"))
+ weekly_interval = (char *)xmlNodeGetContent(xml_node2);
+ else if (!strcmp((char *)xml_node2->name, "DaysOfWeek"))
+ weekday = (char *)xmlNodeGetContent(xml_node2);
+ }
+ } else if (!strcmp((char *)xml_node->name, "EndDateRecurrence")) {
+ 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, "EndDate"))
+ end_date = (char *)xmlNodeGetContent(xml_node2);
+ }
+ }
+ }
+ if (weekly_interval && weekday && end_date) {
+ char enddate_cal[9];
+ char day[3];
+ day[0] = toupper(weekday[0]);
+ day[1] = toupper(weekday[1]);
+ day[2] = 0;
+
+ enddate_cal[0] = end_date[0];
+ enddate_cal[1] = end_date[1];
+ enddate_cal[2] = end_date[2];
+ enddate_cal[3] = end_date[3];
+
+ enddate_cal[4] = end_date[5];
+ enddate_cal[5] = end_date[6];
+
+ enddate_cal[6] = end_date[8];
+ enddate_cal[7] = end_date[9];
+ enddate_cal[8] = 0;
+
+ fprintf(calfile, "RRULE:FREQ=WEEKLY;UNTIL=%sT235959Z;INTERVAL=%s;BYDAY=%s;WKST=SU\n",
+ enddate_cal, weekly_interval, day);
+ return 0;
+ }
+ return -1;
+}