Solved P=NP
[citadel.git] / webcit-ng / server / caldav_reports.c
index 2afade3515a952a5a69672f1cd4b01c9f638f6c3..1c95c380652d39abfd84dbf2ab745f627aba7fcd 100644 (file)
@@ -150,8 +150,6 @@ void cal_multiget_out(long msgnum, StrBuf *ThisHref, StrBuf *Caldata, StrBuf *Re
                StrBufXMLEscAppend(ReportOut, Caldata, NULL, 0, 0);
                StrBufAppendPrintf(ReportOut, "</C:calendar-data>");
                StrBufAppendPrintf(ReportOut, "</D:prop>");
-               FreeStrBuf(&Caldata);
-               Caldata = NULL;
        }
        else {
                // syslog(LOG_DEBUG, "caldav_report_one_item(%s) 404 not found", ChrPtr(ThisHref));
@@ -196,6 +194,10 @@ void caldav_report_one_item(struct http_transaction *h, struct ctdlsession *c, S
        }
 
        cal_multiget_out(msgnum, ThisHref, Caldata, ReportOut);
+
+       if (Caldata != NULL) {
+               FreeStrBuf(&Caldata);
+       }
 }
 
 
@@ -222,7 +224,7 @@ void caldav_report(struct http_transaction *h, struct ctdlsession *c) {
        XML_Parse(xp, h->request_body, h->request_body_length, 1);
        XML_ParserFree(xp);
 
-       if (crp.Chardata != NULL) {     // Discard any trailing chardata ... normally nothing here
+       if (crp.Chardata != NULL) {             // Discard any trailing chardata ... normally nothing here
                FreeStrBuf(&crp.Chardata);
                crp.Chardata = NULL;
        }
@@ -252,15 +254,24 @@ void caldav_report(struct http_transaction *h, struct ctdlsession *c) {
                                long m;
                                memcpy(&m, array_get_element_at(msglist, i), sizeof(long));
 
-                               // Begin -- evaluate the calendar item
+                               // load and parse one calendar item
+                               StrBuf *one_item = fetch_ical(c, m);
+                               icalcomponent *cal = icalcomponent_new_from_string(ChrPtr(one_item));
 
-                               syslog(LOG_DEBUG, "evaluating message %ld", m);
-                               StrBuf *one_item;
-                               one_item = fetch_ical(c, m);
-                               syslog(LOG_DEBUG, "calendar item:\n---\n\033[33m%s\n---\033[0m", ChrPtr(one_item));
-                               FreeStrBuf(&one_item);
+                               // qualify will be set to nonzero if this calendar item is a match for the QUERY.
+                               int qualify = 0;
+
+                               // this is a horrible temporary hack to output every item (for now)
+                               qualify = 1;
 
-                               // End - evaluate the calendar item
+                               // Did this calendar item match the query?  If so, output it.
+                               if (qualify) {
+                                       // FIXME need to populate the Href instead of NULL
+                                       cal_multiget_out(m, NULL, one_item, ReportOut);
+                               }
+
+                               icalcomponent_free(cal);
+                               FreeStrBuf(&one_item);
 
                        }
                        array_free(msglist);