X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fical_dezonify.c;h=ce448a84e113178a582ce7e202a61a4a13233b1d;hb=f9f3d96f461ddf73c50b7c04503dba4c0f8608b8;hp=0f0027c4f8d914beacf776c462a6972a942a43a7;hpb=a7154f34bec572080b66f0be7df9f717a11b39fc;p=citadel.git diff --git a/citadel/ical_dezonify.c b/citadel/ical_dezonify.c index 0f0027c4f..ce448a84e 100644 --- a/citadel/ical_dezonify.c +++ b/citadel/ical_dezonify.c @@ -55,13 +55,13 @@ icaltimezone *get_default_icaltimezone(void) */ void ical_dezonify_backend(icalcomponent *cal, icalcomponent *rcal, - icalproperty *prop) -{ + icalproperty *prop) { icaltimezone *t = NULL; icalparameter *param; - const char *tzid; + const char *tzid = NULL; 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; @@ -75,7 +75,17 @@ void ical_dezonify_backend(icalcomponent *cal, /* 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") + ); + } } } @@ -98,17 +108,24 @@ void ical_dezonify_backend(icalcomponent *cal, return; } - lprintf(CTDL_DEBUG, " * Was: %s\n", icaltime_as_ical_string(TheTime)); + lprintf(9, " * Was: %s\n", icaltime_as_ical_string(TheTime)); + if (TheTime.is_utc) { - 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) { - lprintf(CTDL_DEBUG, " * Timezone prop found. Converting to UTC.\n"); + lprintf(9, " * Timezone prop found. Converting to UTC.\n"); } else { - lprintf(CTDL_DEBUG, " * Converting default timezone to UTC.\n"); + lprintf(9, " * Converting default timezone to UTC.\n"); } if (t == NULL) { @@ -123,7 +140,7 @@ void ical_dezonify_backend(icalcomponent *cal, } 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) { @@ -165,11 +182,9 @@ void ical_dezonify_recurse(icalcomponent *cal, icalcomponent *rcal) { /* * 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 != NULL; - 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) @@ -191,7 +206,7 @@ void ical_dezonify_recurse(icalcomponent *cal, icalcomponent *rcal) { 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); @@ -203,7 +218,7 @@ void ical_dezonify(icalcomponent *cal) { icalcomponent_free(vt); } - lprintf(CTDL_DEBUG, "ical_dezonify() completed\n"); + lprintf(9, "ical_dezonify() completed\n"); }