From: Art Cancro Date: Fri, 22 Dec 2023 23:58:46 +0000 (-0500) Subject: Worked out the syntax for requesting a calendar range X-Git-Tag: v997~55 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=ebc6e316f87b5091d06055cd9c2d97cb46985557 Worked out the syntax for requesting a calendar range --- diff --git a/webcit-ng/api.txt b/webcit-ng/api.txt index 8660c8f2c..cf0652af0 100644 --- a/webcit-ng/api.txt +++ b/webcit-ng/api.txt @@ -16,6 +16,12 @@ GET /ctdl/r//stat JSON dictionary of the server GET /ctdl/r// Retrieve the content of an individual message GET /ctdl/r///json Retrieve an individual message in a room, encapsulated in JSON GET /ctdl/r/// Retrieve a MIME component of a message, specified by partnum + +GET /ctdl/r//calendar:: + Retrieve calendar items in the current room. + "from" and "to" comprise a range expressed in unix timestamps. + You can omit either or both timestamps but not the colons. + DELETE /ctdl/r// Delete a message from a room MOVE /ctdl/r// Move a message to another room (requires Destination) diff --git a/webcit-ng/server/calendar_functions.c b/webcit-ng/server/calendar_functions.c index 73305d733..7d88996ed 100644 --- a/webcit-ng/server/calendar_functions.c +++ b/webcit-ng/server/calendar_functions.c @@ -11,6 +11,17 @@ // Client is requesting a message list void calendar_msglist(struct http_transaction *h, struct ctdlsession *c, char *range) { + // Determine the date/time range requested by the client + time_t lo = atol(range); + char *colon = strchr(range, ':'); + time_t hi = colon ? atol(++colon) : LONG_MAX; + + // Rule out impossible ranges + if (hi < lo) { + do_404(h); + return; + } + // Begin by requesting all messages in the room int i = 0; Array *msglist = get_msglist(c, "ALL"); @@ -23,6 +34,13 @@ void calendar_msglist(struct http_transaction *h, struct ctdlsession *c, char *r long m; memcpy(&m, array_get_element_at(msglist, i), sizeof(long)); syslog(LOG_DEBUG, "FIXME %ld", m); + + // now we have to: + // 1. fetch the message from citadel server + // 2. parse the ical + // 3. figure out range + // we should steal code from webcit-classic for this + } array_free(msglist); diff --git a/webcit-ng/server/room_functions.c b/webcit-ng/server/room_functions.c index 24195e773..12b5df598 100644 --- a/webcit-ng/server/room_functions.c +++ b/webcit-ng/server/room_functions.c @@ -226,7 +226,7 @@ void object_in_room(struct http_transaction *h, struct ctdlsession *c) { return; } - if (!strncasecmp(buf, "calendar.", 9)) { // Client is requesting a calendar range + if (!strncasecmp(buf, "calendar:", 9)) { // Client is requesting a calendar range unescape_input(&buf[9]); calendar_msglist(h, c, &buf[9]); return;