From 2c95c4d8e9f237bc2428b05d976d01241d3394ba Mon Sep 17 00:00:00 2001 From: Damon Chaplin Date: Tue, 3 Jul 2001 06:06:18 +0000 Subject: added virtual method to get a VTIMEZONE component given a TZID. We need 2001-07-03 Damon Chaplin * pcs/cal-backend.[hc]: added virtual method to get a VTIMEZONE component given a TZID. We need this to resolve TZIDs when expanding an event using cal_recur_generate_instances() in query.c. * pcs/cal-backend-file.c (cal_backend_file_get_timezone): implemented virtual method. (cal_backend_file_update_object): fixed bug, kind -> child_kind. * pcs/query.c (func_occur_in_time_range): use the virtual method for resolving TZIDs. The other way didn't work anyway, as we didn't have the entire VCALENDAR with VTIMEZONEs in it. * gui/dialogs/recurrence-page.c (init_widgets): (make_ending_until_special): moved the call to e_date_edit_set_get_time_callback() from init_widgets to make_ending_until_special(), since that is where the widget gets created. * gui/e-timezone-entry.c (e_timezone_entry_set_timezone): handle zone being NULL. svn path=/trunk/; revision=10732 --- calendar/pcs/cal-backend-file.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'calendar/pcs/cal-backend-file.c') diff --git a/calendar/pcs/cal-backend-file.c b/calendar/pcs/cal-backend-file.c index 17765f918c..06c90b79f8 100644 --- a/calendar/pcs/cal-backend-file.c +++ b/calendar/pcs/cal-backend-file.c @@ -93,6 +93,8 @@ static gboolean cal_backend_file_update_object (CalBackend *backend, const char const char *calobj); static gboolean cal_backend_file_remove_object (CalBackend *backend, const char *uid); +static icaltimezone* cal_backend_file_get_timezone (CalBackend *backend, const char *tzid); + static CalBackendClass *parent_class; @@ -159,6 +161,8 @@ cal_backend_file_class_init (CalBackendFileClass *class) backend_class->get_alarms_for_object = cal_backend_file_get_alarms_for_object; backend_class->update_object = cal_backend_file_update_object; backend_class->remove_object = cal_backend_file_remove_object; + + backend_class->get_timezone = cal_backend_file_get_timezone; } /* Object initialization function for the file backend */ @@ -947,13 +951,14 @@ add_instance (CalComponent *comp, time_t start, time_t end, gpointer data) } -/* FIXME */ static icaltimezone* resolve_tzid (const char *tzid, gpointer data) { icalcomponent *vcalendar_comp = data; - if (!strcmp (tzid, "UTC")) + if (!tzid || !tzid[0]) + return NULL; + else if (!strcmp (tzid, "UTC")) return icaltimezone_get_utc_timezone (); else return icalcomponent_get_timezone (vcalendar_comp, tzid); @@ -1664,9 +1669,9 @@ cal_backend_file_update_object (CalBackend *backend, const char *uid, const char ICAL_ANY_COMPONENT); while (subcomp) { child_kind = icalcomponent_isa (subcomp); - if (kind == ICAL_VEVENT_COMPONENT - || kind == ICAL_VTODO_COMPONENT - || kind == ICAL_VJOURNAL_COMPONENT) { + if (child_kind == ICAL_VEVENT_COMPONENT + || child_kind == ICAL_VTODO_COMPONENT + || child_kind == ICAL_VJOURNAL_COMPONENT) { icalcomp = subcomp; num_found++; } @@ -1761,3 +1766,21 @@ cal_backend_file_remove_object (CalBackend *backend, const char *uid) return TRUE; } + +static icaltimezone* +cal_backend_file_get_timezone (CalBackend *backend, const char *tzid) +{ + CalBackendFile *cbfile; + CalBackendFilePrivate *priv; + + cbfile = CAL_BACKEND_FILE (backend); + priv = cbfile->priv; + + g_return_val_if_fail (priv->icalcomp != NULL, NULL); + + if (!strcmp (tzid, "UTC")) + return icaltimezone_get_utc_timezone (); + else + return icalcomponent_get_timezone (priv->icalcomp, tzid); +} + -- cgit v1.2.3