Unified multistatus output for all REPORT outputs.
authorArt Cancro <ajc@citadel.org>
Thu, 8 Feb 2024 19:39:59 +0000 (14:39 -0500)
committerArt Cancro <ajc@citadel.org>
Thu, 8 Feb 2024 19:39:59 +0000 (14:39 -0500)
"multiget" and "query" REPORTs now use the same code path for
outputing results in DAV "multi-status" format, keeping this logic
DRY.

"query" reports are currently operating through a vile sleazy hack
that makes it output every item in the calendar without applying
any filters.  That's the next piece to work on.

webcit-ng/server/caldav_reports.c

index 2afade3515a952a5a69672f1cd4b01c9f638f6c3..f042c70311388b6194752a7f40a30374ef097af1 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);
+       }
 }
 
 
@@ -252,15 +254,19 @@ 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);
+                               // this is a horrible temporary hack to output every item
+                               int qualify = 1;
 
-                               // End - evaluate the calendar item
+                               if (qualify) {
+                                       cal_multiget_out(m, NULL, one_item, ReportOut);
+                               }
+
+                               icalcomponent_free(cal);
+                               FreeStrBuf(&one_item);
 
                        }
                        array_free(msglist);