/*
* Callback function for mime parser that hunts for calendar content types
- * and turns them into calendar objects
+ * and turns them into calendar objects. If something is found, it is placed
+ * in ird->cal, and the caller now owns that memory and is responsible for freeing it.
*/
void ical_locate_part(char *name, char *filename, char *partnum, char *disp,
void *content, char *cbtype, char *cbcharset, size_t length, char *encoding,
*
* fb The VFREEBUSY component to which we are appending
* top_level_cal The top-level VCALENDAR component which contains VEVENT to be added
- * cal Caller supplies NULL, but we then use this variable for recursion
+ * cal Initially set to the same as top_level_cal by the caller, but then we recurse
*/
void ical_add_to_freebusy(icalcomponent *fb, icalcomponent *top_level_cal, icalcomponent *cal) {
icalproperty *p;
icalvalue *v;
- struct icalperiodtype my_period;
+ struct icalperiodtype this_event_period = icalperiodtype_null_period();
if (!top_level_cal) return;
- if (!cal) cal = top_level_cal;
-
- my_period = icalperiodtype_null_period();
+ if (!cal) return;
/* Convert all time zones to UTC (FIXME this won't work with recurring events) */
- if (icalcomponent_isa(cal) != ICAL_VCALENDAR_COMPONENT) {
+ if (icalcomponent_isa(cal) == ICAL_VCALENDAR_COMPONENT) {
ical_dezonify(cal);
}
/* Convert the DTSTART and DTEND properties to an icalperiod. */
p = icalcomponent_get_first_property(cal, ICAL_DTSTART_PROPERTY);
if (p != NULL) {
- my_period.start = icalproperty_get_dtstart(p);
+ this_event_period.start = icalproperty_get_dtstart(p);
}
p = icalcomponent_get_first_property(cal, ICAL_DTEND_PROPERTY);
if (p != NULL) {
- my_period.end = icalproperty_get_dtstart(p);
+ this_event_period.end = icalproperty_get_dtstart(p);
}
/* Now add it. */
- icalcomponent_add_property(fb,
- icalproperty_new_freebusy(my_period)
- );
+ icalcomponent_add_property(fb, icalproperty_new_freebusy(this_event_period));
/* Make sure the DTSTART property of the freebusy *list* is set to
* the DTSTART property of the *earliest event*.
*/
p = icalcomponent_get_first_property(fb, ICAL_DTSTART_PROPERTY);
if (p == NULL) {
- icalcomponent_set_dtstart(fb,
- icalcomponent_get_dtstart(cal) );
+ icalcomponent_set_dtstart(fb, icalcomponent_get_dtstart(cal));
}
else {
- if (icaltime_compare(
- icalcomponent_get_dtstart(cal),
- icalcomponent_get_dtstart(fb)
- ) < 0) {
- icalcomponent_set_dtstart(fb,
- icalcomponent_get_dtstart(cal) );
+ if (icaltime_compare(icalcomponent_get_dtstart(cal), icalcomponent_get_dtstart(fb)) < 0) {
+ icalcomponent_set_dtstart(fb, icalcomponent_get_dtstart(cal));
}
}
*/
p = icalcomponent_get_first_property(fb, ICAL_DTEND_PROPERTY);
if (p == NULL) {
- icalcomponent_set_dtend(fb,
- icalcomponent_get_dtend(cal) );
+ icalcomponent_set_dtend(fb, icalcomponent_get_dtend(cal));
}
else {
- if (icaltime_compare(
- icalcomponent_get_dtend(cal),
- icalcomponent_get_dtend(fb)
- ) > 0) {
- icalcomponent_set_dtend(fb,
- icalcomponent_get_dtend(cal) );
+ if (icaltime_compare(icalcomponent_get_dtend(cal), icalcomponent_get_dtend(fb)) > 0) {
+ icalcomponent_set_dtend(fb, icalcomponent_get_dtend(cal));
}
}
-
}
*
*/
void ical_freebusy_backend(long msgnum, void *data) {
- icalcomponent *cal;
+ icalcomponent *fb;
struct CtdlMessage *msg = NULL;
struct ical_respond_data ird;
- cal = (icalcomponent *)data;
+ fb = (icalcomponent *)data; /* User-supplied data will be the VFREEBUSY component */
msg = CtdlFetchMessage(msgnum, 1);
if (msg == NULL) return;
);
CtdlFreeMessage(msg);
- if (ird.cal == NULL) return;
-
- ical_add_to_freebusy(cal, ird.cal, NULL);
-
- /* Now free the memory. */
- icalcomponent_free(ird.cal);
+ if (ird.cal) {
+ CtdlLogPrintf(CTDL_DEBUG, "Adding event from msg #%ld...\n", msgnum);
+ ical_add_to_freebusy(fb, ird.cal, ird.cal); /* Add VEVENT times to VFREEBUSY */
+ CtdlLogPrintf(CTDL_DEBUG, "...done.\n");
+ icalcomponent_free(ird.cal);
+ }
}