aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
authorJP Rosevear <jpr@ximian.com>2002-10-18 05:34:10 +0800
committerJP Rosevear <jpr@src.gnome.org>2002-10-18 05:34:10 +0800
commita3da56611e96dae9fc2f4205e59820b1214e4172 (patch)
tree0615b0746c4f5513d5b251580de7cf988a304efe /calendar/gui
parentd536b6d10b7e403d017b9b5a935657dcf23115b3 (diff)
downloadgsoc2013-evolution-a3da56611e96dae9fc2f4205e59820b1214e4172.tar.gz
gsoc2013-evolution-a3da56611e96dae9fc2f4205e59820b1214e4172.tar.zst
gsoc2013-evolution-a3da56611e96dae9fc2f4205e59820b1214e4172.zip
if the value is a datetime, convert it to a date
2002-10-17 JP Rosevear <jpr@ximian.com> * 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
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/dialogs/recurrence-page.c24
-rw-r--r--calendar/gui/itip-utils.c49
2 files changed, 71 insertions, 2 deletions
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;