Bring ical_dezonify() into caldav_reports.c
authorArt Cancro <ajc@citadel.org>
Tue, 19 Mar 2024 23:56:32 +0000 (19:56 -0400)
committerArt Cancro <ajc@citadel.org>
Tue, 19 Mar 2024 23:56:32 +0000 (19:56 -0400)
Make a local copy of events being compared, dezonify them.
Now gotta write the rest.

webcit-ng/server/caldav_reports.c
webcit-ng/server/webcit.h

index 9dece4c795cbb5a5af9ce4d721c44fe0f0ae1740..22c90fea62ba981fffdc9b4e54b077e952db0e74 100644 (file)
@@ -259,11 +259,15 @@ void caldav_report_one_item(struct http_transaction *h, struct ctdlsession *c, S
 
 // Compare function for "time-range" tests (RFC4791 section 9.9)
 // Returns nonzero if the supplied icalcomponent occurs within the specified time range
-int caldav_time_range_filter_matches(icalcomponent *cal, char *start_str, char *end_str) {
+int caldav_time_range_filter_matches(icalcomponent *supplied_cal, char *start_str, char *end_str) {
 
        struct icaltimetype start = (start_str ? icaltime_from_string(start_str) : icaltime_null_time());
        struct icaltimetype end = (end_str ? icaltime_from_string(end_str) : icaltime_null_time());
 
+       // make a local copy of the component because we are going to modify it by converting times to UTC
+       icalcomponent *cal = icalcomponent_new_clone(supplied_cal);
+       ical_dezonify(cal);
+
        syslog(LOG_DEBUG, "\033[7mcaldav_time_range_filter_matches()\033[0m : Does this %s fall between %s and %s ?",
                icalcomponent_kind_to_string(icalcomponent_isa(cal)),
                start_str,
@@ -279,7 +283,8 @@ int caldav_time_range_filter_matches(icalcomponent *cal, char *start_str, char *
        icaltimetype dte = icalcomponent_get_dtend(cal);
        syslog(LOG_DEBUG, "component   end: \033[36m%s\033[0m", icaltime_as_ical_string_r(dte));
 
-       return(0);              // reject everything for now
+       icalcomponent_free(cal);
+       return(0);                                              // FIXME reject everything for now
 }
 
 
index 4c5c1588a268ac82d5bd60a91c93c272c670ac52..e422849a4321c3e962253339d34220e5c2f6cea7 100644 (file)
@@ -140,9 +140,13 @@ enum {
 #define DAV_COPY               1               // they are the values used in the Citadel Server MOVE command
 
 
+// FIXME retrieve this from the server
+#define default_zone_name      ""
+
 // Everything below here is generated with this command:
 // cproto -f2 *.c 2>/dev/null |sed 's/^\/\*/\n\/\//g' | sed 's/\ \*\/$//g'
 
+
 // admin_functions.c
 void try_login(struct http_transaction *, struct ctdlsession *);
 void logout(struct http_transaction *, struct ctdlsession *);
@@ -157,6 +161,8 @@ void caldav_xml_chardata(void *, const XML_Char *, int);
 StrBuf *fetch_ical(struct ctdlsession *, long);
 void cal_multiget_out(long, StrBuf *, StrBuf *, StrBuf *);
 void caldav_report_one_item(struct http_transaction *, struct ctdlsession *, StrBuf *, StrBuf *);
+int caldav_time_range_filter_matches(icalcomponent *, char *, char *);
+int caldav_apply_filters(void *, Array *, int);
 void caldav_report(struct http_transaction *, struct ctdlsession *);
 
 // ctdlclient.c
@@ -204,6 +210,12 @@ void perform_one_http_transaction(struct client_handle *);
 char *header_val(struct http_transaction *, char *);
 char *get_url_param(struct http_transaction *, char *);
 
+// ical_dezonify.c
+icaltimezone *get_default_icaltimezone(void);
+void ical_dezonify_backend(icalcomponent *, icalcomponent *, icalproperty *);
+void ical_dezonify_recurse(icalcomponent *, icalcomponent *);
+void ical_dezonify(icalcomponent *);
+
 // main.c
 int main(int, char **);
 
@@ -291,3 +303,5 @@ char *http_datestring(time_t);
 void spawn_another_worker_thread(int *);
 void worker_entry(int *);
 int webserver(char *, int, int);
+
+