From: Art Cancro Date: Thu, 8 Feb 2024 19:39:59 +0000 (-0500) Subject: Unified multistatus output for all REPORT outputs. X-Git-Tag: v999~52 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=dd9248637b2d2d26c30ace03a97b2877c49af399 Unified multistatus output for all REPORT outputs. "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. --- diff --git a/webcit-ng/server/caldav_reports.c b/webcit-ng/server/caldav_reports.c index 2afade351..f042c7031 100644 --- a/webcit-ng/server/caldav_reports.c +++ b/webcit-ng/server/caldav_reports.c @@ -150,8 +150,6 @@ void cal_multiget_out(long msgnum, StrBuf *ThisHref, StrBuf *Caldata, StrBuf *Re StrBufXMLEscAppend(ReportOut, Caldata, NULL, 0, 0); StrBufAppendPrintf(ReportOut, ""); StrBufAppendPrintf(ReportOut, ""); - 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);