to handle properties that are declared 'TZID=GMT' which is a valid
but unorthodox way of declaring that the property is UTC/GMT. The
functions now detect this style of declaration and automatically
converts to 'Z syntax'. Calendar events created or modified by the
Outlook connector now show up in WebCit with the correct time.
*/
void ical_dezonify_backend(icalcomponent *cal,
icalcomponent *rcal,
*/
void ical_dezonify_backend(icalcomponent *cal,
icalcomponent *rcal,
icaltimezone *t = NULL;
icalparameter *param;
icaltimezone *t = NULL;
icalparameter *param;
+ const char *tzid = NULL;
struct icaltimetype TheTime;
struct icaltimetype TheTime;
+ int utc_declared_as_tzid = 0; /**< Component declared 'TZID=GMT' instead of using Z syntax */
/* Give me nothing and I will give you nothing in return. */
if (cal == NULL) return;
/* Give me nothing and I will give you nothing in return. */
if (cal == NULL) return;
/* Convert it to an icaltimezone type. */
if (tzid != NULL) {
/* Convert it to an icaltimezone type. */
if (tzid != NULL) {
- t = icalcomponent_get_timezone(cal, tzid);
+ lprintf(9, " * Stringy supplied timezone is: '%s'\n", tzid);
+ if ( (!strcasecmp(tzid, "UTC")) || (!strcasecmp(tzid, "GMT")) ) {
+ utc_declared_as_tzid = 1;
+ lprintf(9, " * ...and we handle that internally.\n");
+ }
+ else {
+ t = icalcomponent_get_timezone(cal, tzid);
+ lprintf(9, " * ...and I %s have tzdata for that zone.\n",
+ (t ? "DO" : "DO NOT")
+ );
+ }
- lprintf(CTDL_DEBUG, " * Was: %s\n", icaltime_as_ical_string(TheTime));
+ lprintf(9, " * Was: %s\n", icaltime_as_ical_string(TheTime));
+
- lprintf(CTDL_DEBUG, " * This property is ALREADY UTC.\n");
+ lprintf(9, " * This property is ALREADY UTC.\n");
+ }
+
+ else if (utc_declared_as_tzid) {
+ lprintf(9, " * Replacing '%s' TZID with 'Z' suffix.\n", tzid);
+ TheTime.is_utc = 1;
else {
/* Do the conversion. */
if (t != NULL) {
else {
/* Do the conversion. */
if (t != NULL) {
- lprintf(CTDL_DEBUG, " * Timezone prop found. Converting to UTC.\n");
+ lprintf(9, " * Timezone prop found. Converting to UTC.\n");
- lprintf(CTDL_DEBUG, " * Converting default timezone to UTC.\n");
+ lprintf(9, " * Converting default timezone to UTC.\n");
}
icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER);
}
icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER);
- lprintf(CTDL_DEBUG, " * Now: %s\n", icaltime_as_ical_string(TheTime));
+ lprintf(9, " * Now: %s\n", icaltime_as_ical_string(TheTime));
/* Now add the converted property back in. */
if (icalproperty_isa(prop) == ICAL_DTSTART_PROPERTY) {
/* Now add the converted property back in. */
if (icalproperty_isa(prop) == ICAL_DTSTART_PROPERTY) {
/*
* Now look for DTSTART and DTEND properties
*/
/*
* Now look for DTSTART and DTEND properties
*/
- for (p=icalcomponent_get_first_property(
- rcal, ICAL_ANY_PROPERTY);
+ for (p=icalcomponent_get_first_property(rcal, ICAL_ANY_PROPERTY);
- p = icalcomponent_get_next_property(
- rcal, ICAL_ANY_PROPERTY)
+ p = icalcomponent_get_next_property(rcal, ICAL_ANY_PROPERTY)
) {
if (
(icalproperty_isa(p) == ICAL_DTSTART_PROPERTY)
) {
if (
(icalproperty_isa(p) == ICAL_DTSTART_PROPERTY)
void ical_dezonify(icalcomponent *cal) {
icalcomponent *vt = NULL;
void ical_dezonify(icalcomponent *cal) {
icalcomponent *vt = NULL;
- lprintf(CTDL_DEBUG, "ical_dezonify() started\n");
+ lprintf(9, "ical_dezonify() started\n");
/* Convert all times to UTC */
ical_dezonify_recurse(cal, cal);
/* Convert all times to UTC */
ical_dezonify_recurse(cal, cal);
icalcomponent_free(vt);
}
icalcomponent_free(vt);
}
- lprintf(CTDL_DEBUG, "ical_dezonify() completed\n");
+ lprintf(9, "ical_dezonify() completed\n");