Fixes #41661
2003-04-24 Rodrigo Moya <rodrigo@ximian.com> Fixes #41661 * idl/evolution-calendar.idl: added discardAlarm method to GNOME:Evolution:Calendar:Cal interface. * pcs/cal.c (cal_class_init): set new epv's method. (impl_Cal_discardAlarm): implementation of new CORBA method. * pcs/cal-backend.[ch]: added 'discard_alarm' virtual method, and CAL_BACKEND_RESULT_NOT_IMPLEMENTED to CalBackendResult enum. (cal_backend_class_init): initialize new class method. (cal_backend_discard_alarm): new method. (cal_backend_update_objects, cal_backend_remove_object): return proper CalBackendResult values. * pcs/cal-backend-file.c (cal_backend_file_class_init): initialize new class method. (cal_backend_file_discard_alarm): implementation of new method. * pcs/cal-client.[ch] (cal_client_discard_alarm): new function. * gui/alarm-notify/alarm-queue.c (remove_qeueud_alarm): don't remove the alarm directly from the component, call cal_client_discard_alarm and let the backend deal with it. svn path=/trunk/; revision=20973
This commit is contained in:

committed by
Rodrigo Moya

parent
49802408e2
commit
da12dd29a8
@ -1,3 +1,30 @@
|
||||
2003-04-24 Rodrigo Moya <rodrigo@ximian.com>
|
||||
|
||||
Fixes #41661
|
||||
|
||||
* idl/evolution-calendar.idl: added discardAlarm method to
|
||||
GNOME:Evolution:Calendar:Cal interface.
|
||||
|
||||
* pcs/cal.c (cal_class_init): set new epv's method.
|
||||
(impl_Cal_discardAlarm): implementation of new CORBA method.
|
||||
|
||||
* pcs/cal-backend.[ch]: added 'discard_alarm' virtual method, and
|
||||
CAL_BACKEND_RESULT_NOT_IMPLEMENTED to CalBackendResult enum.
|
||||
(cal_backend_class_init): initialize new class method.
|
||||
(cal_backend_discard_alarm): new method.
|
||||
(cal_backend_update_objects, cal_backend_remove_object): return
|
||||
proper CalBackendResult values.
|
||||
|
||||
* pcs/cal-backend-file.c (cal_backend_file_class_init): initialize
|
||||
new class method.
|
||||
(cal_backend_file_discard_alarm): implementation of new method.
|
||||
|
||||
* pcs/cal-client.[ch] (cal_client_discard_alarm): new function.
|
||||
|
||||
* gui/alarm-notify/alarm-queue.c (remove_qeueud_alarm): don't remove
|
||||
the alarm directly from the component, call cal_client_discard_alarm
|
||||
and let the backend deal with it.
|
||||
|
||||
2003-04-24 JP Rosevear <jpr@ximian.com>
|
||||
|
||||
* gui/apps_evolution_calendar.schemas: set the hpane default to
|
||||
|
@ -2486,6 +2486,47 @@ cal_client_get_alarms_for_object (CalClient *client, const char *uid,
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* cal_client_discard_alarm
|
||||
* @client: A calendar client.
|
||||
* @comp: The component to discard the alarm from.
|
||||
* @auid: Unique identifier of the alarm to be discarded.
|
||||
*
|
||||
* Tells the calendar backend to get rid of the alarm identified by the
|
||||
* @auid argument in @comp. Some backends might remove the alarm or
|
||||
* update internal information about the alarm be discarded, or, like
|
||||
* the file backend does, ignore the operation.
|
||||
*
|
||||
* Return value: a #CalClientResult value indicating the result of the
|
||||
* operation.
|
||||
*/
|
||||
CalClientResult
|
||||
cal_client_discard_alarm (CalClient *client, CalComponent *comp, const char *auid)
|
||||
{
|
||||
CalClientPrivate *priv;
|
||||
CalClientResult retval;
|
||||
CORBA_Environment ev;
|
||||
const char *uid;
|
||||
|
||||
g_return_val_if_fail (IS_CAL_CLIENT (client), CAL_CLIENT_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (IS_CAL_COMPONENT (comp), CAL_CLIENT_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (auid != NULL, CAL_CLIENT_RESULT_NOT_FOUND);
|
||||
|
||||
cal_component_get_uid (comp, &uid);
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
GNOME_Evolution_Calendar_Cal_discardAlarm (priv->cal, uid, auid, &ev);
|
||||
if (BONOBO_USER_EX (&ev, ex_GNOME_Evolution_Calendar_Cal_NotFound))
|
||||
retval = CAL_CLIENT_RESULT_NOT_FOUND;
|
||||
else if (BONOBO_EX (&ev))
|
||||
retval = CAL_CLIENT_RESULT_CORBA_ERROR;
|
||||
else
|
||||
retval = CAL_CLIENT_RESULT_SUCCESS;
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
return retval;
|
||||
}
|
||||
|
||||
typedef struct _ForeachTZIDCallbackData ForeachTZIDCallbackData;
|
||||
struct _ForeachTZIDCallbackData {
|
||||
CalClient *client;
|
||||
|
@ -200,6 +200,8 @@ gboolean cal_client_get_alarms_for_object (CalClient *client, const char *uid,
|
||||
time_t start, time_t end,
|
||||
CalComponentAlarms **alarms);
|
||||
|
||||
CalClientResult cal_client_discard_alarm (CalClient *client, CalComponent *comp, const char *auid);
|
||||
|
||||
/* Add or update a single object. When adding an object only builtin timezones
|
||||
are allowed. To use external VTIMEZONE data call update_objects() instead.*/
|
||||
CalClientResult cal_client_update_object (CalClient *client, CalComponent *comp);
|
||||
|
@ -219,12 +219,10 @@ remove_queued_alarm (CompQueuedAlarms *cqa, gpointer alarm_id,
|
||||
cqa->queued_alarms = g_slist_remove_link (cqa->queued_alarms, l);
|
||||
g_slist_free_1 (l);
|
||||
|
||||
if (remove_alarm &&
|
||||
cal_client_get_static_capability (cqa->parent_client->client,
|
||||
CAL_STATIC_CAPABILITY_REMOVE_ALARMS)) {
|
||||
cal_component_remove_alarm (cqa->alarms->comp, qa->instance->auid);
|
||||
if (remove_alarm) {
|
||||
cqa->expecting_update = TRUE;
|
||||
cal_client_update_object (cqa->parent_client->client, cqa->alarms->comp);
|
||||
cal_client_discard_alarm (cqa->parent_client->client, cqa->alarms->comp,
|
||||
qa->instance->auid);
|
||||
cqa->expecting_update = FALSE;
|
||||
}
|
||||
|
||||
|
@ -214,6 +214,10 @@ module Calendar {
|
||||
raises (NotFound, InvalidRange);
|
||||
|
||||
|
||||
/* Discards an alarm from a given component */
|
||||
void discardAlarm (in CalObjUID uid, in CalAlarmUID auid)
|
||||
raises (NotFound);
|
||||
|
||||
/* Adds or updates one or more VEVENT/VTODO/VTIMEZONE
|
||||
* components. The calobj should be a string representation of
|
||||
* a complete VCALENDAR object (we also support single
|
||||
|
@ -112,6 +112,10 @@ static GNOME_Evolution_Calendar_CalComponentAlarms *cal_backend_file_get_alarms_
|
||||
CalBackend *backend, const char *uid,
|
||||
time_t start, time_t end, gboolean *object_found);
|
||||
|
||||
static CalBackendResult cal_backend_file_discard_alarm (CalBackend *backend,
|
||||
const char *uid,
|
||||
const char *auid);
|
||||
|
||||
static CalBackendResult cal_backend_file_update_objects (CalBackend *backend,
|
||||
const char *calobj,
|
||||
CalObjModType mod);
|
||||
@ -199,6 +203,7 @@ cal_backend_file_class_init (CalBackendFileClass *class)
|
||||
backend_class->get_changes = cal_backend_file_get_changes;
|
||||
backend_class->get_alarms_in_range = cal_backend_file_get_alarms_in_range;
|
||||
backend_class->get_alarms_for_object = cal_backend_file_get_alarms_for_object;
|
||||
backend_class->discard_alarm = cal_backend_file_discard_alarm;
|
||||
backend_class->update_objects = cal_backend_file_update_objects;
|
||||
backend_class->remove_object = cal_backend_file_remove_object;
|
||||
backend_class->send_object = cal_backend_file_send_object;
|
||||
@ -1520,6 +1525,14 @@ cal_backend_file_get_alarms_for_object (CalBackend *backend, const char *uid,
|
||||
return corba_alarms;
|
||||
}
|
||||
|
||||
/* Discard_alarm handler for the file backend */
|
||||
static CalBackendResult
|
||||
cal_backend_file_discard_alarm (CalBackend *backend, const char *uid, const char *auid)
|
||||
{
|
||||
/* we just do nothing with the alarm */
|
||||
return CAL_BACKEND_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
/* Creates a CalComponent for the given icalcomponent and adds it to our
|
||||
cache. Note that the icalcomponent is not added to the toplevel
|
||||
icalcomponent here. That needs to be done elsewhere. It returns the uid
|
||||
|
@ -193,6 +193,7 @@ cal_backend_class_init (CalBackendClass *class)
|
||||
class->get_changes = NULL;
|
||||
class->get_alarms_in_range = NULL;
|
||||
class->get_alarms_for_object = NULL;
|
||||
class->discard_alarm = NULL;
|
||||
class->update_objects = NULL;
|
||||
class->remove_object = NULL;
|
||||
class->send_object = NULL;
|
||||
@ -824,6 +825,30 @@ cal_backend_get_alarms_for_object (CalBackend *backend, const char *uid,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* cal_backend_discard_alarm
|
||||
* @backend: A calendar backend.
|
||||
* @uid: UID of the component to discard the alarm from.
|
||||
* @auid: Alarm ID.
|
||||
*
|
||||
* Discards an alarm from the given component. This allows the specific backend
|
||||
* to do whatever is needed to really discard the alarm.
|
||||
*
|
||||
* Return value: a #CalBackendResult value, which indicates the
|
||||
* result of the operation.
|
||||
**/
|
||||
CalBackendResult
|
||||
cal_backend_discard_alarm (CalBackend *backend, const char *uid, const char *auid)
|
||||
{
|
||||
g_return_val_if_fail (backend != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (IS_CAL_BACKEND (backend), CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (uid != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (auid != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (CLASS (backend)->discard_alarm != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
|
||||
return (* CLASS (backend)->discard_alarm) (backend, uid, auid);
|
||||
}
|
||||
|
||||
/**
|
||||
* cal_backend_update_objects:
|
||||
* @backend: A calendar backend.
|
||||
@ -839,9 +864,9 @@ cal_backend_get_alarms_for_object (CalBackend *backend, const char *uid,
|
||||
CalBackendResult
|
||||
cal_backend_update_objects (CalBackend *backend, const char *calobj, CalObjModType mod)
|
||||
{
|
||||
g_return_val_if_fail (backend != NULL, FALSE);
|
||||
g_return_val_if_fail (IS_CAL_BACKEND (backend), FALSE);
|
||||
g_return_val_if_fail (calobj != NULL, FALSE);
|
||||
g_return_val_if_fail (backend != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (IS_CAL_BACKEND (backend), CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (calobj != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
|
||||
g_assert (CLASS (backend)->update_objects != NULL);
|
||||
return (* CLASS (backend)->update_objects) (backend, calobj, mod);
|
||||
@ -861,9 +886,9 @@ cal_backend_update_objects (CalBackend *backend, const char *calobj, CalObjModTy
|
||||
CalBackendResult
|
||||
cal_backend_remove_object (CalBackend *backend, const char *uid, CalObjModType mod)
|
||||
{
|
||||
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 (backend != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (IS_CAL_BACKEND (backend), CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
g_return_val_if_fail (uid != NULL, CAL_BACKEND_RESULT_NOT_FOUND);
|
||||
|
||||
g_assert (CLASS (backend)->remove_object != NULL);
|
||||
return (* CLASS (backend)->remove_object) (backend, uid, mod);
|
||||
|
@ -47,7 +47,7 @@ typedef enum {
|
||||
CAL_BACKEND_OPEN_SUCCESS, /* Loading OK */
|
||||
CAL_BACKEND_OPEN_ERROR, /* We need better error reporting in libversit */
|
||||
CAL_BACKEND_OPEN_NOT_FOUND,
|
||||
CAL_BACKEND_OPEN_PERMISSION_DENIED
|
||||
CAL_BACKEND_OPEN_PERMISSION_DENIED,
|
||||
} CalBackendOpenStatus;
|
||||
|
||||
/* Update and Remove result values */
|
||||
@ -137,6 +137,7 @@ struct _CalBackendClass {
|
||||
GNOME_Evolution_Calendar_CalComponentAlarms *(* get_alarms_for_object) (
|
||||
CalBackend *backend, const char *uid,
|
||||
time_t start, time_t end, gboolean *object_found);
|
||||
CalBackendResult (* discard_alarm) (CalBackend *backend, const char *uid, const char *auid);
|
||||
|
||||
/* Object manipulation virtual methods */
|
||||
CalBackendResult (* update_objects) (CalBackend *backend, const char *calobj, CalObjModType mod);
|
||||
@ -210,6 +211,8 @@ GNOME_Evolution_Calendar_CalComponentAlarms *cal_backend_get_alarms_for_object (
|
||||
time_t start, time_t end,
|
||||
CalBackendGetAlarmsForObjectResult *result);
|
||||
|
||||
CalBackendResult cal_backend_discard_alarm (CalBackend *backend, const char *uid, const char *auid);
|
||||
|
||||
|
||||
CalBackendResult cal_backend_update_objects (CalBackend *backend, const char *calobj, CalObjModType mod);
|
||||
|
||||
|
@ -513,6 +513,25 @@ impl_Cal_getAlarmsForObject (PortableServer_Servant servant,
|
||||
}
|
||||
}
|
||||
|
||||
/* Cal::discardAlarm method */
|
||||
static void
|
||||
impl_Cal_discardAlarm (PortableServer_Servant servant,
|
||||
const CORBA_char *uid,
|
||||
const CORBA_char *auid,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
Cal *cal;
|
||||
CalPrivate *priv;
|
||||
CalBackendResult result;
|
||||
|
||||
cal = CAL (bonobo_object_from_servant (servant));
|
||||
priv = cal->priv;
|
||||
|
||||
result = cal_backend_discard_alarm (priv->backend, uid, auid);
|
||||
if (result == CAL_BACKEND_RESULT_NOT_FOUND)
|
||||
bonobo_exception_set (ev, ex_GNOME_Evolution_Calendar_Cal_NotFound);
|
||||
}
|
||||
|
||||
/* Cal::updateObjects method */
|
||||
static void
|
||||
impl_Cal_updateObjects (PortableServer_Servant servant,
|
||||
@ -855,6 +874,7 @@ cal_class_init (CalClass *klass)
|
||||
epv->getFreeBusy = impl_Cal_getFreeBusy;
|
||||
epv->getAlarmsInRange = impl_Cal_getAlarmsInRange;
|
||||
epv->getAlarmsForObject = impl_Cal_getAlarmsForObject;
|
||||
epv->discardAlarm = impl_Cal_discardAlarm;
|
||||
epv->updateObjects = impl_Cal_updateObjects;
|
||||
epv->removeObject = impl_Cal_removeObject;
|
||||
epv->sendObject = impl_Cal_sendObject;
|
||||
|
Reference in New Issue
Block a user