X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fserver%2Fmodules%2Fcalendar%2Fcalendar_report.c;h=c9d7eb19967d29da9ae67eb7ee3b18f980585cbd;hb=ba196da6b1ae7bdd2e72558ff35fe17d8597d141;hp=a7fb8ba1d3094032a85df3365612257ad67573b3;hpb=5dace62b01176b22d2901ebdbfba6e07c93fa8b4;p=citadel.git diff --git a/citadel/server/modules/calendar/calendar_report.c b/citadel/server/modules/calendar/calendar_report.c index a7fb8ba1d..c9d7eb199 100644 --- a/citadel/server/modules/calendar/calendar_report.c +++ b/citadel/server/modules/calendar/calendar_report.c @@ -17,14 +17,50 @@ #include "serv_calendar.h" -// CtdlForEachMessage back end +// CtdlForEachMessage callback for calendar_report() void calendar_report_backend(long msgnum, void *data) { - syslog(LOG_DEBUG, "%ld", msgnum); + struct CtdlMessage *msg = NULL; + struct ical_respond_data ird; + + syslog(LOG_DEBUG, "calendar_report: calendar_report_backend(%ld)", msgnum); + + // Look for the calendar event... + msg = CtdlFetchMessage(msgnum, 1); + if (msg == NULL) return; + memset(&ird, 0, sizeof ird); + strcpy(ird.desired_partnum, "_HUNT_"); + mime_parser( + CM_RANGE(msg, eMessageText), + *ical_locate_part, // This callback function extracts a vcalendar item from the message. + NULL, + NULL, + (void *) &ird, // Give it this place to put the vcalendar object. + 0 + ); + CM_Free(msg); + if (ird.cal == NULL) return; // If there was no calendar item in this message, do nothing else. + + + char *ser = icalcomponent_as_ical_string_r(ird.cal); + if (ser) { + size_t len = strlen(ser); + client_write(ser, len); + if ( (len>0) && (ser[len-1] != '\n') ) { + syslog(LOG_DEBUG, "last char was %d", ser[len]); + client_write(HKEY("\n")); + } + free(ser); + } + + + icalcomponent_free(ird.cal); // Return the memory we got from the callback. } +// Go through a calendar room and output calendar objects after applying caller specified filters. +// It is intended as a data source for WebCit (both the UI and CalDAV) void calendar_report(void) { - char buf[SIZ]; + void *filter_rules; // Don't know yet what form this will take // Only allow this operation if we're in a room containing a calendar or tasks view if ( (CC->room.QRdefaultview != VIEW_CALENDAR) @@ -34,21 +70,17 @@ void calendar_report(void) { return; // This room does not contain a calendar. } + cprintf("%d Filtered calendar listing:\n", LISTING_FOLLOWS); // Now go through the room encapsulating all calendar items. - void *foo; CtdlForEachMessage(MSGS_ALL, 0, NULL, NULL, NULL, calendar_report_backend, - (void *) foo + (void *) filter_rules ); - cprintf("%d Not finished\n", ERROR); - //cprintf("%d Send query then receive response\n", SEND_THEN_RECV); - //while(client_getln(buf, sizeof buf) >= 0 && strcmp(buf,"000")) { - //} - //cprintf("000\n"); + cprintf("000\n"); }