diff options
Diffstat (limited to 'calendar/pcs/cal-backend.c')
-rw-r--r-- | calendar/pcs/cal-backend.c | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index 1ce4b615c3..6b9894e098 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -856,6 +856,23 @@ notify_update (CalBackend *backend, const char *uid) } } +/* Notifies a backend's clients that an object was removed */ +static void +notify_remove (CalBackend *backend, const char *uid) +{ + CalBackendPrivate *priv; + GList *l; + + priv = backend->priv; + + for (l = priv->clients; l; l = l->next) { + Cal *cal; + + cal = CAL (l->data); + cal_notify_remove (cal, uid); + } +} + /** * cal_backend_update_object: * @backend: A calendar backend. @@ -900,22 +917,45 @@ cal_backend_update_object (CalBackend *backend, const char *uid, const char *cal add_object (backend, new_ico); + /* FIXME: do the notification asynchronously */ + notify_update (backend, new_ico->uid); return TRUE; } -void +/** + * cal_backend_remove_object: + * @backend: A calendar backend. + * @uid: Unique identifier of the object to remove. + * + * Removes an object in a calendar backend. The backend will notify all of its + * clients about the change. + * + * Return value: TRUE on success, FALSE on being passed an UID for an object + * that does not exist in the backend. + **/ +gboolean cal_backend_remove_object (CalBackend *backend, const char *uid) { CalBackendPrivate *priv; + iCalObject *ico; - g_return_if_fail (backend != NULL); - g_return_if_fail (IS_CAL_BACKEND (backend)); + g_return_val_if_fail (backend != NULL, FALSE); + g_return_val_if_fail (IS_CAL_BACKEND (backend), FALSE); priv = backend->priv; - g_return_if_fail (priv->loaded); + g_return_val_if_fail (priv->loaded, FALSE); - g_return_if_fail (uid != NULL); + g_return_val_if_fail (uid != NULL, FALSE); - /* FIXME */ + ico = lookup_object (backend, uid); + if (!ico) + return FALSE; + + remove_object (backend, ico); + + /* FIXME: do the notification asynchronously */ + + notify_remove (backend, uid); + return TRUE; } |