From a3da56611e96dae9fc2f4205e59820b1214e4172 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Thu, 17 Oct 2002 21:34:10 +0000 Subject: if the value is a datetime, convert it to a date 2002-10-17 JP Rosevear * gui/dialogs/recurrence-page.c (fill_ending_date): if the value is a datetime, convert it to a date * gui/itip-utils.c (comp_compliant): convert an UNTIL date value to a datetime value * cal-util/cal-component.c (cal_component_has_simple_recurrence): check to see if the component recurrences meet our definition of "simple" * cal-util/cal-component.h: new proto svn path=/trunk/; revision=18389 --- calendar/gui/dialogs/recurrence-page.c | 24 +++++++++++++++++ calendar/gui/itip-utils.c | 49 ++++++++++++++++++++++++++++++++-- 2 files changed, 71 insertions(+), 2 deletions(-) (limited to 'calendar/gui') diff --git a/calendar/gui/dialogs/recurrence-page.c b/calendar/gui/dialogs/recurrence-page.c index f587c6dbcb..3fb07a0559 100644 --- a/calendar/gui/dialogs/recurrence-page.c +++ b/calendar/gui/dialogs/recurrence-page.c @@ -1534,6 +1534,30 @@ fill_ending_date (RecurrencePage *rpage, struct icalrecurrencetype *r) } else { /* Ending date */ + if (!r->until.is_date) { + CalClient *client = COMP_EDITOR_PAGE (rpage)->client; + CalComponentDateTime dt; + icaltimezone *from_zone, *to_zone; + + cal_component_get_dtstart (priv->comp, &dt); + + if (dt.value->is_date) + to_zone = icaltimezone_get_builtin_timezone (calendar_config_get_timezone ()); + else if (dt.tzid == NULL) + to_zone = icaltimezone_get_utc_timezone (); + else + cal_client_get_timezone (client, dt.tzid, &to_zone); + from_zone = icaltimezone_get_utc_timezone (); + + icaltimezone_convert_time (&r->until, from_zone, to_zone); + + r->until.hour = 0; + r->until.minute = 0; + r->until.second = 0; + r->until.is_date = TRUE; + r->until.is_utc = FALSE; + } + priv->ending_date_tt = r->until; e_dialog_option_menu_set (priv->ending_menu, ENDING_UNTIL, diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c index 224d8b9d52..b3e18422af 100644 --- a/calendar/gui/itip-utils.c +++ b/calendar/gui/itip-utils.c @@ -818,7 +818,7 @@ comp_minimal (CalComponent *comp, gboolean attendee) } static CalComponent * -comp_compliant (CalComponentItipMethod method, CalComponent *comp) +comp_compliant (CalComponentItipMethod method, CalComponent *comp, CalClient *client, icalcomponent *zones) { CalComponent *clone, *temp_clone; struct icaltimetype itt; @@ -828,6 +828,51 @@ comp_compliant (CalComponentItipMethod method, CalComponent *comp) icaltimezone_get_utc_timezone ()); cal_component_set_dtstamp (clone, &itt); + /* Make UNTIL date a datetime in a simple recurrence */ + if (cal_component_has_recurrences (clone) + && cal_component_has_simple_recurrence (clone)) { + GSList *rrule_list; + struct icalrecurrencetype *r; + + cal_component_get_rrule_list (clone, &rrule_list); + r = rrule_list->data; + + if (!icaltime_is_null_time (r->until) && r->until.is_date) { + CalComponentDateTime dt; + icaltimezone *from_zone = NULL, *to_zone; + + cal_component_get_dtstart (clone, &dt); + + if (dt.value->is_date) { + from_zone = icaltimezone_get_builtin_timezone (calendar_config_get_timezone ()); + } else if (dt.tzid == NULL) { + from_zone = icaltimezone_get_utc_timezone (); + } else { + if (zones != NULL) + from_zone = icalcomponent_get_timezone (zones, dt.tzid); + if (from_zone == NULL) + from_zone = icaltimezone_get_builtin_timezone_from_tzid (dt.tzid); + if (from_zone == NULL && client != NULL) + cal_client_get_timezone (client, dt.tzid, &from_zone); + } + + to_zone = icaltimezone_get_utc_timezone (); + + r->until.hour = dt.value->hour; + r->until.minute = dt.value->minute; + r->until.second = dt.value->second; + r->until.is_date = FALSE; + + icaltimezone_convert_time (&r->until, from_zone, to_zone); + r->until.is_utc = TRUE; + + cal_component_set_rrule_list (clone, rrule_list); + cal_component_abort_sequence (clone); + } + + cal_component_free_recur_list (rrule_list); + } + /* We delete incoming alarms anyhow, and this helps with outlook */ cal_component_remove_all_alarms (clone); @@ -904,7 +949,7 @@ itip_send_comp (CalComponentItipMethod method, CalComponent *send_comp, } /* Tidy up the comp */ - comp = comp_compliant (method, send_comp); + comp = comp_compliant (method, send_comp, client, zones); if (comp == NULL) goto cleanup; -- cgit v1.2.3