From 8d96fe16f15f653d0809603ccaecd677e5708d8d Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Mon, 18 Dec 2000 23:47:52 +0000 Subject: Alarm instance generation support for the Wombat. 2000-12-18 Federico Mena Quintero Alarm instance generation support for the Wombat. * idl/evolution-calendar.idl (Cal::CalAlarmInstance): Changed to have an alarm UID, the trigger time, and the actual occurrence time. (Cal::CalComponentAlarms): New structure to hold a pair of a component and its alarms that trigger in a particular range of time. (Cal::getAlarmsInRange): Changed to return a CalComponentAlarmsSeq. * cal-util/cal-component.h (CalAlarmInstance): New C-side structure to match the one on the IDL. (CalComponentAlarms): Ditto. (CalAlarmAction): Renamed from CalComponentAlarmAction. (CalAlarmTriggerType): Renamed from CalComponentAlarmTriggerType. Encoded the START and END parameters for the RELATED parameter in this enum, too. Added a NONE value for invalid or missing trigger specifications. (CalComponentAlarmTriggerRelated): Removed. (CalAlarmTrigger): Renamed from CalComponentAlarmTrigger. Renamed the duration/time fields to rel_duration/abs_time, respectively. * cal-util/cal-component.c (cal_component_alarm_get_trigger): Changed to use the new trigger structure. (cal_component_alarm_set_trigger): Likewise. (cal_component_alarm_free_trigger): Removed function. (cal_component_has_alarms): Count the elements in the alarm_uid_hash instead of trying to fetch the first alarm subcomponent. (cal_component_alarms_free): New function to free a CalComponentAlarms structure. (CalComponentAlarmPrivate): Added an uid property pointer. (scan_alarm_property): Scan for the our extension UID property. (cal_component_alarm_get_uid): New function. * pcs/cal-backend.h (CalBackendClass): Changed the signatures of the ::get_alarms_in_range() and ::get_alarms_for_object() methods. * pcs/cal-backend.c (cal_backend_get_alarms_in_range): Changed signature; use the new method. (cal_backend_get_alarms_for_object): Likewise. * pcs/cal-backend-file.c (compute_alarm_range): New spiffy function to compute a range of time for alarm occurrences. (add_alarm_occurrences_cb): New function to add alarms for a particular occurrence of the component. (generate_absolute_triggers): New function to add the absolute alarm triggers. (generate_alarms_for_comp): New function to generate all the alarm instances for a component. (cal_backend_file_get_alarms_in_range): Implemented. * pcs/cal.c (Cal_get_alarms_in_range): Use the new CalBackend API. (Cal_get_alarms_for_object): Likewise. (build_alarm_instance_seq): Removed old function. * cal-util/cal-util.c (cal_alarm_instance_list_free): Removed function. * cal-client/cal-client.c (build_component_alarms_list): New function to demarshal the component alarms sequence. (build_alarm_instance_list): New function to demarshal the alarm instances sequence. (cal_client_get_alarms_in_range): Updated for the new API. (cal_client_get_alarms_for_object): Updated for the new API. * gui/gnome-cal.c: Temporary #ifdef-ing out of alarm-related stuff to make it build. svn path=/trunk/; revision=7076 --- calendar/pcs/cal-backend.c | 58 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 17 deletions(-) (limited to 'calendar/pcs/cal-backend.c') diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index ce9604e418..9570b85d7f 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -464,21 +464,29 @@ cal_backend_get_objects_in_range (CalBackend *backend, CalObjType type, * @backend: A calendar backend. * @start: Start time for query. * @end: End time for query. + * @valid_range: Return value that says whether the range is valid or not. * * Builds a sorted list of the alarms that trigger in the specified time range. * - * Return value: A list of #CalAlarmInstance structures, sorted by trigger time. + * Return value: A sequence of component alarm instances structures, or NULL + * if @valid_range returns FALSE. **/ -GList * -cal_backend_get_alarms_in_range (CalBackend *backend, time_t start, time_t end) +GNOME_Evolution_Calendar_CalComponentAlarmsSeq * +cal_backend_get_alarms_in_range (CalBackend *backend, time_t start, time_t end, gboolean *valid_range) { g_return_val_if_fail (backend != NULL, NULL); g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); + g_return_val_if_fail (valid_range != NULL, NULL); g_assert (CLASS (backend)->get_alarms_in_range != NULL); - return (* CLASS (backend)->get_alarms_in_range) (backend, start, end); + + if (!(start != -1 && end != -1 && start <= end)) { + *valid_range = FALSE; + return NULL; + } else { + *valid_range = TRUE; + return (* CLASS (backend)->get_alarms_in_range) (backend, start, end); + } } /** @@ -487,27 +495,43 @@ cal_backend_get_alarms_in_range (CalBackend *backend, time_t start, time_t end) * @uid: Unique identifier for a calendar object. * @start: Start time for query. * @end: End time for query. - * @alarms: Return value for the list of alarm instances. + * @result: Return value for the result code for the operation. * * Builds a sorted list of the alarms of the specified event that trigger in a * particular time range. * - * Return value: TRUE on success, FALSE if the object was not found. + * Return value: A structure of the component's alarm instances, or NULL if @result + * returns something other than #CAL_BACKEND_GET_ALARMS_SUCCESS. **/ -gboolean +GNOME_Evolution_Calendar_CalComponentAlarms * cal_backend_get_alarms_for_object (CalBackend *backend, const char *uid, time_t start, time_t end, - GList **alarms) + CalBackendGetAlarmsForObjectResult *result) { - g_return_val_if_fail (backend != NULL, FALSE); - g_return_val_if_fail (IS_CAL_BACKEND (backend), FALSE); - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (start != -1 && end != -1, FALSE); - g_return_val_if_fail (start <= end, FALSE); - g_return_val_if_fail (alarms != NULL, FALSE); + g_return_val_if_fail (backend != NULL, NULL); + g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); + g_return_val_if_fail (uid != NULL, NULL); + g_return_val_if_fail (result != NULL, NULL); g_assert (CLASS (backend)->get_alarms_for_object != NULL); - return (* CLASS (backend)->get_alarms_for_object) (backend, uid, start, end, alarms); + + if (!(start != -1 && end != -1 && start <= end)) { + *result = CAL_BACKEND_GET_ALARMS_INVALID_RANGE; + return NULL; + } else { + gboolean object_found; + GNOME_Evolution_Calendar_CalComponentAlarms *alarms; + + alarms = (* CLASS (backend)->get_alarms_for_object) (backend, uid, start, end, + &object_found); + + if (object_found) + *result = CAL_BACKEND_GET_ALARMS_SUCCESS; + else + *result = CAL_BACKEND_GET_ALARMS_NOT_FOUND; + + return alarms; + } } /** -- cgit