aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-client
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/cal-client')
-rw-r--r--calendar/cal-client/.cvsignore17
-rw-r--r--calendar/cal-client/Makefile.am86
-rw-r--r--calendar/cal-client/cal-client-types.c52
-rw-r--r--calendar/cal-client/cal-client-types.h75
-rw-r--r--calendar/cal-client/cal-client.c3823
-rw-r--r--calendar/cal-client/cal-client.h212
-rw-r--r--calendar/cal-client/cal-listener.c1025
-rw-r--r--calendar/cal-client/cal-listener.h120
-rw-r--r--calendar/cal-client/cal-marshal.list6
-rw-r--r--calendar/cal-client/cal-query.c374
-rw-r--r--calendar/cal-client/cal-query.h69
-rw-r--r--calendar/cal-client/client-test.c218
-rw-r--r--calendar/cal-client/query-listener.c304
-rw-r--r--calendar/cal-client/query-listener.h69
-rw-r--r--calendar/cal-client/test.ics318
15 files changed, 0 insertions, 6768 deletions
diff --git a/calendar/cal-client/.cvsignore b/calendar/cal-client/.cvsignore
deleted file mode 100644
index f2aa4f92ae..0000000000
--- a/calendar/cal-client/.cvsignore
+++ /dev/null
@@ -1,17 +0,0 @@
-Makefile.in
-.deps
-.libs
-.pure
-Makefile
-evolution-calendar-stubs.c
-evolution-calendar-skels.c
-evolution-calendar-common.c
-evolution-calendar.h
-evolution-calendar-common.lo
-evolution-calendar-skels.lo
-evolution-calendar-stubs.lo
-cal-marshal.c
-cal-marshal.h
-*.lo
-*.la
-client-test
diff --git a/calendar/cal-client/Makefile.am b/calendar/cal-client/Makefile.am
deleted file mode 100644
index 9008c05940..0000000000
--- a/calendar/cal-client/Makefile.am
+++ /dev/null
@@ -1,86 +0,0 @@
-INCLUDES = \
- -DEVOLUTION_LOCALEDIR=\""$(localedir)"\" \
- -DG_LOG_DOMAIN=\"cal-client\" \
- -I$(top_srcdir)/calendar \
- -I$(srcdir) -I$(top_srcdir) \
- -I. \
- -I.. \
- -I$(top_builddir) \
- -I$(top_srcdir)/libical/src \
- $(EVOLUTION_CALENDAR_CFLAGS)
-
-AM_CFLAGS = \
- -DGTK_DISABLE_DEPRECATED=1 \
- -DGDK_DISABLE_DEPRECATED=1 \
- -DG_DISABLE_DEPRECATED=1 \
- -DGNOME_DISABLE_DEPRECATED=1
-
-CORBA_GENERATED_C = \
- evolution-calendar-common.c \
- evolution-calendar-skels.c \
- evolution-calendar-stubs.c
-CORBA_GENERATED_H = \
- evolution-calendar.h
-
-CORBA_GENERATED = $(CORBA_GENERATED_C) $(CORBA_GENERATED_H)
-
-idls = \
- $(srcdir)/../idl/evolution-calendar.idl
-
-idl_flags = $(IDL_INCLUDES)
-
-$(CORBA_GENERATED_H): $(idls)
- $(ORBIT_IDL) $(idl_flags) $(srcdir)/../idl/evolution-calendar.idl
-$(CORBA_GENERATED_C): $(CORBA_GENERATED_H)
-
-privlib_LTLIBRARIES = libcal-client.la
-
-libcal_clientincludedir = $(privincludedir)/cal-client
-
-libcal_client_la_SOURCES = \
- $(CORBA_GENERATED_C) \
- cal-client-types.c \
- cal-marshal.c \
- cal-marshal.h \
- cal-client.c \
- cal-listener.c \
- cal-listener.h \
- cal-query.c \
- query-listener.c \
- query-listener.h
-
-libcal_client_la_LIBADD = \
- $(top_builddir)/calendar/cal-util/libcal-util.la \
- $(top_builddir)/e-util/libeutil.la
-
-libcal_clientinclude_HEADERS = \
- $(CORBA_GENERATED_H) \
- cal-client-types.h \
- cal-client.h \
- cal-query.h
-
-#
-# client-test program
-#
-
-noinst_PROGRAMS = client-test
-
-client_test_SOURCES = \
- client-test.c
-
-client_test_INCLUDES = \
- $(INCLUDES) \
- -DG_LOG_DOMAIN=\"client-test\"
-
-client_test_LDADD = \
- libcal-client.la \
- $(EVOLUTION_CALENDAR_LIBS)
-
-MARSHAL_GENERATED = cal-marshal.c cal-marshal.h
-@EVO_MARSHAL_RULE@
-
-BUILT_SOURCES = $(CORBA_GENERATED) $(MARSHAL_GENERATED)
-CLEANFILES = $(BUILT_SOURCES)
-
-dist-hook:
- cd $(distdir); rm -f $(BUILT_SOURCES)
diff --git a/calendar/cal-client/cal-client-types.c b/calendar/cal-client/cal-client-types.c
deleted file mode 100644
index 36a524ec99..0000000000
--- a/calendar/cal-client/cal-client-types.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Evolution calendar utilities and types
- *
- * Copyright (C) 2000 Ximian, Inc.
- * Copyright (C) 2000 Ximian, Inc.
- *
- * Authors: Federico Mena-Quintero <federico@ximian.com>
- * JP Rosevear <jpr@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include "cal-client-types.h"
-
-
-
-/**
- * cal_client_change_list_free:
- * @list: List of #CalClientChange structures.
- *
- * Frees a list of #CalClientChange structures.
- **/
-void
-cal_client_change_list_free (GList *list)
-{
- CalClientChange *c;
- GList *l;
-
- for (l = list; l; l = l->next) {
- c = l->data;
-
- g_assert (c != NULL);
- g_assert (c->comp != NULL);
-
- g_object_unref (G_OBJECT (c->comp));
- g_free (c);
- }
-
- g_list_free (list);
-}
diff --git a/calendar/cal-client/cal-client-types.h b/calendar/cal-client/cal-client-types.h
deleted file mode 100644
index 925628337b..0000000000
--- a/calendar/cal-client/cal-client-types.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Evolution calendar utilities and types
- *
- * Copyright (C) 2000 Ximian, Inc.
- * Copyright (C) 2000 Ximian, Inc.
- *
- * Authors: Federico Mena-Quintero <federico@ximian.com>
- * JP Rosevear <jpr@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef CAL_CLIENT_TYPES_H
-#define CAL_CLIENT_TYPES_H
-
-#include <cal-util/cal-component.h>
-
-G_BEGIN_DECLS
-
-
-
-#define E_CALENDAR_ERROR e_calendar_error_quark()
-
-GQuark e_calendar_error_quark (void) G_GNUC_CONST;
-
-typedef enum {
- CAL_CLIENT_CHANGE_ADDED = 1 << 0,
- CAL_CLIENT_CHANGE_MODIFIED = 1 << 1,
- CAL_CLIENT_CHANGE_DELETED = 1 << 2
-} CalClientChangeType;
-
-typedef struct
-{
- CalComponent *comp;
- CalClientChangeType type;
-} CalClientChange;
-
-typedef enum {
- E_CALENDAR_STATUS_OK,
- E_CALENDAR_STATUS_INVALID_ARG,
- E_CALENDAR_STATUS_BUSY,
- E_CALENDAR_STATUS_REPOSITORY_OFFLINE,
- E_CALENDAR_STATUS_NO_SUCH_CALENDAR,
- E_CALENDAR_STATUS_OBJECT_NOT_FOUND,
- E_CALENDAR_STATUS_INVALID_OBJECT,
- E_CALENDAR_STATUS_URI_NOT_LOADED,
- E_CALENDAR_STATUS_URI_ALREADY_LOADED,
- E_CALENDAR_STATUS_PERMISSION_DENIED,
- E_CALENDAR_STATUS_CARD_NOT_FOUND,
- E_CALENDAR_STATUS_CARD_ID_ALREADY_EXISTS,
- E_CALENDAR_STATUS_PROTOCOL_NOT_SUPPORTED,
- E_CALENDAR_STATUS_CANCELLED,
- E_CALENDAR_STATUS_COULD_NOT_CANCEL,
- E_CALENDAR_STATUS_AUTHENTICATION_FAILED,
- E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED,
- E_CALENDAR_STATUS_CORBA_EXCEPTION,
- E_CALENDAR_STATUS_OTHER_ERROR
-} ECalendarStatus;
-
-void cal_client_change_list_free (GList *list);
-
-G_END_DECLS
-
-#endif
-
diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c
deleted file mode 100644
index f69567b90e..0000000000
--- a/calendar/cal-client/cal-client.c
+++ /dev/null
@@ -1,3823 +0,0 @@
-/* Evolution calendar client
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <pthread.h>
-#include <string.h>
-#include <bonobo-activation/bonobo-activation.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include "e-util/e-component-listener.h"
-#include "e-util/e-config-listener.h"
-#include "e-util/e-url.h"
-#include "e-util/e-msgport.h"
-#include "cal-util/cal-util-marshal.h"
-#include "cal-util/timeutil.h"
-#include "cal-client.h"
-#include "cal-listener.h"
-#include "query-listener.h"
-
-
-
-typedef struct {
- EMutex *mutex;
- pthread_cond_t cond;
- ECalendarStatus status;
-
- char *uid;
- GList *list;
- gboolean bool;
- char *string;
-
- CalQuery *query;
- QueryListener *listener;
-} ECalendarOp;
-
-/* Private part of the CalClient structure */
-struct _CalClientPrivate {
- /* Load state to avoid multiple loads */
- CalClientLoadState load_state;
-
- /* URI of the calendar that is being loaded or is already loaded, or
- * NULL if we are not loaded.
- */
- char *uri;
- CalObjType type;
-
- ECalendarOp *current_op;
-
- EMutex *mutex;
-
- /* Email address associated with this calendar, or NULL */
- char *cal_address;
- char *alarm_email_address;
- char *ldap_attribute;
-
- /* Scheduling info */
- char *capabilities;
-
- /* The calendar factories we are contacting */
- GList *factories;
-
- /* Our calendar listener implementation */
- CalListener *listener;
-
- /* The calendar client interface object we are contacting */
- GNOME_Evolution_Calendar_Cal cal;
-
- /* The authentication function */
- CalClientAuthFunc auth_func;
- gpointer auth_user_data;
-
- /* A cache of timezones retrieved from the server, to avoid getting
- them repeatedly for each get_object() call. */
- GHashTable *timezones;
-
- /* The default timezone to use to resolve DATE and floating DATE-TIME
- values. */
- icaltimezone *default_zone;
-
- /* The component listener to keep track of the lifetime of backends */
- EComponentListener *comp_listener;
-};
-
-
-
-/* Signal IDs */
-enum {
- CAL_OPENED,
- CAL_SET_MODE,
- BACKEND_ERROR,
- CATEGORIES_CHANGED,
- FORGET_PASSWORD,
- BACKEND_DIED,
- LAST_SIGNAL
-};
-
-static void cal_client_get_object_timezones_cb (icalparameter *param,
- void *data);
-
-static guint cal_client_signals[LAST_SIGNAL];
-
-static GObjectClass *parent_class;
-
-#define E_CALENDAR_CHECK_STATUS(status,error) G_STMT_START{ \
- if ((status) == E_CALENDAR_STATUS_OK) { \
- return TRUE; \
- } \
- else { \
- const char *msg; \
- msg = cal_client_get_error_message ((status)); \
- g_set_error ((error), E_CALENDAR_ERROR, (status), msg, (status)); \
- return FALSE; \
- } }G_STMT_END
-
-
-
-/* Error quark */
-GQuark
-e_calendar_error_quark (void)
-{
- static GQuark q = 0;
- if (q == 0)
- q = g_quark_from_static_string ("e-calendar-error-quark");
-
- return q;
-}
-
-GType
-cal_client_open_status_enum_get_type (void)
-{
- static GType cal_client_open_status_enum_type = 0;
-
- if (!cal_client_open_status_enum_type) {
- static GEnumValue values [] = {
- { CAL_CLIENT_OPEN_SUCCESS, "CalClientOpenSuccess", "success" },
- { CAL_CLIENT_OPEN_ERROR, "CalClientOpenError", "error" },
- { CAL_CLIENT_OPEN_NOT_FOUND, "CalClientOpenNotFound", "not-found" },
- { CAL_CLIENT_OPEN_PERMISSION_DENIED, "CalClientOpenPermissionDenied", "denied" },
- { CAL_CLIENT_OPEN_METHOD_NOT_SUPPORTED, "CalClientOpenMethodNotSupported", "unsupported" },
- { -1, NULL, NULL }
- };
-
- cal_client_open_status_enum_type = g_enum_register_static ("CalClientOpenStatusEnum", values);
- }
-
- return cal_client_open_status_enum_type;
-}
-
-GType
-cal_client_set_mode_status_enum_get_type (void)
-{
- static GType cal_client_set_mode_status_enum_type = 0;
-
- if (!cal_client_set_mode_status_enum_type) {
- static GEnumValue values [] = {
- { CAL_CLIENT_SET_MODE_SUCCESS, "CalClientSetModeSuccess", "success" },
- { CAL_CLIENT_SET_MODE_ERROR, "CalClientSetModeError", "error" },
- { CAL_CLIENT_SET_MODE_NOT_SUPPORTED, "CalClientSetModeNotSupported", "unsupported" },
- { -1, NULL, NULL }
- };
-
- cal_client_set_mode_status_enum_type =
- g_enum_register_static ("CalClientSetModeStatusEnum", values);
- }
-
- return cal_client_set_mode_status_enum_type;
-}
-
-GType
-cal_mode_enum_get_type (void)
-{
- static GType cal_mode_enum_type = 0;
-
- if (!cal_mode_enum_type) {
- static GEnumValue values [] = {
- { CAL_MODE_INVALID, "CalModeInvalid", "invalid" },
- { CAL_MODE_LOCAL, "CalModeLocal", "local" },
- { CAL_MODE_REMOTE, "CalModeRemote", "remote" },
- { CAL_MODE_ANY, "CalModeAny", "any" },
- { -1, NULL, NULL }
- };
-
- cal_mode_enum_type = g_enum_register_static ("CalModeEnum", values);
- }
-
- return cal_mode_enum_type;
-}
-
-/* EBookOp calls */
-
-static ECalendarOp*
-e_calendar_new_op (CalClient *client)
-{
- ECalendarOp *op = g_new0 (ECalendarOp, 1);
-
- op->mutex = e_mutex_new (E_MUTEX_SIMPLE);
- pthread_cond_init (&op->cond, 0);
-
- client->priv->current_op = op;
-
- return op;
-}
-
-static ECalendarOp*
-e_calendar_get_op (CalClient *client)
-{
- if (!client->priv->current_op) {
- g_warning (G_STRLOC ": Unexpected response");
- return NULL;
- }
-
- return client->priv->current_op;
-}
-
-static void
-e_calendar_free_op (ECalendarOp *op)
-{
- /* XXX more stuff here */
- pthread_cond_destroy (&op->cond);
- e_mutex_destroy (op->mutex);
- g_free (op);
-}
-
-static void
-e_calendar_remove_op (CalClient *client, ECalendarOp *op)
-{
- if (client->priv->current_op != op)
- g_warning (G_STRLOC ": Cannot remove op, it's not current");
-
- client->priv->current_op = NULL;
-}
-
-/* Gets rid of the factories that a client knows about */
-static void
-destroy_factories (CalClient *client)
-{
- CalClientPrivate *priv;
- CORBA_Object factory;
- CORBA_Environment ev;
- int result;
- GList *f;
-
- priv = client->priv;
-
- CORBA_exception_init (&ev);
-
- for (f = priv->factories; f; f = f->next) {
- factory = f->data;
-
- result = CORBA_Object_is_nil (factory, &ev);
- if (BONOBO_EX (&ev)) {
- g_message ("destroy_factories(): could not see if a factory was nil");
- CORBA_exception_free (&ev);
-
- continue;
- }
-
- if (result)
- continue;
-
- CORBA_Object_release (factory, &ev);
- if (BONOBO_EX (&ev)) {
- g_message ("destroy_factories(): could not release a factory");
- CORBA_exception_free (&ev);
- }
- }
-
- g_list_free (priv->factories);
- priv->factories = NULL;
-}
-
-/* Gets rid of the calendar client interface object that a client knows about */
-static void
-destroy_cal (CalClient *client)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- int result;
-
- priv = client->priv;
-
- CORBA_exception_init (&ev);
- result = CORBA_Object_is_nil (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- g_message (G_STRLOC ": could not see if the "
- "calendar client interface object was nil");
- priv->cal = CORBA_OBJECT_NIL;
- CORBA_exception_free (&ev);
- return;
- }
- CORBA_exception_free (&ev);
-
- if (result)
- return;
-
- bonobo_object_release_unref (priv->cal, NULL);
- priv->cal = CORBA_OBJECT_NIL;
-
-}
-
-static void
-free_timezone (gpointer key, gpointer value, gpointer data)
-{
- /* Note that the key comes from within the icaltimezone value, so we
- don't free that. */
- icaltimezone_free (value, TRUE);
-}
-
-
-
-static void
-backend_died_cb (EComponentListener *cl, gpointer user_data)
-{
- CalClientPrivate *priv;
- CalClient *client = (CalClient *) user_data;
-
- g_return_if_fail (IS_CAL_CLIENT (client));
-
- priv = client->priv;
- priv->load_state = CAL_CLIENT_LOAD_NOT_LOADED;
- g_signal_emit (G_OBJECT (client), cal_client_signals[BACKEND_DIED], 0);
-}
-
-/* Signal handlers for the listener's signals */
-/* Handle the cal_opened notification from the listener */
-
-static void
-cal_read_only_cb (CalListener *listener, ECalendarStatus status, gboolean read_only, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->bool = read_only;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_cal_address_cb (CalListener *listener, ECalendarStatus status, const char *address, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->string = g_strdup (address);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_alarm_address_cb (CalListener *listener, ECalendarStatus status, const char *address, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->string = g_strdup (address);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_ldap_attribute_cb (CalListener *listener, ECalendarStatus status, const char *attribute, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->string = g_strdup (attribute);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_static_capabilities_cb (CalListener *listener, ECalendarStatus status, const char *capabilities, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->string = g_strdup (capabilities);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_opened_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_removed_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_object_created_cb (CalListener *listener, ECalendarStatus status, const char *uid, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->uid = g_strdup (uid);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_object_modified_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_object_removed_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_alarm_discarded_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_objects_received_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_objects_sent_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_default_object_requested_cb (CalListener *listener, ECalendarStatus status, const char *object, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->string = g_strdup (object);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_object_requested_cb (CalListener *listener, ECalendarStatus status, const char *object, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->string = g_strdup (object);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_object_list_cb (CalListener *listener, ECalendarStatus status, GList *objects, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
- GList *l;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->list = g_list_copy (objects);
-
- for (l = op->list; l; l = l->next)
- l->data = icalcomponent_new_clone (l->data);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_get_timezone_cb (CalListener *listener, ECalendarStatus status, const char *object, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->string = g_strdup (object);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-
-}
-
-static void
-cal_add_timezone_cb (CalListener *listener, ECalendarStatus status, const char *tzid, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->uid = g_strdup (tzid);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-
-}
-
-static void
-cal_set_default_timezone_cb (CalListener *listener, ECalendarStatus status, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_get_changes_cb (CalListener *listener, ECalendarStatus status, GList *changes, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
- GList *l;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->list = g_list_copy (changes);
-
- for (l = op->list; l; l = l->next) {
- CalClientChange *ccc = l->data, *new_ccc;
-
- new_ccc = g_new (CalClientChange, 1);
- new_ccc->comp = cal_component_clone (ccc->comp);
- new_ccc->type = ccc->type;
-
- l->data = new_ccc;
- }
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_get_free_busy_cb (CalListener *listener, ECalendarStatus status, GList *freebusy, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
- GList *l;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->list = g_list_copy (freebusy);
-
- for (l = op->list; l; l = l->next)
- l->data = cal_component_clone (l->data);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-static void
-cal_query_cb (CalListener *listener, ECalendarStatus status, GNOME_Evolution_Calendar_Query query, gpointer data)
-{
- CalClient *client = data;
- ECalendarOp *op;
-
- op = e_calendar_get_op (client);
-
- if (op == NULL) {
- g_warning (G_STRLOC ": Cannot find operation ");
- return;
- }
-
- e_mutex_lock (op->mutex);
-
- op->status = status;
- op->query = cal_query_new (query, op->listener, client);
-
- pthread_cond_signal (&op->cond);
-
- e_mutex_unlock (op->mutex);
-}
-
-/* Handle the cal_set_mode notification from the listener */
-static void
-cal_set_mode_cb (CalListener *listener,
- GNOME_Evolution_Calendar_Listener_SetModeStatus status,
- GNOME_Evolution_Calendar_CalMode mode,
- gpointer data)
-{
- CalClient *client;
- CalClientPrivate *priv;
- CalClientSetModeStatus client_status;
-
- client = CAL_CLIENT (data);
- priv = client->priv;
-
- client_status = CAL_CLIENT_OPEN_ERROR;
-
- switch (status) {
- case GNOME_Evolution_Calendar_Listener_MODE_SET:
- client_status = CAL_CLIENT_SET_MODE_SUCCESS;
- break;
- case GNOME_Evolution_Calendar_Listener_MODE_NOT_SET:
- client_status = CAL_CLIENT_SET_MODE_ERROR;
- break;
- case GNOME_Evolution_Calendar_Listener_MODE_NOT_SUPPORTED:
- client_status = CAL_CLIENT_SET_MODE_NOT_SUPPORTED;
- break;
- default:
- g_assert_not_reached ();
- }
-
- /* We are *not* inside a signal handler (this is just a simple callback
- * called from the listener), so there is not a temporary reference to
- * the client object. We ref() so that we can safely emit our own
- * signal and clean up.
- */
-
- g_object_ref (G_OBJECT (client));
-
- g_signal_emit (G_OBJECT (client), cal_client_signals[CAL_SET_MODE],
- 0, client_status, mode);
-
- g_object_unref (G_OBJECT (client));
-}
-
-/* Handle the error_occurred signal from the listener */
-static void
-backend_error_cb (CalListener *listener, const char *message, gpointer data)
-{
- CalClient *client;
-
- client = CAL_CLIENT (data);
- g_signal_emit (G_OBJECT (client), cal_client_signals[BACKEND_ERROR], 0, message);
-}
-
-/* Handle the categories_changed signal from the listener */
-static void
-categories_changed_cb (CalListener *listener, const GNOME_Evolution_Calendar_StringSeq *categories,
- gpointer data)
-{
- CalClient *client;
- GPtrArray *cats;
- int i;
-
- client = CAL_CLIENT (data);
-
- cats = g_ptr_array_new ();
- g_ptr_array_set_size (cats, categories->_length);
-
- for (i = 0; i < categories->_length; i++)
- cats->pdata[i] = categories->_buffer[i];
-
- g_signal_emit (G_OBJECT (client), cal_client_signals[CATEGORIES_CHANGED], 0, cats);
-
- g_ptr_array_free (cats, TRUE);
-}
-
-
-
-static gboolean
-get_factories (const char *str_uri, GList **factories)
-{
- GNOME_Evolution_Calendar_CalFactory factory;
- Bonobo_ServerInfoList *servers;
- EUri *uri;
- char *query;
- int i;
-
-
- /* Determine the protocol and query for factory supporting that */
- uri = e_uri_new (str_uri);
- if (!uri) {
- g_warning (G_STRLOC ": Invalid uri string");
-
- return FALSE;
- }
-
- query = g_strdup_printf ("repo_ids.has ('IDL:GNOME/Evolution/Calendar/CalFactory:1.0')"
- " AND calendar:supported_protocols.has ('%s')", uri->protocol);
-
-
- servers = bonobo_activation_query (query, NULL, NULL);
-
- g_free (query);
- e_uri_free (uri);
-
- if (!servers) {
- g_warning (G_STRLOC ": Unable to query for calendar factories");
-
- return FALSE;
- }
-
- /* Try to activate the servers for the protocol */
- for (i = 0; i < servers->_length; i++) {
- const Bonobo_ServerInfo *info;
-
- info = servers->_buffer + i;
-
- g_message (G_STRLOC ": Activating calendar factory (%s)", info->iid);
- factory = bonobo_activation_activate_from_id (info->iid, 0, NULL, NULL);
-
- if (factory == CORBA_OBJECT_NIL)
- g_warning (G_STRLOC ": Could not activate calendar factory (%s)", info->iid);
- else
- *factories = g_list_append (*factories, factory);
- }
-
- CORBA_free (servers);
-
- return TRUE;
-}
-
-/* Object initialization function for the calendar client */
-static void
-cal_client_init (CalClient *client, CalClientClass *klass)
-{
- CalClientPrivate *priv;
-
- priv = g_new0 (CalClientPrivate, 1);
- client->priv = priv;
-
- priv->load_state = CAL_CLIENT_LOAD_NOT_LOADED;
- priv->uri = NULL;
- priv->mutex = e_mutex_new (E_MUTEX_REC);
- priv->listener = cal_listener_new (cal_set_mode_cb,
- backend_error_cb,
- categories_changed_cb,
- client);
-
- priv->cal_address = NULL;
- priv->alarm_email_address = NULL;
- priv->ldap_attribute = NULL;
- priv->capabilities = FALSE;
- priv->factories = NULL;
- priv->timezones = g_hash_table_new (g_str_hash, g_str_equal);
- priv->default_zone = icaltimezone_get_utc_timezone ();
- priv->comp_listener = NULL;
-
- g_signal_connect (G_OBJECT (priv->listener), "read_only", G_CALLBACK (cal_read_only_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "cal_address", G_CALLBACK (cal_cal_address_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "alarm_address", G_CALLBACK (cal_alarm_address_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "ldap_attribute", G_CALLBACK (cal_ldap_attribute_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "static_capabilities", G_CALLBACK (cal_static_capabilities_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "open", G_CALLBACK (cal_opened_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "remove", G_CALLBACK (cal_removed_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "create_object", G_CALLBACK (cal_object_created_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "modify_object", G_CALLBACK (cal_object_modified_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "remove_object", G_CALLBACK (cal_object_removed_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "discard_alarm", G_CALLBACK (cal_alarm_discarded_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "receive_objects", G_CALLBACK (cal_objects_received_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "send_objects", G_CALLBACK (cal_objects_sent_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "default_object", G_CALLBACK (cal_default_object_requested_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "object", G_CALLBACK (cal_object_requested_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "object_list", G_CALLBACK (cal_object_list_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "get_timezone", G_CALLBACK (cal_get_timezone_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "add_timezone", G_CALLBACK (cal_add_timezone_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "set_default_timezone", G_CALLBACK (cal_set_default_timezone_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "get_changes", G_CALLBACK (cal_get_changes_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "get_free_busy", G_CALLBACK (cal_get_free_busy_cb), client);
- g_signal_connect (G_OBJECT (priv->listener), "query", G_CALLBACK (cal_query_cb), client);
-}
-
-/* Finalize handler for the calendar client */
-static void
-cal_client_finalize (GObject *object)
-{
- CalClient *client;
- CalClientPrivate *priv;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_CAL_CLIENT (object));
-
- client = CAL_CLIENT (object);
- priv = client->priv;
-
- if (priv->listener) {
- cal_listener_stop_notification (priv->listener);
- bonobo_object_unref (priv->listener);
- priv->listener = NULL;
- }
-
- if (priv->comp_listener) {
- g_signal_handlers_disconnect_matched (G_OBJECT (priv->comp_listener),
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL,
- client);
- g_object_unref (G_OBJECT (priv->comp_listener));
- priv->comp_listener = NULL;
- }
-
- destroy_factories (client);
- destroy_cal (client);
-
- priv->load_state = CAL_CLIENT_LOAD_NOT_LOADED;
-
- if (priv->uri) {
- g_free (priv->uri);
- priv->uri = NULL;
- }
-
- if (priv->mutex) {
- e_mutex_destroy (priv->mutex);
- priv->mutex = NULL;
- }
-
- if (priv->cal_address) {
- g_free (priv->cal_address);
- priv->cal_address = NULL;
- }
- if (priv->alarm_email_address) {
- g_free (priv->alarm_email_address);
- priv->alarm_email_address = NULL;
- }
- if (priv->ldap_attribute) {
- g_free (priv->ldap_attribute);
- priv->ldap_attribute = NULL;
- }
- if (priv->capabilities) {
- g_free (priv->capabilities);
- priv->capabilities = NULL;
- }
-
- g_hash_table_foreach (priv->timezones, free_timezone, NULL);
- g_hash_table_destroy (priv->timezones);
- priv->timezones = NULL;
-
- g_free (priv);
- client->priv = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->finalize)
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-/* Class initialization function for the calendar client */
-static void
-cal_client_class_init (CalClientClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- cal_client_signals[CAL_OPENED] =
- g_signal_new ("cal_opened",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalClientClass, cal_opened),
- NULL, NULL,
- g_cclosure_marshal_VOID__ENUM,
- G_TYPE_NONE, 1,
- CAL_CLIENT_OPEN_STATUS_ENUM_TYPE);
- cal_client_signals[CAL_SET_MODE] =
- g_signal_new ("cal_set_mode",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalClientClass, cal_set_mode),
- NULL, NULL,
- cal_util_marshal_VOID__ENUM_ENUM,
- G_TYPE_NONE, 2,
- CAL_CLIENT_SET_MODE_STATUS_ENUM_TYPE,
- CAL_MODE_ENUM_TYPE);
- cal_client_signals[BACKEND_ERROR] =
- g_signal_new ("backend_error",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalClientClass, backend_error),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- cal_client_signals[CATEGORIES_CHANGED] =
- g_signal_new ("categories_changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalClientClass, categories_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
- cal_client_signals[FORGET_PASSWORD] =
- g_signal_new ("forget_password",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalClientClass, forget_password),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- cal_client_signals[BACKEND_DIED] =
- g_signal_new ("backend_died",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalClientClass, backend_died),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- klass->cal_opened = NULL;
- klass->categories_changed = NULL;
- klass->forget_password = NULL;
- klass->backend_died = NULL;
-
- object_class->finalize = cal_client_finalize;
-}
-
-/**
- * cal_client_get_type:
- *
- * Registers the #CalClient class if necessary, and returns the type ID assigned
- * to it.
- *
- * Return value: The type ID of the #CalClient class.
- **/
-GType
-cal_client_get_type (void)
-{
- static GType cal_client_type = 0;
-
- if (!cal_client_type) {
- static GTypeInfo info = {
- sizeof (CalClientClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) cal_client_class_init,
- NULL, NULL,
- sizeof (CalClient),
- 0,
- (GInstanceInitFunc) cal_client_init
- };
- cal_client_type = g_type_register_static (G_TYPE_OBJECT, "CalClient", &info, 0);
- }
-
- return cal_client_type;
-}
-
-
-static gboolean
-fetch_corba_cal (CalClient *client, const char *str_uri, CalObjType type)
-{
- CalClientPrivate *priv;
- GList *f;
- CORBA_Environment ev;
-
- priv = client->priv;
- g_return_val_if_fail (priv->load_state == CAL_CLIENT_LOAD_NOT_LOADED, FALSE);
- g_assert (priv->uri == NULL);
-
- g_return_val_if_fail (str_uri != NULL, FALSE);
-
- if (!get_factories (str_uri, &priv->factories))
- return FALSE;
-
- priv->uri = g_strdup (str_uri);
- priv->type = type;
-
- for (f = priv->factories; f; f = f->next) {
- GNOME_Evolution_Calendar_Cal cal;
-
- CORBA_exception_init (&ev);
-
- cal = GNOME_Evolution_Calendar_CalFactory_getCal (f->data, priv->uri, priv->type,
- BONOBO_OBJREF (priv->listener), &ev);
- if (BONOBO_EX (&ev))
- continue;
-
- priv->cal = cal;
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-/**
- * cal_client_new:
- *
- * Creates a new calendar client. It should be initialized by calling
- * cal_client_open().
- *
- * Return value: A newly-created calendar client, or NULL if the client could
- * not be constructed because it could not contact the calendar server.
- **/
-CalClient *
-cal_client_new (const char *uri, CalObjType type)
-{
- CalClient *client;
-
- client = g_object_new (CAL_CLIENT_TYPE, NULL);
-
- if (!fetch_corba_cal (client, uri, type)) {
- g_object_unref (client);
-
- return NULL;
- }
-
- return client;
-}
-
-/**
- * cal_client_set_auth_func
- * @client: A calendar client.
- * @func: The authentication function
- * @data: User data to be used when calling the authentication function
- *
- * Associates the given authentication function with a calendar client. This
- * function will be called any time the calendar server needs a password
- * from the client. So, calendar clients should provide such authentication
- * function, which, when called, should act accordingly (by showing a dialog
- * box, for example, to ask the user for the password).
- *
- * The authentication function must have the following form:
- * char * auth_func (CalClient *client,
- * const gchar *prompt,
- * const gchar *key,
- * gpointer user_data)
- */
-void
-cal_client_set_auth_func (CalClient *client, CalClientAuthFunc func, gpointer data)
-{
- g_return_if_fail (client != NULL);
- g_return_if_fail (IS_CAL_CLIENT (client));
-
- client->priv->auth_func = func;
- client->priv->auth_user_data = data;
-}
-
-/**
- * cal_client_open
- * @client: A calendar client.
- * @str_uri: URI of calendar to open.
- * @only_if_exists: FALSE if the calendar should be opened even if there
- * was no storage for it, i.e. to create a new calendar or load an existing
- * one if it already exists. TRUE if it should only try to load calendars
- * that already exist.
- *
- * Makes a calendar client initiate a request to open a calendar. The calendar
- * client will emit the "cal_opened" signal when the response from the server is
- * received.
- *
- * Return value: TRUE on success, FALSE on failure to issue the open request.
- **/
-gboolean
-cal_client_open (CalClient *client, gboolean only_if_exists, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- priv->load_state = CAL_CLIENT_LOAD_LOADING;
-
- GNOME_Evolution_Calendar_Cal_open (priv->cal, only_if_exists, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- g_signal_emit (G_OBJECT (client), cal_client_signals[CAL_OPENED], 0,
- E_CALENDAR_STATUS_CORBA_EXCEPTION);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- if (status == E_CALENDAR_STATUS_OK)
- priv->load_state = CAL_CLIENT_LOAD_LOADED;
- else
- priv->load_state = CAL_CLIENT_LOAD_NOT_LOADED;
-
- g_signal_emit (G_OBJECT (client), cal_client_signals[CAL_OPENED], 0, status);
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-typedef struct {
- CalClient *client;
-
- gboolean exists;
-} CalClientAsyncData;
-
-static gboolean
-open_async (gpointer data)
-{
- CalClientAsyncData *ccad = data;
- GError *error = NULL;
-
- cal_client_open (ccad->client, ccad->exists, &error);
-
- g_clear_error (&error);
-
- g_object_unref (ccad);
- g_free (ccad);
-
- return FALSE;
-}
-
-void
-cal_client_open_async (CalClient *client, gboolean only_if_exists)
-{
- CalClientAsyncData *ccad;
-
- g_return_if_fail (client != NULL);
- g_return_if_fail (IS_CAL_CLIENT (client));
-
- ccad = g_new0 (CalClientAsyncData, 1);
- ccad->client = g_object_ref (client);
- ccad->exists = only_if_exists;
-
- /* FIXME This should really spawn a new thread */
- g_idle_add (open_async, ccad);
-}
-
-gboolean
-cal_client_remove_calendar (CalClient *client, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_remove (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-#if 0
-/* Builds an URI list out of a CORBA string sequence */
-static GList *
-build_uri_list (GNOME_Evolution_Calendar_StringSeq *seq)
-{
- GList *uris = NULL;
- int i;
-
- for (i = 0; i < seq->_length; i++)
- uris = g_list_prepend (uris, g_strdup (seq->_buffer[i]));
-
- return uris;
-}
-#endif
-
-/**
- * cal_client_uri_list:
- * @client: A calendar client
- * @type: type of uri's to get
- *
- *
- * Return value: A list of URI's open on the wombat
- **/
-GList *
-cal_client_uri_list (CalClient *client, CalMode mode)
-{
-#if 0
- CalClientPrivate *priv;
- GNOME_Evolution_Calendar_StringSeq *uri_seq;
- GList *uris = NULL;
- CORBA_Environment ev;
- GList *f;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- for (f = priv->factories; f; f = f->next) {
- CORBA_exception_init (&ev);
- uri_seq = GNOME_Evolution_Calendar_CalFactory_uriList (f->data, mode, &ev);
-
- if (BONOBO_EX (&ev)) {
- g_message ("cal_client_uri_list(): request failed");
-
- /* free memory and return */
- g_list_foreach (uris, (GFunc) g_free, NULL);
- g_list_free (uris);
- uris = NULL;
- break;
- }
- else {
- uris = g_list_concat (uris, build_uri_list (uri_seq));
- CORBA_free (uri_seq);
- }
-
- CORBA_exception_free (&ev);
- }
-
- return uris;
-#endif
-
- return NULL;
-}
-
-
-/**
- * cal_client_get_load_state:
- * @client: A calendar client.
- *
- * Queries the state of loading of a calendar client.
- *
- * Return value: A #CalClientLoadState value indicating whether the client has
- * not been loaded with cal_client_open_calendar() yet, whether it is being
- * loaded, or whether it is already loaded.
- **/
-CalClientLoadState
-cal_client_get_load_state (CalClient *client)
-{
- CalClientPrivate *priv;
-
- g_return_val_if_fail (client != NULL, CAL_CLIENT_LOAD_NOT_LOADED);
- g_return_val_if_fail (IS_CAL_CLIENT (client), CAL_CLIENT_LOAD_NOT_LOADED);
-
- priv = client->priv;
- return priv->load_state;
-}
-
-/**
- * cal_client_get_uri:
- * @client: A calendar client.
- *
- * Queries the URI that is open in a calendar client.
- *
- * Return value: The URI of the calendar that is already loaded or is being
- * loaded, or NULL if the client has not started a load request yet.
- **/
-const char *
-cal_client_get_uri (CalClient *client)
-{
- CalClientPrivate *priv;
-
- g_return_val_if_fail (client != NULL, NULL);
- g_return_val_if_fail (IS_CAL_CLIENT (client), NULL);
-
- priv = client->priv;
- return priv->uri;
-}
-
-/**
- * cal_client_is_read_only:
- * @client: A calendar client.
- *
- * Queries whether the calendar client can perform modifications
- * on the calendar or not. Whether the backend is read only or not
- * is specified, on exit, in the @read_only argument.
- *
- * Return value: TRUE if the call was successful, FALSE if there was an error.
- */
-gboolean
-cal_client_is_read_only (CalClient *client, gboolean *read_only, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_isReadOnly (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *read_only = our_op->bool;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- return status;
-}
-
-/**
- * cal_client_get_cal_address:
- * @client: A calendar client.
- *
- * Queries the calendar address associated with a calendar client.
- *
- * Return value: The calendar address associated with the calendar that
- * is loaded or being loaded, or %NULL if the client has not started a
- * load request yet or the calendar has no associated email address.
- **/
-gboolean
-cal_client_get_cal_address (CalClient *client, char **cal_address, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getCalAddress (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *cal_address = our_op->string;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-gboolean
-cal_client_get_alarm_email_address (CalClient *client, char **alarm_address, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getAlarmEmailAddress (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *alarm_address = our_op->string;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-gboolean
-cal_client_get_ldap_attribute (CalClient *client, char **ldap_attribute, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getLdapAttribute (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *ldap_attribute = our_op->string;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-static gboolean
-load_static_capabilities (CalClient *client, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
- char *cap;
-
- priv = client->priv;
-
- if (priv->capabilities)
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getStaticCapabilities (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- cap = our_op->string;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-static gboolean
-check_capability (CalClient *client, const char *cap)
-{
- CalClientPrivate *priv;
-
- priv = client->priv;
-
- /* FIXME Check result */
- load_static_capabilities (client, NULL);
- if (priv->capabilities && strstr (priv->capabilities, cap))
- return TRUE;
-
- return FALSE;
-}
-
-gboolean
-cal_client_get_one_alarm_only (CalClient *client)
-{
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- return check_capability (client, CAL_STATIC_CAPABILITY_ONE_ALARM_ONLY);
-}
-
-gboolean
-cal_client_get_organizer_must_attend (CalClient *client)
-{
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- return check_capability (client, CAL_STATIC_CAPABILITY_ORGANIZER_MUST_ATTEND);
-}
-
-gboolean
-cal_client_get_static_capability (CalClient *client, const char *cap)
-{
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- return check_capability (client, cap);
-}
-
-gboolean
-cal_client_get_save_schedules (CalClient *client)
-{
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- return check_capability (client, CAL_STATIC_CAPABILITY_SAVE_SCHEDULES);
-}
-
-gboolean
-cal_client_set_mode (CalClient *client, CalMode mode)
-{
- CalClientPrivate *priv;
- gboolean retval = TRUE;
- CORBA_Environment ev;
-
- g_return_val_if_fail (client != NULL, -1);
- g_return_val_if_fail (IS_CAL_CLIENT (client), -1);
-
- priv = client->priv;
- g_return_val_if_fail (priv->load_state == CAL_CLIENT_LOAD_LOADED, -1);
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Calendar_Cal_setMode (priv->cal, mode, &ev);
-
- if (BONOBO_EX (&ev))
- retval = FALSE;
-
- CORBA_exception_free (&ev);
-
- return retval;
-}
-
-
-/* This is used in the callback which fetches all the timezones needed for an
- object. */
-typedef struct _CalClientGetTimezonesData CalClientGetTimezonesData;
-struct _CalClientGetTimezonesData {
- CalClient *client;
-
- /* This starts out at E_CALENDAR_STATUS_OK. If an error occurs this
- contains the last error. */
- ECalendarStatus status;
-};
-
-gboolean
-cal_client_get_default_object (CalClient *client, icalcomponent **icalcomp, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getDefaultObject (priv->cal, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *icalcomp = icalparser_parse_string (our_op->string);
- g_free (our_op->string);
-
- if (!*icalcomp) {
- status = E_CALENDAR_STATUS_INVALID_OBJECT;
- } else {
- CalClientGetTimezonesData cb_data;
-
- /* Now make sure we have all timezones needed for this object.
- We do this to try to avoid any problems caused by getting a timezone
- in the middle of other code. Any calls to ORBit result in a
- recursive call of the GTK+ main loop, which can cause problems for
- code that doesn't expect it. Currently GnomeCanvas has problems if
- we try to get a timezone in the middle of a redraw, and there is a
- resize pending, which leads to an assert failure and an abort. */
- cb_data.client = client;
- cb_data.status = E_CALENDAR_STATUS_OK;
- icalcomponent_foreach_tzid (*icalcomp,
- cal_client_get_object_timezones_cb,
- &cb_data);
-
- status = cb_data.status;
- }
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-/**
- * cal_client_get_object:
- * @client: A calendar client.
- * @uid: Unique identifier for a calendar component.
- * @icalcomp: Return value for the calendar component object.
- *
- * Queries a calendar for a calendar component object based on its unique
- * identifier.
- *
- * Return value: Result code based on the status of the operation.
- **/
-gboolean
-cal_client_get_object (CalClient *client, const char *uid, const char *rid, icalcomponent **icalcomp, GError **error)
-{
-
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getObject (priv->cal, uid, rid ? rid : "", &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *icalcomp = icalparser_parse_string (our_op->string);
- g_free (our_op->string);
-
- if (status == E_CALENDAR_STATUS_OK && !*icalcomp) {
- status = E_CALENDAR_STATUS_INVALID_OBJECT;
- } else if (status == E_CALENDAR_STATUS_OK){
- CalClientGetTimezonesData cb_data;
-
- /* Now make sure we have all timezones needed for this object.
- We do this to try to avoid any problems caused by getting a timezone
- in the middle of other code. Any calls to ORBit result in a
- recursive call of the GTK+ main loop, which can cause problems for
- code that doesn't expect it. Currently GnomeCanvas has problems if
- we try to get a timezone in the middle of a redraw, and there is a
- resize pending, which leads to an assert failure and an abort. */
- cb_data.client = client;
- cb_data.status = E_CALENDAR_STATUS_OK;
- icalcomponent_foreach_tzid (*icalcomp,
- cal_client_get_object_timezones_cb,
- &cb_data);
-
- status = cb_data.status;
- }
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-
-static void
-cal_client_get_object_timezones_cb (icalparameter *param,
- void *data)
-{
- CalClientGetTimezonesData *cb_data = data;
- const char *tzid;
- icaltimezone *zone;
- GError *error = NULL;
-
- tzid = icalparameter_get_tzid (param);
- if (!tzid) {
- cb_data->status = E_CALENDAR_STATUS_INVALID_OBJECT;
- return;
- }
-
- if (!cal_client_get_timezone (cb_data->client, tzid, &zone, &error))
- cb_data->status = error->code;
-
- g_clear_error (&error);
-}
-
-/* Resolves TZIDs for the recurrence generator. */
-icaltimezone*
-cal_client_resolve_tzid_cb (const char *tzid, gpointer data)
-{
- CalClient *client;
- icaltimezone *zone = NULL;
-
- g_return_val_if_fail (data != NULL, NULL);
- g_return_val_if_fail (IS_CAL_CLIENT (data), NULL);
-
- client = CAL_CLIENT (data);
-
- /* FIXME: Handle errors. */
- cal_client_get_timezone (client, tzid, &zone, NULL);
-
- return zone;
-}
-
-gboolean
-cal_client_get_changes (CalClient *client, const char *change_id, GList **changes, GError **error)
-{
- CORBA_Environment ev;
- ECalendarOp *our_op;
- ECalendarStatus status;
-
- g_return_val_if_fail (client != NULL, E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (IS_CAL_CLIENT (client), E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (change_id != NULL, E_CALENDAR_STATUS_INVALID_ARG);
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getChanges (client->priv->cal, change_id, &ev);
-
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *changes = our_op->list;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-
-/**
- * cal_client_get_object_list:
- * @client:
- * @query:
- *
- *
- *
- * Return value:
- **/
-gboolean
-cal_client_get_object_list (CalClient *client, const char *query, GList **objects, GError **error)
-{
- CORBA_Environment ev;
- ECalendarOp *our_op;
- ECalendarStatus status;
-
- g_return_val_if_fail (client != NULL, E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (IS_CAL_CLIENT (client), E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (query != NULL, E_CALENDAR_STATUS_INVALID_ARG);
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getObjectList (client->priv->cal, query, &ev);
-
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *objects = our_op->list;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-gboolean
-cal_client_get_object_list_as_comp (CalClient *client, const char *query, GList **objects, GError **error)
-{
- GList *ical_objects = NULL;
- GList *l;
-
- g_return_val_if_fail (client != NULL, E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (IS_CAL_CLIENT (client), E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (query != NULL, E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (objects != NULL, E_CALENDAR_STATUS_INVALID_ARG);
-
- if (!cal_client_get_object_list (client, query, &ical_objects, error))
- return FALSE;
-
- *objects = NULL;
- for (l = ical_objects; l; l = l->next) {
- CalComponent *comp;
-
- comp = cal_component_new ();
- cal_component_set_icalcomponent (comp, l->data);
- *objects = g_list_prepend (*objects, comp);
- }
-
- g_list_free (ical_objects);
-
- return TRUE;
-}
-
-void
-cal_client_free_object_list (GList *objects)
-{
- GList *l;
-
- for (l = objects; l; l = l->next)
- icalcomponent_free (l->data);
-
- g_list_free (objects);
-}
-
-/**
- * cal_client_get_free_busy
- * @client:: A calendar client.
- * @users: List of users to retrieve free/busy information for.
- * @start: Start time for query.
- * @end: End time for query.
- *
- * Gets free/busy information from the calendar server.
- *
- * Returns: a GList of VFREEBUSY CalComponents
- */
-gboolean
-cal_client_get_free_busy (CalClient *client, GList *users, time_t start, time_t end,
- GList **freebusy, GError **error)
-{
- CORBA_Environment ev;
- ECalendarOp *our_op;
- ECalendarStatus status;
- GNOME_Evolution_Calendar_UserList corba_users;
- GList *l;
- int i, len;
-
- g_return_val_if_fail (client != NULL, E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (IS_CAL_CLIENT (client), E_CALENDAR_STATUS_INVALID_ARG);
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- /* create the CORBA user list to be passed to the backend */
- len = g_list_length (users);
-
- corba_users._length = len;
- corba_users._buffer = CORBA_sequence_GNOME_Evolution_Calendar_User_allocbuf (len);
-
- for (l = users, i = 0; l; l = l->next, i++)
- corba_users._buffer[i] = CORBA_string_dup (l->data);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getFreeBusy (client->priv->cal, &corba_users, start, end, &ev);
-
- CORBA_free (corba_users._buffer);
-
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- *freebusy = NULL;
- for (l = our_op->list; l; l = l->next) {
- CalComponent *comp;
-
- icalcomponent *icalcomp;
- icalcomponent_kind kind;
-
- icalcomp = icalparser_parse_string (l->data);
- if (!icalcomp)
- continue;
-
- kind = icalcomponent_isa (icalcomp);
- if (kind == ICAL_VFREEBUSY_COMPONENT) {
- comp = cal_component_new ();
- if (!cal_component_set_icalcomponent (comp, icalcomp)) {
- icalcomponent_free (icalcomp);
- g_object_unref (G_OBJECT (comp));
- continue;
- }
-
- *freebusy = g_list_append (*freebusy, comp);
- }
- else
- icalcomponent_free (icalcomp);
- }
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-struct comp_instance {
- CalComponent *comp;
- time_t start;
- time_t end;
-};
-
-/* Called from cal_recur_generate_instances(); adds an instance to the list */
-static gboolean
-add_instance (CalComponent *comp, time_t start, time_t end, gpointer data)
-{
- GList **list;
- struct comp_instance *ci;
-
- list = data;
-
- ci = g_new (struct comp_instance, 1);
-
- ci->comp = comp;
- g_object_ref (G_OBJECT (ci->comp));
-
- ci->start = start;
- ci->end = end;
-
- *list = g_list_prepend (*list, ci);
-
- return TRUE;
-}
-
-/* Used from g_list_sort(); compares two struct comp_instance structures */
-static gint
-compare_comp_instance (gconstpointer a, gconstpointer b)
-{
- const struct comp_instance *cia, *cib;
- time_t diff;
-
- cia = a;
- cib = b;
-
- diff = cia->start - cib->start;
- return (diff < 0) ? -1 : (diff > 0) ? 1 : 0;
-}
-
-/**
- * cal_client_generate_instances:
- * @client: A calendar client.
- * @type: Bitmask with types of objects to return.
- * @start: Start time for query.
- * @end: End time for query.
- * @cb: Callback for each generated instance.
- * @cb_data: Closure data for the callback.
- *
- * Does a combination of cal_client_get_object_list () and
- * cal_recur_generate_instances().
- *
- * The callback function should do a g_object_ref() of the calendar component
- * it gets passed if it intends to keep it around.
- **/
-void
-cal_client_generate_instances (CalClient *client, CalObjType type,
- time_t start, time_t end,
- CalRecurInstanceFn cb, gpointer cb_data)
-{
- CalClientPrivate *priv;
- GList *objects;
- GList *instances;
- GList *l;
- char *query;
-
- g_return_if_fail (client != NULL);
- g_return_if_fail (IS_CAL_CLIENT (client));
-
- priv = client->priv;
- g_return_if_fail (priv->load_state == CAL_CLIENT_LOAD_LOADED);
-
- g_return_if_fail (start != -1 && end != -1);
- g_return_if_fail (start <= end);
- g_return_if_fail (cb != NULL);
-
- /* Generate objects */
- query = g_strdup_printf ("(occur-in-time-range? (%lu) (%lu))", start, end);
- if (!cal_client_get_object_list (client, query, &objects, NULL)) {
- g_free (query);
- return;
- }
- g_free (query);
-
- instances = NULL;
-
- for (l = objects; l; l = l->next) {
- CalComponent *comp;
-
- comp = l->data;
- cal_recur_generate_instances (comp, start, end, add_instance, &instances,
- cal_client_resolve_tzid_cb, client,
- priv->default_zone);
- g_object_unref (G_OBJECT (comp));
- }
-
- g_list_free (objects);
-
- /* Generate instances and spew them out */
-
- instances = g_list_sort (instances, compare_comp_instance);
-
- for (l = instances; l; l = l->next) {
- struct comp_instance *ci;
- gboolean result;
-
- ci = l->data;
-
- result = (* cb) (ci->comp, ci->start, ci->end, cb_data);
-
- if (!result)
- break;
- }
-
- /* Clean up */
-
- for (l = instances; l; l = l->next) {
- struct comp_instance *ci;
-
- ci = l->data;
- g_object_unref (G_OBJECT (ci->comp));
- g_free (ci);
- }
-
- g_list_free (instances);
-}
-
-/* Builds a list of CalComponentAlarms structures */
-static GSList *
-build_component_alarms_list (CalClient *client, GList *object_list, time_t start, time_t end)
-{
- GSList *comp_alarms;
- GList *l;
-
- comp_alarms = NULL;
-
- for (l = object_list; l != NULL; l = l->next) {
- CalComponent *comp;
- CalComponentAlarms *alarms;
- icalcomponent *icalcomp;
- CalAlarmAction omit[] = {-1};
-
- icalcomp = icalparser_parse_string (l->data);
- if (!icalcomp)
- continue;
-
- comp = cal_component_new ();
- if (!cal_component_set_icalcomponent (comp, icalcomp)) {
- icalcomponent_free (icalcomp);
- g_object_unref (G_OBJECT (comp));
- continue;
- }
-
- alarms = cal_util_generate_alarms_for_comp (comp, start, end, omit, cal_client_resolve_tzid_cb,
- icalcomp, client->priv->default_zone);
- if (alarms)
- comp_alarms = g_slist_prepend (comp_alarms, alarms);
- }
-
- return comp_alarms;
-}
-
-/**
- * cal_client_get_alarms_in_range:
- * @client: A calendar client.
- * @start: Start time for query.
- * @end: End time for query.
- *
- * Queries a calendar for the alarms that trigger in the specified range of
- * time.
- *
- * Return value: A list of #CalComponentAlarms structures. This should be freed
- * using the cal_client_free_alarms() function, or by freeing each element
- * separately with cal_component_alarms_free() and then freeing the list with
- * g_slist_free().
- **/
-GSList *
-cal_client_get_alarms_in_range (CalClient *client, time_t start, time_t end)
-{
- CalClientPrivate *priv;
- GSList *alarms;
- char *sexp;
- GList *object_list = NULL;
-
- g_return_val_if_fail (client != NULL, NULL);
- g_return_val_if_fail (IS_CAL_CLIENT (client), NULL);
-
- priv = client->priv;
- g_return_val_if_fail (priv->load_state == CAL_CLIENT_LOAD_LOADED, NULL);
-
- g_return_val_if_fail (start != -1 && end != -1, NULL);
- g_return_val_if_fail (start <= end, NULL);
-
- /* build the query string */
- sexp = g_strdup ("(and (has-alarms? #t))");
-
- /* execute the query on the server */
- if (!cal_client_get_object_list (client, sexp, &object_list, NULL)) {
- g_free (sexp);
- return NULL;
- }
-
- alarms = build_component_alarms_list (client, object_list, start, end);
-
- g_list_foreach (object_list, (GFunc) g_free, NULL);
- g_list_free (object_list);
- g_free (sexp);
-
- return alarms;
-}
-
-/**
- * cal_client_free_alarms:
- * @comp_alarms: A list of #CalComponentAlarms structures.
- *
- * Frees a list of #CalComponentAlarms structures as returned by
- * cal_client_get_alarms_in_range().
- **/
-void
-cal_client_free_alarms (GSList *comp_alarms)
-{
- GSList *l;
-
- for (l = comp_alarms; l; l = l->next) {
- CalComponentAlarms *alarms;
-
- alarms = l->data;
- g_assert (alarms != NULL);
-
- cal_component_alarms_free (alarms);
- }
-
- g_slist_free (comp_alarms);
-}
-
-/**
- * cal_client_get_alarms_for_object:
- * @client: A calendar client.
- * @uid: Unique identifier for a calendar component.
- * @start: Start time for query.
- * @end: End time for query.
- * @alarms: Return value for the component's alarm instances. Will return NULL
- * if no instances occur within the specified time range. This should be freed
- * using the cal_component_alarms_free() function.
- *
- * Queries a calendar for the alarms of a particular object that trigger in the
- * specified range of time.
- *
- * Return value: TRUE on success, FALSE if the object was not found.
- **/
-gboolean
-cal_client_get_alarms_for_object (CalClient *client, const char *uid,
- time_t start, time_t end,
- CalComponentAlarms **alarms)
-{
- CalClientPrivate *priv;
- icalcomponent *icalcomp;
- CalComponent *comp;
- CalAlarmAction omit[] = {-1};
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
- g_return_val_if_fail (priv->load_state == CAL_CLIENT_LOAD_LOADED, 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);
-
- *alarms = NULL;
-
- if (!cal_client_get_object (client, uid, NULL, &icalcomp, NULL))
- return FALSE;
- if (!icalcomp)
- return FALSE;
-
- comp = cal_component_new ();
- if (!cal_component_set_icalcomponent (comp, icalcomp)) {
- icalcomponent_free (icalcomp);
- g_object_unref (G_OBJECT (comp));
- return FALSE;
- }
-
- *alarms = cal_util_generate_alarms_for_comp (comp, start, end, omit, cal_client_resolve_tzid_cb,
- icalcomp, priv->default_zone);
-
- return TRUE;
-}
-
-/**
- * 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.
- */
-gboolean
-cal_client_discard_alarm (CalClient *client, CalComponent *comp, const char *auid, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
- const char *uid;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- cal_component_get_uid (comp, &uid);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_discardAlarm (priv->cal, uid, auid, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-typedef struct _ForeachTZIDCallbackData ForeachTZIDCallbackData;
-struct _ForeachTZIDCallbackData {
- CalClient *client;
- GHashTable *timezone_hash;
- gboolean include_all_timezones;
- gboolean success;
-};
-
-/* This adds the VTIMEZONE given by the TZID parameter to the GHashTable in
- data. */
-static void
-foreach_tzid_callback (icalparameter *param, void *cbdata)
-{
- ForeachTZIDCallbackData *data = cbdata;
- CalClientPrivate *priv;
- const char *tzid;
- icaltimezone *zone;
- icalcomponent *vtimezone_comp;
- char *vtimezone_as_string;
-
- priv = data->client->priv;
-
- /* Get the TZID string from the parameter. */
- tzid = icalparameter_get_tzid (param);
- if (!tzid)
- return;
-
- /* Check if we've already added it to the GHashTable. */
- if (g_hash_table_lookup (data->timezone_hash, tzid))
- return;
-
- if (data->include_all_timezones) {
- if (!cal_client_get_timezone (data->client, tzid, &zone, NULL)) {
- data->success = FALSE;
- return;
- }
- } else {
- /* Check if it is in our cache. If it is, it must already be
- on the server so return. */
- if (g_hash_table_lookup (priv->timezones, tzid))
- return;
-
- /* Check if it is a builtin timezone. If it isn't, return. */
- zone = icaltimezone_get_builtin_timezone_from_tzid (tzid);
- if (!zone)
- return;
- }
-
- /* Convert it to a string and add it to the hash. */
- vtimezone_comp = icaltimezone_get_component (zone);
- if (!vtimezone_comp)
- return;
-
- vtimezone_as_string = icalcomponent_as_ical_string (vtimezone_comp);
-
- g_hash_table_insert (data->timezone_hash, (char*) tzid,
- g_strdup (vtimezone_as_string));
-}
-
-/* This appends the value string to the GString given in data. */
-static void
-append_timezone_string (gpointer key, gpointer value, gpointer data)
-{
- GString *vcal_string = data;
-
- g_string_append (vcal_string, value);
- g_free (value);
-}
-
-
-/* This simply frees the hash values. */
-static void
-free_timezone_string (gpointer key, gpointer value, gpointer data)
-{
- g_free (value);
-}
-
-
-/* This converts the VEVENT/VTODO to a string. If include_all_timezones is
- TRUE, it includes all the VTIMEZONE components needed for the VEVENT/VTODO.
- If not, it only includes builtin timezones that may not be on the server.
-
- To do that we check every TZID in the component to see if it is a builtin
- timezone. If it is, we see if it it in our cache. If it is in our cache,
- then we know the server already has it and we don't need to send it.
- If it isn't in our cache, then we need to send it to the server.
- If we need to send any timezones to the server, then we have to create a
- complete VCALENDAR object, otherwise we can just send a single VEVENT/VTODO
- as before. */
-static char*
-cal_client_get_component_as_string_internal (CalClient *client,
- icalcomponent *icalcomp,
- gboolean include_all_timezones)
-{
- GHashTable *timezone_hash;
- GString *vcal_string;
- int initial_vcal_string_len;
- ForeachTZIDCallbackData cbdata;
- char *obj_string;
- CalClientPrivate *priv;
-
- priv = client->priv;
-
- timezone_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
- /* Add any timezones needed to the hash. We use a hash since we only
- want to add each timezone once at most. */
- cbdata.client = client;
- cbdata.timezone_hash = timezone_hash;
- cbdata.include_all_timezones = include_all_timezones;
- cbdata.success = TRUE;
- icalcomponent_foreach_tzid (icalcomp, foreach_tzid_callback, &cbdata);
- if (!cbdata.success) {
- g_hash_table_foreach (timezone_hash, free_timezone_string,
- NULL);
- return NULL;
- }
-
- /* Create the start of a VCALENDAR, to add the VTIMEZONES to,
- and remember its length so we know if any VTIMEZONEs get added. */
- vcal_string = g_string_new (NULL);
- g_string_append (vcal_string,
- "BEGIN:VCALENDAR\n"
- "PRODID:-//Ximian//NONSGML Evolution Calendar//EN\n"
- "VERSION:2.0\n"
- "METHOD:PUBLISH\n");
- initial_vcal_string_len = vcal_string->len;
-
- /* Now concatenate all the timezone strings. This also frees the
- timezone strings as it goes. */
- g_hash_table_foreach (timezone_hash, append_timezone_string,
- vcal_string);
-
- /* Get the string for the VEVENT/VTODO. */
- obj_string = g_strdup (icalcomponent_as_ical_string (icalcomp));
-
- /* If there were any timezones to send, create a complete VCALENDAR,
- else just send the VEVENT/VTODO string. */
- if (!include_all_timezones
- && vcal_string->len == initial_vcal_string_len) {
- g_string_free (vcal_string, TRUE);
- } else {
- g_string_append (vcal_string, obj_string);
- g_string_append (vcal_string, "END:VCALENDAR\n");
- g_free (obj_string);
- obj_string = vcal_string->str;
- g_string_free (vcal_string, FALSE);
- }
-
- g_hash_table_destroy (timezone_hash);
-
- return obj_string;
-}
-
-/**
- * cal_client_get_component_as_string:
- * @client: A calendar client.
- * @icalcomp: A calendar component object.
- *
- * Gets a calendar component as an iCalendar string, with a toplevel
- * VCALENDAR component and all VTIMEZONEs needed for the component.
- *
- * Return value: the component as a complete iCalendar string, or NULL on
- * failure. The string should be freed after use.
- **/
-char*
-cal_client_get_component_as_string (CalClient *client, icalcomponent *icalcomp)
-{
- return cal_client_get_component_as_string_internal (client, icalcomp, TRUE);
-}
-
-gboolean
-cal_client_create_object (CalClient *client, icalcomponent *icalcomp, char **uid, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_createObject (priv->cal, icalcomponent_as_ical_string (icalcomp), &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- if (uid)
- *uid = our_op->uid;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-gboolean
-cal_client_modify_object (CalClient *client, icalcomponent *icalcomp, CalObjModType mod, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
- g_return_val_if_fail (icalcomp != NULL, FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_modifyObject (priv->cal, icalcomponent_as_ical_string (icalcomp), mod, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-gboolean
-cal_client_remove_object_with_mod (CalClient *client, const char *uid,
- const char *rid, CalObjModType mod, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_removeObject (priv->cal, uid, rid ? rid : "", mod, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-/**
- * cal_client_remove_object:
- * @client: A calendar client.
- * @uid: Unique identifier of the calendar component to remove.
- *
- * Asks a calendar to remove a component. If the server is able to remove the
- * component, all clients will be notified and they will emit the "obj_removed"
- * signal.
- *
- * Return value: a #CalClientResult value indicating the result of the
- * operation.
- **/
-gboolean
-cal_client_remove_object (CalClient *client, const char *uid, GError **error)
-{
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- return cal_client_remove_object_with_mod (client, uid, NULL, CALOBJ_MOD_ALL, error);
-}
-
-gboolean
-cal_client_receive_objects (CalClient *client, icalcomponent *icalcomp, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_receiveObjects (priv->cal, icalcomponent_as_ical_string (icalcomp), &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-gboolean
-cal_client_send_objects (CalClient *client, icalcomponent *icalcomp, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_sendObjects (priv->cal, icalcomponent_as_ical_string (icalcomp), &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-gboolean
-cal_client_get_timezone (CalClient *client, const char *tzid, icaltimezone **zone, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
- icalcomponent *icalcomp;
-
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
- g_return_val_if_fail (tzid != NULL, FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (priv->mutex);
-
- /* Check for well known zones and in the cache */
- *zone = NULL;
-
- /* If tzid is NULL or "" we return NULL, since it is a 'local time'. */
- if (!tzid || !tzid[0]) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
- }
-
- /* If it is UTC, we return the special UTC timezone. */
- if (!strcmp (tzid, "UTC")) {
- *zone = icaltimezone_get_utc_timezone ();
- } else {
- /* See if we already have it in the cache. */
- *zone = g_hash_table_lookup (priv->timezones, tzid);
- }
-
- if (*zone) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
- }
-
- /* call the backend */
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_getTimezone (priv->cal, tzid, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- icalcomp = icalparser_parse_string (our_op->string);
- g_free (our_op->string);
-
- /* FIXME Invalid object status? */
- if (!icalcomp) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OBJECT_NOT_FOUND, error);
- }
-
- *zone = icaltimezone_new ();
- if (!icaltimezone_set_component (*zone, icalcomp)) {
- icaltimezone_free (*zone, 1);
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OBJECT_NOT_FOUND, error);
- }
-
- /* Now add it to the cache, to avoid the server call in future. */
- g_hash_table_insert (priv->timezones, icaltimezone_get_tzid (*zone), *zone);
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-/**
- * cal_client_add_timezone
- * @client: A calendar client.
- * @izone: The timezone to add.
- * @error: Placeholder for error information.
- *
- * Add a VTIMEZONE object to the given calendar.
- *
- * Returns: TRUE if successful, FALSE otherwise.
- */
-gboolean
-cal_client_add_timezone (CalClient *client, icaltimezone *izone, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
- const char *tzobj;
-
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
- g_return_val_if_fail (izone != NULL, FALSE);
-
- priv = client->priv;
-
- e_mutex_lock (priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (priv->mutex);
-
- /* convert icaltimezone into a string */
- tzobj = icalcomponent_as_ical_string (icaltimezone_get_component (izone));
-
- /* call the backend */
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_addTimezone (priv->cal, tzobj, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-/**
- * cal_client_get_query:
- * @client: A calendar client.
- * @sexp: S-expression representing the query.
- *
- * Creates a live query object from a loaded calendar.
- *
- * Return value: A query object that will emit notification signals as calendar
- * components are added and removed from the query in the server.
- **/
-gboolean
-cal_client_get_query (CalClient *client, const char *sexp, CalQuery **query, GError **error)
-{
- CORBA_Environment ev;
- ECalendarOp *our_op;
- ECalendarStatus status;
-
- g_return_val_if_fail (client != NULL, E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (IS_CAL_CLIENT (client), E_CALENDAR_STATUS_INVALID_ARG);
- g_return_val_if_fail (query != NULL, E_CALENDAR_STATUS_INVALID_ARG);
-
- e_mutex_lock (client->priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (client->priv->mutex);
-
- CORBA_exception_init (&ev);
-
- our_op->listener = query_listener_new ();
- GNOME_Evolution_Calendar_Cal_getQuery (client->priv->cal, sexp, BONOBO_OBJREF (our_op->listener), &ev);
-
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
- *query = our_op->query;
-
- bonobo_object_unref (BONOBO_OBJECT (our_op->listener));
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-
-/* This ensures that the given timezone is on the server. We use this to pass
- the default timezone to the server, so it can resolve DATE and floating
- DATE-TIME values into specific times. (Most of our IDL interface uses
- time_t values to pass specific times from the server to the client.) */
-static gboolean
-cal_client_ensure_timezone_on_server (CalClient *client, icaltimezone *zone, GError **error)
-{
- CalClientPrivate *priv;
- char *tzid;
- icaltimezone *tmp_zone;
-
- priv = client->priv;
-
- /* FIXME This is highly broken since there is no locking */
-
- /* If the zone is NULL or UTC we don't need to do anything. */
- if (!zone)
- return TRUE;
-
- tzid = icaltimezone_get_tzid (zone);
-
- if (!strcmp (tzid, "UTC"))
- return TRUE;
-
- /* See if we already have it in the cache. If we do, it must be on
- the server already. */
- tmp_zone = g_hash_table_lookup (priv->timezones, tzid);
- if (tmp_zone)
- return TRUE;
-
- /* Now we have to send it to the server, in case it doesn't already
- have it. */
- return cal_client_add_timezone (client, zone, error);
-}
-
-gboolean
-cal_client_set_default_timezone (CalClient *client, icaltimezone *zone, GError **error)
-{
- CalClientPrivate *priv;
- CORBA_Environment ev;
- ECalendarStatus status;
- ECalendarOp *our_op;
- const char *tzid;
-
- g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE);
- g_return_val_if_fail (zone != NULL, FALSE);
-
- priv = client->priv;
-
- /* Make sure the server has the VTIMEZONE data. */
- if (!cal_client_ensure_timezone_on_server (client, zone, error))
- return FALSE;
-
- e_mutex_lock (priv->mutex);
-
- if (client->priv->load_state != CAL_CLIENT_LOAD_LOADED) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_URI_NOT_LOADED, error);
- }
-
- if (client->priv->current_op != NULL) {
- e_mutex_unlock (client->priv->mutex);
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_BUSY, error);
- }
-
- our_op = e_calendar_new_op (client);
-
- e_mutex_lock (our_op->mutex);
-
- e_mutex_unlock (priv->mutex);
-
- /* FIXME Adding it to the server to change the tzid */
- tzid = icaltimezone_get_tzid (zone);
-
- /* call the backend */
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Cal_setDefaultTimezone (priv->cal, tzid, &ev);
- if (BONOBO_EX (&ev)) {
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- CORBA_exception_free (&ev);
-
- g_warning (G_STRLOC ": Unable to contact backend");
-
- E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_CORBA_EXCEPTION, error);
- }
-
- CORBA_exception_free (&ev);
-
- /* wait for something to happen (both cancellation and a
- successful response will notity us via our cv */
- e_mutex_cond_wait (&our_op->cond, our_op->mutex);
-
- status = our_op->status;
-
- e_calendar_remove_op (client, our_op);
- e_mutex_unlock (our_op->mutex);
- e_calendar_free_op (our_op);
-
- E_CALENDAR_CHECK_STATUS (status, error);
-}
-
-/**
- * cal_client_get_error_message
- * @status: A status code.
- *
- * Get an error message for the given status code.
- *
- * Returns: the error message.
- */
-const char *
-cal_client_get_error_message (ECalendarStatus status)
-{
- switch (status) {
- case E_CALENDAR_STATUS_INVALID_ARG :
- return _("Invalid argument");
- case E_CALENDAR_STATUS_BUSY :
- return _("Backend is busy");
- case E_CALENDAR_STATUS_REPOSITORY_OFFLINE :
- return _("Repository is offline");
- case E_CALENDAR_STATUS_NO_SUCH_CALENDAR :
- return _("No such calendar");
- case E_CALENDAR_STATUS_OBJECT_NOT_FOUND :
- return _("Object not found");
- case E_CALENDAR_STATUS_INVALID_OBJECT :
- return _("Invalid object");
- case E_CALENDAR_STATUS_URI_NOT_LOADED :
- return _("URI not loaded");
- case E_CALENDAR_STATUS_URI_ALREADY_LOADED :
- return _("URI already loaded");
- case E_CALENDAR_STATUS_PERMISSION_DENIED :
- return _("Permission denied");
- case E_CALENDAR_STATUS_CARD_NOT_FOUND :
- return _("Object not found");
- case E_CALENDAR_STATUS_CARD_ID_ALREADY_EXISTS :
- return _("Object ID already exists");
- case E_CALENDAR_STATUS_PROTOCOL_NOT_SUPPORTED :
- return _("Protocol not supported");
- case E_CALENDAR_STATUS_CANCELLED :
- return _("Operation has been cancelled");
- case E_CALENDAR_STATUS_COULD_NOT_CANCEL :
- return _("Could not cancel operation");
- case E_CALENDAR_STATUS_AUTHENTICATION_FAILED :
- return _("Authentication failed");
- case E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED :
- return _("Authentication required");
- case E_CALENDAR_STATUS_CORBA_EXCEPTION :
- return _("A CORBA esception has occurred");
- case E_CALENDAR_STATUS_OTHER_ERROR :
- return _("Unknown error");
- case E_CALENDAR_STATUS_OK :
- return _("No error");
- }
-
- return NULL;
-}
diff --git a/calendar/cal-client/cal-client.h b/calendar/cal-client/cal-client.h
deleted file mode 100644
index 9491c73fa3..0000000000
--- a/calendar/cal-client/cal-client.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Evolution calendar client
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef CAL_CLIENT_H
-#define CAL_CLIENT_H
-
-#include <glib-object.h>
-#include <cal-util/cal-recur.h>
-#include <cal-util/cal-util.h>
-#include <cal-client/cal-query.h>
-#include "cal-client-types.h"
-
-G_BEGIN_DECLS
-
-
-
-#define CAL_CLIENT_TYPE (cal_client_get_type ())
-#define CAL_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAL_CLIENT_TYPE, CalClient))
-#define CAL_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CAL_CLIENT_TYPE, CalClientClass))
-#define IS_CAL_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAL_CLIENT_TYPE))
-#define IS_CAL_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CAL_CLIENT_TYPE))
-
-#define CAL_CLIENT_OPEN_STATUS_ENUM_TYPE (cal_client_open_status_enum_get_type ())
-#define CAL_CLIENT_REMOVE_STATUS_ENUM_TYPE (cal_client_remove_status_enum_get_type ())
-#define CAL_CLIENT_SET_MODE_STATUS_ENUM_TYPE (cal_client_set_mode_status_enum_get_type ())
-#define CAL_MODE_ENUM_TYPE (cal_mode_enum_get_type ())
-
-typedef struct _CalClientClass CalClientClass;
-
-typedef struct _CalClientPrivate CalClientPrivate;
-
-/* Open status for the cal_opened signal */
-typedef enum {
- CAL_CLIENT_OPEN_SUCCESS,
- CAL_CLIENT_OPEN_ERROR,
- CAL_CLIENT_OPEN_NOT_FOUND,
- CAL_CLIENT_OPEN_PERMISSION_DENIED,
- CAL_CLIENT_OPEN_METHOD_NOT_SUPPORTED
-} CalClientOpenStatus;
-
-/* Set mode status for the cal_client_set_mode function */
-typedef enum {
- CAL_CLIENT_SET_MODE_SUCCESS,
- CAL_CLIENT_SET_MODE_ERROR,
- CAL_CLIENT_SET_MODE_NOT_SUPPORTED
-} CalClientSetModeStatus;
-
-/* Get status for the cal_client_get_object() function */
-typedef enum {
- CAL_CLIENT_GET_SUCCESS,
- CAL_CLIENT_GET_NOT_FOUND,
- CAL_CLIENT_GET_SYNTAX_ERROR
-} CalClientGetStatus;
-
-/* Status for update_object(s) and remove_object */
-typedef enum {
- CAL_CLIENT_RESULT_SUCCESS,
- CAL_CLIENT_RESULT_CORBA_ERROR,
- CAL_CLIENT_RESULT_INVALID_OBJECT,
- CAL_CLIENT_RESULT_NOT_FOUND,
- CAL_CLIENT_RESULT_PERMISSION_DENIED
-} CalClientResult;
-
-/* Whether the client is not loaded, is being loaded, or is already loaded */
-typedef enum {
- CAL_CLIENT_LOAD_NOT_LOADED,
- CAL_CLIENT_LOAD_LOADING,
- CAL_CLIENT_LOAD_LOADED
-} CalClientLoadState;
-
-struct _CalClient {
- GObject object;
-
- /* Private data */
- CalClientPrivate *priv;
-};
-
-struct _CalClientClass {
- GObjectClass parent_class;
-
- /* Notification signals */
-
- void (* cal_opened) (CalClient *client, CalClientOpenStatus status);
- void (* cal_set_mode) (CalClient *client, CalClientSetModeStatus status, CalMode mode);
-
- void (* backend_error) (CalClient *client, const char *message);
-
- void (* categories_changed) (CalClient *client, GPtrArray *categories);
-
- void (* forget_password) (CalClient *client, const char *key);
-
- void (* backend_died) (CalClient *client);
-};
-
-typedef gchar * (* CalClientAuthFunc) (CalClient *client,
- const gchar *prompt,
- const gchar *key,
- gpointer user_data);
-
-GType cal_client_get_type (void);
-
-GType cal_client_open_status_enum_get_type (void);
-GType cal_client_set_mode_status_enum_get_type (void);
-GType cal_mode_enum_get_type (void);
-
-CalClient *cal_client_new (const char *uri, CalObjType type);
-
-void cal_client_set_auth_func (CalClient *client, CalClientAuthFunc func, gpointer data);
-
-gboolean cal_client_open (CalClient *client, gboolean only_if_exists, GError **error);
-void cal_client_open_async (CalClient *client, gboolean only_if_exists);
-gboolean cal_client_remove_calendar (CalClient *client, GError **error);
-
-GList *cal_client_uri_list (CalClient *client, CalMode mode);
-
-CalClientLoadState cal_client_get_load_state (CalClient *client);
-
-const char *cal_client_get_uri (CalClient *client);
-
-gboolean cal_client_is_read_only (CalClient *client, gboolean *read_only, GError **error);
-gboolean cal_client_get_cal_address (CalClient *client, char **cal_address, GError **error);
-gboolean cal_client_get_alarm_email_address (CalClient *client, char **alarm_address, GError **error);
-gboolean cal_client_get_ldap_attribute (CalClient *client, char **ldap_attribute, GError **error);
-
-gboolean cal_client_get_one_alarm_only (CalClient *client);
-gboolean cal_client_get_organizer_must_attend (CalClient *client);
-gboolean cal_client_get_save_schedules (CalClient *client);
-gboolean cal_client_get_static_capability (CalClient *client, const char *cap);
-
-gboolean cal_client_set_mode (CalClient *client, CalMode mode);
-
-gboolean cal_client_get_default_object (CalClient *client,
- icalcomponent **icalcomp, GError **error);
-
-gboolean cal_client_get_object (CalClient *client,
- const char *uid,
- const char *rid,
- icalcomponent **icalcomp,
- GError **error);
-
-gboolean cal_client_get_changes (CalClient *client, const char *change_id, GList **changes, GError **error);
-
-gboolean cal_client_get_object_list (CalClient *client, const char *query, GList **objects, GError **error);
-gboolean cal_client_get_object_list_as_comp (CalClient *client, const char *query, GList **objects, GError **error);
-void cal_client_free_object_list (GList *objects);
-
-gboolean cal_client_get_free_busy (CalClient *client, GList *users, time_t start, time_t end,
- GList **freebusy, GError **error);
-
-void cal_client_generate_instances (CalClient *client, CalObjType type,
- time_t start, time_t end,
- CalRecurInstanceFn cb, gpointer cb_data);
-
-GSList *cal_client_get_alarms_in_range (CalClient *client, time_t start, time_t end);
-
-void cal_client_free_alarms (GSList *comp_alarms);
-
-gboolean cal_client_get_alarms_for_object (CalClient *client, const char *uid,
- time_t start, time_t end,
- CalComponentAlarms **alarms);
-
-gboolean cal_client_create_object (CalClient *client, icalcomponent *icalcomp, char **uid, GError **error);
-gboolean cal_client_modify_object (CalClient *client, icalcomponent *icalcomp, CalObjModType mod, GError **error);
-gboolean cal_client_remove_object (CalClient *client, const char *uid, GError **error);
-gboolean cal_client_remove_object_with_mod (CalClient *client, const char *uid, const char *rid, CalObjModType mod, GError **error);
-
-gboolean cal_client_discard_alarm (CalClient *client, CalComponent *comp, const char *auid, GError **error);
-
-gboolean cal_client_receive_objects (CalClient *client, icalcomponent *icalcomp, GError **error);
-gboolean cal_client_send_objects (CalClient *client, icalcomponent *icalcomp, GError **error);
-
-gboolean cal_client_get_timezone (CalClient *client, const char *tzid, icaltimezone **zone, GError **error);
-gboolean cal_client_add_timezone (CalClient *client, icaltimezone *izone, GError **error);
-/* Sets the default timezone to use to resolve DATE and floating DATE-TIME
- values. This will typically be from the user's timezone setting. Call this
- before using any other functions. It will pass the default timezone on to
- the server. Returns TRUE on success. */
-gboolean cal_client_set_default_timezone (CalClient *client, icaltimezone *zone, GError **error);
-
-gboolean cal_client_get_query (CalClient *client, const char *sexp, CalQuery **query, GError **error);
-
-/* Resolves TZIDs for the recurrence generator. */
-icaltimezone *cal_client_resolve_tzid_cb (const char *tzid, gpointer data);
-
-/* Returns a complete VCALENDAR for a VEVENT/VTODO including all VTIMEZONEs
- used by the component. It also includes a 'METHOD:PUBLISH' property. */
-char* cal_client_get_component_as_string (CalClient *client, icalcomponent *icalcomp);
-
-const char * cal_client_get_error_message (ECalendarStatus status);
-
-
-
-G_END_DECLS
-
-#endif
diff --git a/calendar/cal-client/cal-listener.c b/calendar/cal-client/cal-listener.c
deleted file mode 100644
index ac04be7c07..0000000000
--- a/calendar/cal-client/cal-listener.c
+++ /dev/null
@@ -1,1025 +0,0 @@
-/* Evolution calendar listener
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <bonobo/bonobo-main.h>
-#include "cal-marshal.h"
-#include "cal-listener.h"
-
-
-
-/* Private part of the CalListener structure */
-struct CalListenerPrivate {
- /* Notification functions and their closure data */
- CalListenerCalSetModeFn cal_set_mode_fn;
- CalListenerErrorOccurredFn error_occurred_fn;
- CalListenerCategoriesChangedFn categories_changed_fn;
- gpointer fn_data;
-
- /* Whether notification is desired */
- gboolean notify : 1;
-};
-
-/* Signal IDs */
-enum {
- READ_ONLY,
- CAL_ADDRESS,
- ALARM_ADDRESS,
- LDAP_ATTRIBUTE,
- STATIC_CAPABILITIES,
- OPEN,
- REMOVE,
- CREATE_OBJECT,
- MODIFY_OBJECT,
- REMOVE_OBJECT,
- DISCARD_ALARM,
- RECEIVE_OBJECTS,
- SEND_OBJECTS,
- DEFAULT_OBJECT,
- OBJECT,
- OBJECT_LIST,
- GET_TIMEZONE,
- ADD_TIMEZONE,
- SET_DEFAULT_TIMEZONE,
- GET_CHANGES,
- GET_FREE_BUSY,
- QUERY,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static BonoboObjectClass *parent_class;
-
-static ECalendarStatus
-convert_status (const GNOME_Evolution_Calendar_CallStatus status)
-{
- switch (status) {
- case GNOME_Evolution_Calendar_Success:
- return E_CALENDAR_STATUS_OK;
- case GNOME_Evolution_Calendar_RepositoryOffline:
- return E_CALENDAR_STATUS_REPOSITORY_OFFLINE;
- case GNOME_Evolution_Calendar_PermissionDenied:
- return E_CALENDAR_STATUS_PERMISSION_DENIED;
- case GNOME_Evolution_Calendar_ObjectNotFound:
- return E_CALENDAR_STATUS_OBJECT_NOT_FOUND;
- case GNOME_Evolution_Calendar_InvalidObject:
- return E_CALENDAR_STATUS_INVALID_OBJECT;
- case GNOME_Evolution_Calendar_CardIdAlreadyExists:
- return E_CALENDAR_STATUS_CARD_ID_ALREADY_EXISTS;
- case GNOME_Evolution_Calendar_AuthenticationFailed:
- return E_CALENDAR_STATUS_AUTHENTICATION_FAILED;
- case GNOME_Evolution_Calendar_AuthenticationRequired:
- return E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED;
- case GNOME_Evolution_Calendar_OtherError:
- default:
- return E_CALENDAR_STATUS_OTHER_ERROR;
- }
-}
-
-static void
-impl_notifyReadOnly (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_boolean read_only,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[READ_ONLY], 0, convert_status (status), read_only);
-}
-
-static void
-impl_notifyCalAddress (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *address,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[CAL_ADDRESS], 0, convert_status (status), address);
-}
-
-static void
-impl_notifyAlarmEmailAddress (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *address,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[ALARM_ADDRESS], 0, convert_status (status), address);
-}
-
-static void
-impl_notifyLDAPAttribute (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *ldap_attribute,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[LDAP_ATTRIBUTE], 0, convert_status (status), ldap_attribute);
-}
-
-static void
-impl_notifyStaticCapabilities (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *capabilities,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[STATIC_CAPABILITIES], 0, convert_status (status));
-}
-
-/* ::notifyCalOpened method */
-static void
-impl_notifyCalOpened (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[OPEN], 0, convert_status (status));
-}
-
-static void
-impl_notifyCalRemoved (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[REMOVE], 0, convert_status (status));
-}
-
-static void
-impl_notifyObjectCreated (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *uid,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[CREATE_OBJECT], 0, convert_status (status), uid);
-}
-
-static void
-impl_notifyObjectModified (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[MODIFY_OBJECT], 0, convert_status (status));
-}
-
-static void
-impl_notifyObjectRemoved (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[REMOVE_OBJECT], 0, convert_status (status));
-}
-
-static void
-impl_notifyAlarmDiscarded (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[DISCARD_ALARM], 0, convert_status (status));
-}
-
-static void
-impl_notifyObjectsReceived (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[RECEIVE_OBJECTS], 0, convert_status (status));
-}
-
-static void
-impl_notifyObjectsSent (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[SEND_OBJECTS], 0, convert_status (status));
-}
-
-static void
-impl_notifyDefaultObjectRequested (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *object,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[DEFAULT_OBJECT], 0, convert_status (status), object);
-}
-
-static void
-impl_notifyObjectRequested (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *object,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[OBJECT], 0, convert_status (status), object);
-}
-
-static GList *
-build_object_list (const GNOME_Evolution_Calendar_stringlist *seq)
-{
- GList *list;
- int i;
-
- list = NULL;
- for (i = 0; i < seq->_length; i++) {
- icalcomponent *comp;
-
- comp = icalcomponent_new_from_string (seq->_buffer[i]);
- if (!comp)
- continue;
-
- list = g_list_prepend (list, comp);
- }
-
- return list;
-}
-
-static void
-impl_notifyObjectListRequested (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const GNOME_Evolution_Calendar_stringlist *objects,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
- GList *object_list, *l;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- object_list = build_object_list (objects);
-
- g_signal_emit (G_OBJECT (listener), signals[OBJECT_LIST], 0, convert_status (status), object_list);
-
- for (l = object_list; l; l = l->next)
- icalcomponent_free (l->data);
- g_list_free (object_list);
-}
-
-static void
-impl_notifyTimezoneRequested (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *object,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[GET_TIMEZONE], 0, convert_status (status), object);
-}
-
-static void
-impl_notifyTimezoneAdded (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const CORBA_char *tzid,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[ADD_TIMEZONE], 0, convert_status (status), tzid);
-}
-
-static void
-impl_notifyDefaultTimezoneSet (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[SET_DEFAULT_TIMEZONE], 0, convert_status (status));
-}
-
-static GList *
-build_change_list (const GNOME_Evolution_Calendar_CalObjChangeSeq *seq)
-{
- GList *list = NULL;
- icalcomponent *icalcomp;
- int i;
-
- /* Create the list in reverse order */
- for (i = 0; i < seq->_length; i++) {
- GNOME_Evolution_Calendar_CalObjChange *corba_coc;
- CalClientChange *ccc;
-
- corba_coc = &seq->_buffer[i];
- ccc = g_new (CalClientChange, 1);
-
- icalcomp = icalparser_parse_string (corba_coc->calobj);
- if (!icalcomp)
- continue;
-
- ccc->comp = cal_component_new ();
- if (!cal_component_set_icalcomponent (ccc->comp, icalcomp)) {
- icalcomponent_free (icalcomp);
- g_object_unref (G_OBJECT (ccc->comp));
- continue;
- }
- ccc->type = corba_coc->type;
-
- list = g_list_prepend (list, ccc);
- }
-
- list = g_list_reverse (list);
-
- return list;
-}
-
-static void
-impl_notifyChanges (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const GNOME_Evolution_Calendar_CalObjChangeSeq *seq,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
- GList *changes, *l;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- changes = build_change_list (seq);
-
- g_signal_emit (G_OBJECT (listener), signals[GET_CHANGES], 0, convert_status (status), changes);
-
- for (l = changes; l; l = l->next)
- g_free (l->data);
- g_list_free (changes);
-}
-
-static GList *
-build_free_busy_list (const GNOME_Evolution_Calendar_CalObjSeq *seq)
-{
- GList *list = NULL;
- int i;
-
- /* Create the list in reverse order */
- for (i = 0; i < seq->_length; i++) {
- CalComponent *comp;
- icalcomponent *icalcomp;
- icalcomponent_kind kind;
-
- icalcomp = icalcomponent_new_from_string (seq->_buffer[i]);
- if (!icalcomp)
- continue;
-
- kind = icalcomponent_isa (icalcomp);
- if (kind == ICAL_VFREEBUSY_COMPONENT) {
- comp = cal_component_new ();
- if (!cal_component_set_icalcomponent (comp, icalcomp)) {
- icalcomponent_free (icalcomp);
- g_object_unref (G_OBJECT (comp));
- continue;
- }
-
- list = g_list_append (list, comp);
- } else {
- icalcomponent_free (icalcomp);
- }
- }
-
- return list;
-}
-
-static void
-impl_notifyFreeBusy (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const GNOME_Evolution_Calendar_CalObjSeq *seq,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
- GList *freebusy, *l;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- freebusy = build_free_busy_list (seq);
-
- g_signal_emit (G_OBJECT (listener), signals[GET_FREE_BUSY], 0, convert_status (status), freebusy);
-
- for (l = freebusy; l; l = l->next)
- g_free (l->data);
- g_list_free (freebusy);
-}
-
-static void
-impl_notifyQuery (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- const GNOME_Evolution_Calendar_Query query,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_signal_emit (G_OBJECT (listener), signals[QUERY], 0, convert_status (status), query);
-}
-
-/* ::notifyCalSetMode method */
-static void
-impl_notifyCalSetMode (PortableServer_Servant servant,
- GNOME_Evolution_Calendar_Listener_SetModeStatus status,
- GNOME_Evolution_Calendar_CalMode mode,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_message ("notify_set_mode");
-
- g_assert (priv->cal_set_mode_fn != NULL);
- (* priv->cal_set_mode_fn) (listener, status, mode, priv->fn_data);
-}
-
-
-/* ::notifyErrorOccurred method */
-static void
-impl_notifyErrorOccurred (PortableServer_Servant servant,
- const CORBA_char *message,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_message ("notify_error");
-
- g_assert (priv->error_occurred_fn != NULL);
- (* priv->error_occurred_fn) (listener, message, priv->fn_data);
-}
-
-/* ::notifyCategoriesChanged method */
-static void
-impl_notifyCategoriesChanged (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_StringSeq *categories,
- CORBA_Environment *ev)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- listener = CAL_LISTENER (bonobo_object_from_servant (servant));
- priv = listener->priv;
-
- if (!priv->notify)
- return;
-
- g_message ("notify_categories");
-
- g_assert (priv->categories_changed_fn != NULL);
- (* priv->categories_changed_fn) (listener, categories, priv->fn_data);
-}
-
-
-
-/* Object initialization function for the calendar listener */
-static void
-cal_listener_init (CalListener *listener, CalListenerClass *klass)
-{
- CalListenerPrivate *priv;
-
- priv = g_new0 (CalListenerPrivate, 1);
- listener->priv = priv;
-
- priv->error_occurred_fn = NULL;
- priv->categories_changed_fn = NULL;
-
- priv->notify = TRUE;
-}
-
-/* Finalize handler for the calendar listener */
-static void
-cal_listener_finalize (GObject *object)
-{
- CalListener *listener;
- CalListenerPrivate *priv;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_CAL_LISTENER (object));
-
- listener = CAL_LISTENER (object);
- priv = listener->priv;
-
- priv->error_occurred_fn = NULL;
- priv->categories_changed_fn = NULL;
- priv->fn_data = NULL;
-
- priv->notify = FALSE;
-
- g_free (priv);
- listener->priv = NULL;
-
- if (G_OBJECT_CLASS (parent_class)->finalize)
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-/* Class initialization function for the calendar listener */
-static void
-cal_listener_class_init (CalListenerClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- klass->epv.notifyReadOnly = impl_notifyReadOnly;
- klass->epv.notifyCalAddress = impl_notifyCalAddress;
- klass->epv.notifyAlarmEmailAddress = impl_notifyAlarmEmailAddress;
- klass->epv.notifyLDAPAttribute = impl_notifyLDAPAttribute;
- klass->epv.notifyStaticCapabilities = impl_notifyStaticCapabilities;
- klass->epv.notifyCalOpened = impl_notifyCalOpened;
- klass->epv.notifyCalRemoved = impl_notifyCalRemoved;
- klass->epv.notifyObjectCreated = impl_notifyObjectCreated;
- klass->epv.notifyObjectModified = impl_notifyObjectModified;
- klass->epv.notifyObjectRemoved = impl_notifyObjectRemoved;
- klass->epv.notifyAlarmDiscarded = impl_notifyAlarmDiscarded;
- klass->epv.notifyObjectsReceived = impl_notifyObjectsReceived;
- klass->epv.notifyObjectsSent = impl_notifyObjectsSent;
- klass->epv.notifyDefaultObjectRequested = impl_notifyDefaultObjectRequested;
- klass->epv.notifyObjectRequested = impl_notifyObjectRequested;
- klass->epv.notifyObjectListRequested = impl_notifyObjectListRequested;
- klass->epv.notifyTimezoneRequested = impl_notifyTimezoneRequested;
- klass->epv.notifyTimezoneAdded = impl_notifyTimezoneAdded;
- klass->epv.notifyDefaultTimezoneSet = impl_notifyDefaultTimezoneSet;
- klass->epv.notifyChanges = impl_notifyChanges;
- klass->epv.notifyFreeBusy = impl_notifyFreeBusy;
- klass->epv.notifyQuery = impl_notifyQuery;
- klass->epv.notifyCalSetMode = impl_notifyCalSetMode;
- klass->epv.notifyErrorOccurred = impl_notifyErrorOccurred;
- klass->epv.notifyCategoriesChanged = impl_notifyCategoriesChanged;
-
- object_class->finalize = cal_listener_finalize;
-
- signals[READ_ONLY] =
- g_signal_new ("read_only",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, read_only),
- NULL, NULL,
- cal_marshal_VOID__INT_BOOLEAN,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_BOOLEAN);
- signals[CAL_ADDRESS] =
- g_signal_new ("cal_address",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, cal_address),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[ALARM_ADDRESS] =
- g_signal_new ("alarm_address",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, alarm_address),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[LDAP_ATTRIBUTE] =
- g_signal_new ("ldap_attribute",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, ldap_attribute),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[STATIC_CAPABILITIES] =
- g_signal_new ("static_capabilities",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, static_capabilities),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[OPEN] =
- g_signal_new ("open",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, open),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[REMOVE] =
- g_signal_new ("remove",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, remove),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[CREATE_OBJECT] =
- g_signal_new ("create_object",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, create_object),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[MODIFY_OBJECT] =
- g_signal_new ("modify_object",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, modify_object),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[REMOVE_OBJECT] =
- g_signal_new ("remove_object",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, remove_object),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[DISCARD_ALARM] =
- g_signal_new ("discard_alarm",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, discard_alarm),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[RECEIVE_OBJECTS] =
- g_signal_new ("receive_objects",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, receive_objects),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[SEND_OBJECTS] =
- g_signal_new ("send_objects",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, send_objects),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[DEFAULT_OBJECT] =
- g_signal_new ("default_object",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, default_object),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[OBJECT] =
- g_signal_new ("object",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, object),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[OBJECT_LIST] =
- g_signal_new ("object_list",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, object_list),
- NULL, NULL,
- cal_marshal_VOID__INT_POINTER,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER);
- signals[GET_TIMEZONE] =
- g_signal_new ("get_timezone",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, get_timezone),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[ADD_TIMEZONE] =
- g_signal_new ("add_timezone",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, add_timezone),
- NULL, NULL,
- cal_marshal_VOID__INT_STRING,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING);
- signals[SET_DEFAULT_TIMEZONE] =
- g_signal_new ("set_default_timezone",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, set_default_timezone),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
- signals[GET_CHANGES] =
- g_signal_new ("get_changes",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, get_changes),
- NULL, NULL,
- cal_marshal_VOID__INT_POINTER,
- G_TYPE_NONE, 1, G_TYPE_INT, G_TYPE_POINTER);
- signals[GET_FREE_BUSY] =
- g_signal_new ("get_free_busy",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, get_free_busy),
- NULL, NULL,
- cal_marshal_VOID__INT_POINTER,
- G_TYPE_NONE, 1, G_TYPE_INT, G_TYPE_POINTER);
- signals[QUERY] =
- g_signal_new ("query",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CalListenerClass, query),
- NULL, NULL,
- cal_marshal_VOID__INT_POINTER,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER);
-}
-
-BONOBO_TYPE_FUNC_FULL (CalListener,
- GNOME_Evolution_Calendar_Listener,
- BONOBO_TYPE_OBJECT,
- cal_listener);
-
-/**
- * cal_listener_construct:
- * @listener: A calendar listener.
- * @cal_opened_fn: Function that will be called to notify that a calendar was
- * opened.
- * @cal_removed_fn: Function that will be called to notify that a calendar was
- * removed
- * @error_occurred_fn: Function that will be called to notify errors.
- * @categories_changed_fn: Function that will be called to notify that the list
- * of categories that are present in the calendar's objects has changed.
- * @fn_data: Closure data pointer that will be passed to the notification
- * functions.
- *
- * Constructs a calendar listener by setting the callbacks that it will use for
- * notification from the calendar server.
- *
- * Return value: the same object as the @listener argument.
- **/
-CalListener *
-cal_listener_construct (CalListener *listener,
- CalListenerCalSetModeFn cal_set_mode_fn,
- CalListenerErrorOccurredFn error_occurred_fn,
- CalListenerCategoriesChangedFn categories_changed_fn,
- gpointer fn_data)
-{
- CalListenerPrivate *priv;
-
- g_return_val_if_fail (listener != NULL, NULL);
- g_return_val_if_fail (IS_CAL_LISTENER (listener), NULL);
- g_return_val_if_fail (cal_set_mode_fn != NULL, NULL);
- g_return_val_if_fail (error_occurred_fn != NULL, NULL);
- g_return_val_if_fail (categories_changed_fn != NULL, NULL);
-
- priv = listener->priv;
-
- priv->cal_set_mode_fn = cal_set_mode_fn;
- priv->error_occurred_fn = error_occurred_fn;
- priv->categories_changed_fn = categories_changed_fn;
- priv->fn_data = fn_data;
-
- return listener;
-}
-
-/**
- * cal_listener_new:
- * @cal_opened_fn: Function that will be called to notify that a calendar was
- * opened.
- * @error_occurred_fn: Function that will be called to notify errors.
- * @categories_changed_fn: Function that will be called to notify that the list
- * of categories that are present in the calendar's objects has changed.
- * @fn_data: Closure data pointer that will be passed to the notification
- * functions.
- *
- * Creates a new #CalListener object.
- *
- * Return value: A newly-created #CalListener object.
- **/
-CalListener *
-cal_listener_new (CalListenerCalSetModeFn cal_set_mode_fn,
- CalListenerErrorOccurredFn error_occurred_fn,
- CalListenerCategoriesChangedFn categories_changed_fn,
- gpointer fn_data)
-{
- CalListener *listener;
-
- g_return_val_if_fail (error_occurred_fn != NULL, NULL);
- g_return_val_if_fail (categories_changed_fn != NULL, NULL);
-
- listener = g_object_new (CAL_LISTENER_TYPE,
- "poa", bonobo_poa_get_threaded (ORBIT_THREAD_HINT_PER_REQUEST, NULL),
- NULL);
-
- return cal_listener_construct (listener,
- cal_set_mode_fn,
- error_occurred_fn,
- categories_changed_fn,
- fn_data);
-}
-
-/**
- * cal_listener_stop_notification:
- * @listener: A calendar listener.
- *
- * Informs a calendar listener that no further notification is desired. The
- * callbacks specified when the listener was created will no longer be invoked
- * after this function is called.
- **/
-void
-cal_listener_stop_notification (CalListener *listener)
-{
- CalListenerPrivate *priv;
-
- g_return_if_fail (listener != NULL);
- g_return_if_fail (IS_CAL_LISTENER (listener));
-
- priv = listener->priv;
- g_return_if_fail (priv->notify != FALSE);
-
- priv->notify = FALSE;
-}
diff --git a/calendar/cal-client/cal-listener.h b/calendar/cal-client/cal-listener.h
deleted file mode 100644
index 1230104999..0000000000
--- a/calendar/cal-client/cal-listener.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Evolution calendar listener
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef CAL_LISTENER_H
-#define CAL_LISTENER_H
-
-#include <bonobo/bonobo-object.h>
-#include "evolution-calendar.h"
-#include "cal-client-types.h"
-
-G_BEGIN_DECLS
-
-
-
-#define CAL_LISTENER_TYPE (cal_listener_get_type ())
-#define CAL_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAL_LISTENER_TYPE, CalListener))
-#define CAL_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CAL_LISTENER_TYPE, \
- CalListenerClass))
-#define IS_CAL_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAL_LISTENER_TYPE))
-#define IS_CAL_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CAL_LISTENER_TYPE))
-
-typedef struct CalListenerPrivate CalListenerPrivate;
-
-typedef struct {
- BonoboObject xobject;
-
- /* Private data */
- CalListenerPrivate *priv;
-} CalListener;
-
-typedef struct {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Calendar_Listener__epv epv;
-
- /* Signals */
- void (*read_only) (CalListener *listener, ECalendarStatus status, gboolean read_only);
- void (*cal_address) (CalListener *listener, ECalendarStatus status, const char *address);
- void (*alarm_address) (CalListener *listener, ECalendarStatus status, const char *address);
- void (*ldap_attribute) (CalListener *listener, ECalendarStatus status, const char *ldap_attribute);
- void (*static_capabilities) (CalListener *listener, ECalendarStatus status, const char *capabilities);
-
- void (*open) (CalListener *listener, ECalendarStatus status);
- void (*remove) (CalListener *listener, ECalendarStatus status);
-
- void (*create_object) (CalListener *listener, ECalendarStatus status, const char *id);
- void (*modify_object) (CalListener *listener, ECalendarStatus status);
- void (*remove_object) (CalListener *listener, ECalendarStatus status);
-
- void (*discard_alarm) (CalListener *listener, ECalendarStatus status);
-
- void (*receive_objects) (CalListener *listener, ECalendarStatus status);
- void (*send_objects) (CalListener *listener, ECalendarStatus status);
-
- void (*default_object) (CalListener *listener, ECalendarStatus status, const char *object);
- void (*object) (CalListener *listener, ECalendarStatus status, const char *object);
- void (*object_list) (CalListener *listener, ECalendarStatus status, GList **objects);
-
- void (*get_timezone) (CalListener *listener, ECalendarStatus status, const char *object);
- void (*add_timezone) (CalListener *listener, ECalendarStatus status, const char *tzid);
- void (*set_default_timezone) (CalListener *listener, ECalendarStatus status, const char *tzid);
-
- void (*get_changes) (CalListener *listener, ECalendarStatus status, GList *changes);
- void (*get_free_busy) (CalListener *listener, ECalendarStatus status, GList *freebusy);
-
- void (*query) (CalListener *listener, ECalendarStatus status, GNOME_Evolution_Calendar_Query query);
-} CalListenerClass;
-
-/* Notification functions */
-typedef void (* CalListenerCalSetModeFn) (CalListener *listener,
- GNOME_Evolution_Calendar_Listener_SetModeStatus status,
- GNOME_Evolution_Calendar_CalMode mode,
- gpointer data);
-
-typedef void (* CalListenerErrorOccurredFn) (CalListener *listener,
- const char *message,
- gpointer data);
-
-typedef void (* CalListenerCategoriesChangedFn) (CalListener *listener,
- const GNOME_Evolution_Calendar_StringSeq *categories,
- gpointer data);
-
-
-GType cal_listener_get_type (void);
-
-CalListener *cal_listener_construct (CalListener *listener,
- CalListenerCalSetModeFn cal_set_mode_fn,
- CalListenerErrorOccurredFn error_occurred_fn,
- CalListenerCategoriesChangedFn categories_changed_fn,
- gpointer fn_data);
-
-CalListener *cal_listener_new (CalListenerCalSetModeFn cal_set_mode_fn,
- CalListenerErrorOccurredFn error_occurred_fn,
- CalListenerCategoriesChangedFn categories_changed_fn,
- gpointer fn_data);
-
-void cal_listener_stop_notification (CalListener *listener);
-
-
-
-G_END_DECLS
-
-#endif
diff --git a/calendar/cal-client/cal-marshal.list b/calendar/cal-client/cal-marshal.list
deleted file mode 100644
index e0ca019669..0000000000
--- a/calendar/cal-client/cal-marshal.list
+++ /dev/null
@@ -1,6 +0,0 @@
-NONE:INT
-NONE:POINTER
-NONE:INT,STRING
-NONE:INT,BOOL
-NONE:INT,POINTER
-NONE:STRING,INT
diff --git a/calendar/cal-client/cal-query.c b/calendar/cal-client/cal-query.c
deleted file mode 100644
index e77f5ad3e9..0000000000
--- a/calendar/cal-client/cal-query.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/* Evolution calendar - Live query client object
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <bonobo/bonobo-exception.h>
-#include "cal-marshal.h"
-#include "cal-client.h"
-#include "cal-query.h"
-#include "query-listener.h"
-
-
-
-/* Private part of the CalQuery structure */
-struct _CalQueryPrivate {
- /* Handle to the query in the server */
- GNOME_Evolution_Calendar_Query query;
-
- /* Our query listener implementation */
- QueryListener *listener;
-
- /* The CalClient associated with this query */
- CalClient *client;
-};
-
-/* Property IDs */
-enum props {
- PROP_0,
- PROP_QUERY,
- PROP_LISTENER,
- PROP_CLIENT
-};
-
-/* Signal IDs */
-enum {
- OBJECTS_ADDED,
- OBJECTS_MODIFIED,
- OBJECTS_REMOVED,
- QUERY_PROGRESS,
- QUERY_DONE,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-static GObjectClass *parent_class;
-
-
-
-static void
-objects_added_cb (QueryListener *listener, GList *objects, gpointer data)
-{
- CalQuery *query;
-
- query = CAL_QUERY (data);
-
- g_signal_emit (G_OBJECT (query), signals[OBJECTS_ADDED], 0, objects);
-}
-
-static void
-objects_modified_cb (QueryListener *listener, GList *objects, gpointer data)
-{
- CalQuery *query;
-
- query = CAL_QUERY (data);
-
- g_signal_emit (G_OBJECT (query), signals[OBJECTS_MODIFIED], 0, objects);
-}
-
-static void
-objects_removed_cb (QueryListener *listener, GList *uids, gpointer data)
-{
- CalQuery *query;
-
- query = CAL_QUERY (data);
-
- g_signal_emit (G_OBJECT (query), signals[OBJECTS_REMOVED], 0, uids);
-}
-
-static void
-query_progress_cb (QueryListener *listener, const char *message, int percent, gpointer data)
-{
- CalQuery *query;
-
- query = CAL_QUERY (data);
-
- g_signal_emit (G_OBJECT (query), signals[QUERY_PROGRESS], 0, message, percent);
-}
-
-static void
-query_done_cb (QueryListener *listener, ECalendarStatus status, gpointer data)
-{
- CalQuery *query;
-
- query = CAL_QUERY (data);
-
- g_signal_emit (G_OBJECT (query), signals[QUERY_DONE], 0, status);
-}
-
-/* Object initialization function for the calendar query */
-static void
-cal_query_init (CalQuery *query, CalQueryClass *klass)
-{
- CalQueryPrivate *priv;
-
- priv = g_new0 (CalQueryPrivate, 1);
- query->priv = priv;
-
- priv->listener = NULL;
- priv->query = CORBA_OBJECT_NIL;
-}
-
-static void
-cal_query_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
-{
- CalQuery *query;
- CalQueryPrivate *priv;
-
- query = CAL_QUERY (object);
- priv = query->priv;
-
- switch (property_id) {
- case PROP_QUERY:
- priv->query = bonobo_object_dup_ref (g_value_get_pointer (value), NULL);
- break;
- case PROP_LISTENER:
- priv->listener = bonobo_object_ref (g_value_get_pointer (value));
-
- g_signal_connect (G_OBJECT (priv->listener), "objects_added",
- G_CALLBACK (objects_added_cb), query);
- g_signal_connect (G_OBJECT (priv->listener), "objects_modified",
- G_CALLBACK (objects_modified_cb), query);
- g_signal_connect (G_OBJECT (priv->listener), "objects_removed",
- G_CALLBACK (objects_removed_cb), query);
- g_signal_connect (G_OBJECT (priv->listener), "query_progress",
- G_CALLBACK (query_progress_cb), query);
- g_signal_connect (G_OBJECT (priv->listener), "query_done",
- G_CALLBACK (query_done_cb), query);
- break;
- case PROP_CLIENT:
- priv->client = CAL_CLIENT (g_value_dup_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-cal_query_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
-{
- CalQuery *query;
- CalQueryPrivate *priv;
-
- query = CAL_QUERY (object);
- priv = query->priv;
-
- switch (property_id) {
- case PROP_QUERY:
- g_value_set_pointer (value, priv->query);
- break;
- case PROP_LISTENER:
- g_value_set_pointer (value, priv->listener);
- break;
- case PROP_CLIENT:
- g_value_set_object (value, priv->client);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-
-/* Finalize handler for the calendar query */
-static void
-cal_query_finalize (GObject *object)
-{
- CalQuery *query;
- CalQueryPrivate *priv;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_CAL_QUERY (object));
-
- query = CAL_QUERY (object);
- priv = query->priv;
-
- /* The server keeps a copy of the query listener, so we must unref it */
- g_signal_handlers_disconnect_matched (priv->listener, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, query);
- bonobo_object_unref (BONOBO_OBJECT (priv->listener));
-
- if (priv->query != CORBA_OBJECT_NIL)
- bonobo_object_release_unref (priv->query, NULL);
-
- g_free (priv);
-
- if (G_OBJECT_CLASS (parent_class)->finalize)
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-/* Class initialization function for the calendar query */
-static void
-cal_query_class_init (CalQueryClass *klass)
-{
- GObjectClass *object_class;
- GParamSpec *param;
-
- object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->set_property = cal_query_set_property;
- object_class->get_property = cal_query_get_property;
- object_class->finalize = cal_query_finalize;
-
- param = g_param_spec_pointer ("query", NULL, NULL,
- G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_QUERY, param);
- param = g_param_spec_pointer ("listener", NULL, NULL,
- G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_LISTENER, param);
- param = g_param_spec_object ("client", NULL, NULL, CAL_CLIENT_TYPE,
- G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_CLIENT, param);
-
- signals[OBJECTS_ADDED] =
- g_signal_new ("objects_added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalQueryClass, objects_added),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
- signals[OBJECTS_MODIFIED] =
- g_signal_new ("objects_modified",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalQueryClass, objects_modified),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
- signals[OBJECTS_REMOVED] =
- g_signal_new ("objects_removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalQueryClass, objects_removed),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
- signals[QUERY_PROGRESS] =
- g_signal_new ("query_progress",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalQueryClass, query_progress),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_INT);
- signals[QUERY_DONE] =
- g_signal_new ("query_done",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (CalQueryClass, query_done),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-}
-
-/**
- * cal_query_get_type:
- *
- * Registers the #CalQuery class if necessary, and returns the type ID assigned
- * to it.
- *
- * Return value: The type ID of the #CalQuery class.
- **/
-GType
-cal_query_get_type (void)
-{
- static GType cal_query_type = 0;
-
- if (!cal_query_type) {
- static GTypeInfo info = {
- sizeof (CalQueryClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) cal_query_class_init,
- NULL, NULL,
- sizeof (CalQuery),
- 0,
- (GInstanceInitFunc) cal_query_init
- };
- cal_query_type = g_type_register_static (G_TYPE_OBJECT, "CalQuery", &info, 0);
- }
-
- return cal_query_type;
-}
-
-/**
- * cal_query_new:
- * @client: Client from which the query is being created.
- * @cal: Handle to an open calendar.
- * @sexp: S-expression that defines the query.
- *
- * Creates a new query object by issuing the query creation request to the
- * calendar server.
- *
- * Return value: A newly-created query object, or NULL if the request failed.
- **/
-CalQuery *
-cal_query_new (GNOME_Evolution_Calendar_Query corba_query, QueryListener *listener, CalClient *client)
-{
- CalQuery *query;
-
- query = g_object_new (CAL_QUERY_TYPE, "query", corba_query, "listener",
- listener, "client", client, NULL);
-
- return query;
-}
-
-/**
- * cal_query_get_client
- * @query: A #CalQuery object.
- *
- * Get the #CalClient associated with this query.
- *
- * Returns: the associated client.
- */
-CalClient *
-cal_query_get_client (CalQuery *query)
-{
- g_return_val_if_fail (IS_CAL_QUERY (query), NULL);
-
- return query->priv->client;
-}
-
-void
-cal_query_start (CalQuery *query)
-{
- CalQueryPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (query != NULL);
- g_return_if_fail (IS_CAL_QUERY (query));
-
- priv = query->priv;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Calendar_Query_start (priv->query, &ev);
- if (BONOBO_EX (&ev))
- g_warning (G_STRLOC ": Unable to start query");
-
- CORBA_exception_free (&ev);
-}
diff --git a/calendar/cal-client/cal-query.h b/calendar/cal-client/cal-query.h
deleted file mode 100644
index 05390dd12a..0000000000
--- a/calendar/cal-client/cal-query.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Evolution calendar - Live query client object
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef CAL_QUERY_H
-#define CAL_QUERY_H
-
-#include <glib-object.h>
-#include "cal-client-types.h"
-#include "query-listener.h"
-#include "evolution-calendar.h"
-
-G_BEGIN_DECLS
-
-typedef struct _CalClient CalClient;
-
-
-
-#define CAL_QUERY_TYPE (cal_query_get_type ())
-#define CAL_QUERY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAL_QUERY_TYPE, CalQuery))
-#define CAL_QUERY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CAL_QUERY_TYPE, CalQueryClass))
-#define IS_CAL_QUERY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAL_QUERY_TYPE))
-#define IS_CAL_QUERY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CAL_QUERY_TYPE))
-
-typedef struct _CalQueryPrivate CalQueryPrivate;
-
-typedef struct {
- GObject object;
-
- /* Private data */
- CalQueryPrivate *priv;
-} CalQuery;
-
-typedef struct {
- GObjectClass parent_class;
-
- /* Notification signals */
- void (* objects_added) (CalQuery *query, GList *objects);
- void (* objects_modified) (CalQuery *query, GList *objects);
- void (* objects_removed) (CalQuery *query, GList *uids);
- void (* query_progress) (CalQuery *query, char *message, int percent);
- void (* query_done) (CalQuery *query, ECalendarStatus status);
-} CalQueryClass;
-
-GType cal_query_get_type (void);
-
-CalQuery *cal_query_new (GNOME_Evolution_Calendar_Query corba_query, QueryListener *listener, CalClient *client);
-CalClient *cal_query_get_client (CalQuery *query);
-void cal_query_start (CalQuery *query);
-
-G_END_DECLS
-
-#endif
diff --git a/calendar/cal-client/client-test.c b/calendar/cal-client/client-test.c
deleted file mode 100644
index 48763be50a..0000000000
--- a/calendar/cal-client/client-test.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/* Evolution calendar client - test program
- *
- * Copyright (C) 2000 Ximian, Inc.
- * Copyright (C) 2000 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <bonobo-activation/bonobo-activation.h>
-#include <bonobo/bonobo-i18n.h>
-#include <bonobo/bonobo-main.h>
-#include "cal-client.h"
-#include "cal-util/cal-component.h"
-
-static CalClient *client1;
-static CalClient *client2;
-
-/* Prints a message with a client identifier */
-static void
-cl_printf (CalClient *client, const char *format, ...)
-{
- va_list args;
-
- va_start (args, format);
- printf ("Client %s: ",
- client == client1 ? "1" :
- client == client2 ? "2" :
- "UNKNOWN");
- vprintf (format, args);
- va_end (args);
-}
-
-static void
-objects_added_cb (GObject *object, GList *objects, gpointer data)
-{
- GList *l;
-
- for (l = objects; l; l = l->next)
- cl_printf (data, "Object added %s\n", icalcomponent_get_uid (l->data));
-}
-
-static void
-objects_modified_cb (GObject *object, GList *objects, gpointer data)
-{
- GList *l;
-
- for (l = objects; l; l = l->next)
- cl_printf (data, "Object modified %s\n", icalcomponent_get_uid (l->data));
-}
-
-static void
-objects_removed_cb (GObject *object, GList *objects, gpointer data)
-{
- GList *l;
-
- for (l = objects; l; l = l->next)
- cl_printf (data, "Object removed %s\n", icalcomponent_get_uid (l->data));
-}
-
-static void
-query_done_cb (GObject *object, ECalendarStatus status, gpointer data)
-{
- cl_printf (data, "Query done\n");
-}
-
-/* Lists the UIDs of objects in a calendar, called as an idle handler */
-static gboolean
-list_uids (gpointer data)
-{
- CalClient *client;
- GList *objects = NULL;
- GList *l;
-
- client = CAL_CLIENT (data);
-
- g_message ("Blah");
-
- if (!cal_client_get_object_list (client, "(contains? \"any\" \"Test4\")", &objects, NULL))
- return FALSE;
-
- cl_printf (client, "UIDS: ");
-
- if (!objects)
- printf ("none\n");
- else {
- for (l = objects; l; l = l->next) {
- const char *uid;
-
- uid = icalcomponent_get_uid (l->data);
- printf ("`%s' ", uid);
- }
-
- printf ("\n");
-
- for (l = objects; l; l = l->next) {
- printf ("------------------------------\n");
- printf ("%s", icalcomponent_as_ical_string (l->data));
- printf ("------------------------------\n");
- }
- }
-
- cal_client_free_object_list (objects);
-
- g_object_unref (client);
-
- return FALSE;
-}
-
-/* Callback used when a calendar is opened */
-static void
-cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer data)
-{
- CalQuery *query;
-
- cl_printf (client, "Load/create %s\n",
- ((status == CAL_CLIENT_OPEN_SUCCESS) ? "success" :
- (status == CAL_CLIENT_OPEN_ERROR) ? "error" :
- (status == CAL_CLIENT_OPEN_NOT_FOUND) ? "not found" :
- (status == CAL_CLIENT_OPEN_METHOD_NOT_SUPPORTED) ? "method not supported" :
- "unknown status value"));
-
- if (status == CAL_CLIENT_OPEN_SUCCESS) {
- if (!cal_client_get_query (client, "(contains? \"any\" \"Test4\")", &query, NULL))
- g_warning (G_STRLOC ": Unable to obtain query");
-
- g_signal_connect (G_OBJECT (query), "objects_added",
- G_CALLBACK (objects_added_cb), client);
- g_signal_connect (G_OBJECT (query), "objects_modified",
- G_CALLBACK (objects_modified_cb), client);
- g_signal_connect (G_OBJECT (query), "objects_removed",
- G_CALLBACK (objects_removed_cb), client);
- g_signal_connect (G_OBJECT (query), "query_done",
- G_CALLBACK (query_done_cb), client);
-
- cal_query_start (query);
-
- g_idle_add (list_uids, client);
- }
- else
- g_object_unref (client);
-}
-
-/* Callback used when a client is destroyed */
-static void
-client_destroy_cb (gpointer data, GObject *object)
-{
- if (CAL_CLIENT (object) == client1)
- client1 = NULL;
- else if (CAL_CLIENT (object) == client2)
- client2 = NULL;
- else
- g_assert_not_reached ();
-
- if (!client1 && !client2)
- bonobo_main_quit ();
-}
-
-/* Creates a calendar client and tries to load the specified URI into it */
-static void
-create_client (CalClient **client, const char *uri, CalObjType type, gboolean only_if_exists)
-{
- *client = cal_client_new (uri, type);
- if (!*client) {
- g_message (G_STRLOC ": could not create the client");
- exit (1);
- }
-
- g_object_weak_ref (G_OBJECT (*client), client_destroy_cb, NULL);
-
- g_signal_connect (*client, "cal_opened",
- G_CALLBACK (cal_opened_cb),
- NULL);
-
- printf ("Calendar loading `%s'...\n", uri);
-
- if (!cal_client_open (*client, only_if_exists, NULL)) {
- g_message (G_STRLOC ": failure when issuing calendar open request `%s'",
- uri);
- exit (1);
- }
-}
-
-int
-main (int argc, char **argv)
-{
- bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR);
- textdomain (GETTEXT_PACKAGE);
-
- g_type_init ();
- bonobo_activation_init (argc, argv);
-
- if (!bonobo_init (&argc, argv)) {
- g_message ("main(): could not initialize Bonobo");
- exit (1);
- }
-
- create_client (&client1, "file:///home/gnome24-evolution-new-calendar/evolution/local/Calendar",
- CALOBJ_TYPE_EVENT, FALSE);
-// create_client (&client2, "file:///tmp/tasks", TRUE);
-
- bonobo_main ();
- return 0;
-}
diff --git a/calendar/cal-client/query-listener.c b/calendar/cal-client/query-listener.c
deleted file mode 100644
index 4c8cbb4fe5..0000000000
--- a/calendar/cal-client/query-listener.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/* Evolution calendar - Live search query listener convenience object
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "cal-marshal.h"
-#include "query-listener.h"
-
-
-
-/* Private part of the QueryListener structure */
-
-struct _QueryListenerPrivate {
- int dummy;
-};
-
-/* Signal IDs */
-enum {
- OBJECTS_ADDED,
- OBJECTS_MODIFIED,
- OBJECTS_REMOVED,
- QUERY_PROGRESS,
- QUERY_DONE,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static BonoboObjectClass *parent_class;
-
-/* CORBA method implementations */
-/* FIXME This is duplicated from cal-listener.c */
-static ECalendarStatus
-convert_status (const GNOME_Evolution_Calendar_CallStatus status)
-{
- switch (status) {
- case GNOME_Evolution_Calendar_Success:
- return E_CALENDAR_STATUS_OK;
- case GNOME_Evolution_Calendar_RepositoryOffline:
- return E_CALENDAR_STATUS_REPOSITORY_OFFLINE;
- case GNOME_Evolution_Calendar_PermissionDenied:
- return E_CALENDAR_STATUS_PERMISSION_DENIED;
- case GNOME_Evolution_Calendar_ObjectNotFound:
- return E_CALENDAR_STATUS_OBJECT_NOT_FOUND;
- case GNOME_Evolution_Calendar_CardIdAlreadyExists:
- return E_CALENDAR_STATUS_CARD_ID_ALREADY_EXISTS;
- case GNOME_Evolution_Calendar_AuthenticationFailed:
- return E_CALENDAR_STATUS_AUTHENTICATION_FAILED;
- case GNOME_Evolution_Calendar_AuthenticationRequired:
- return E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED;
- case GNOME_Evolution_Calendar_OtherError:
- default:
- return E_CALENDAR_STATUS_OTHER_ERROR;
- }
-}
-
-/* FIXME This is duplicated from cal-listener.c */
-static GList *
-build_object_list (const GNOME_Evolution_Calendar_stringlist *seq)
-{
- GList *list;
- int i;
-
- list = NULL;
- for (i = 0; i < seq->_length; i++) {
- icalcomponent *comp;
-
- comp = icalcomponent_new_from_string (seq->_buffer[i]);
- if (!comp)
- continue;
-
- list = g_list_prepend (list, comp);
- }
-
- return list;
-}
-
-static GList *
-build_uid_list (const GNOME_Evolution_Calendar_CalObjUIDSeq *seq)
-{
- GList *list;
- int i;
-
- list = NULL;
- for (i = 0; i < seq->_length; i++)
- list = g_list_prepend (list, g_strdup (seq->_buffer[i]));
-
- return list;
-}
-
-static void
-impl_notifyObjectsAdded (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_stringlist *objects,
- CORBA_Environment *ev)
-{
- QueryListener *ql;
- QueryListenerPrivate *priv;
- GList *object_list, *l;
-
- ql = QUERY_LISTENER (bonobo_object_from_servant (servant));
- priv = ql->priv;
-
- object_list = build_object_list (objects);
-
- g_signal_emit (G_OBJECT (ql), signals[OBJECTS_ADDED], 0, object_list);
-
- for (l = object_list; l; l = l->next)
- icalcomponent_free (l->data);
- g_list_free (object_list);
-}
-
-static void
-impl_notifyObjectsModified (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_stringlist *objects,
- CORBA_Environment *ev)
-{
- QueryListener *ql;
- QueryListenerPrivate *priv;
- GList *object_list, *l;
-
- ql = QUERY_LISTENER (bonobo_object_from_servant (servant));
- priv = ql->priv;
-
- object_list = build_object_list (objects);
-
- g_signal_emit (G_OBJECT (ql), signals[OBJECTS_MODIFIED], 0, object_list);
-
- for (l = object_list; l; l = l->next)
- icalcomponent_free (l->data);
- g_list_free (object_list);
-}
-
-static void
-impl_notifyObjectsRemoved (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CalObjUIDSeq *uids,
- CORBA_Environment *ev)
-{
- QueryListener *ql;
- QueryListenerPrivate *priv;
- GList *uid_list, *l;
-
- ql = QUERY_LISTENER (bonobo_object_from_servant (servant));
- priv = ql->priv;
-
- uid_list = build_uid_list (uids);
-
- g_signal_emit (G_OBJECT (ql), signals[OBJECTS_REMOVED], 0, uid_list);
-
- for (l = uid_list; l; l = l->next)
- g_free (l->data);
- g_list_free (uid_list);
-}
-
-static void
-impl_notifyQueryProgress (PortableServer_Servant servant,
- const CORBA_char *message,
- const CORBA_short percent,
- CORBA_Environment *ev)
-{
- QueryListener *ql;
- QueryListenerPrivate *priv;
-
- ql = QUERY_LISTENER (bonobo_object_from_servant (servant));
- priv = ql->priv;
-
- g_signal_emit (G_OBJECT (ql), signals[QUERY_PROGRESS], 0, message, percent);
-}
-
-static void
-impl_notifyQueryDone (PortableServer_Servant servant,
- const GNOME_Evolution_Calendar_CallStatus status,
- CORBA_Environment *ev)
-{
- QueryListener *ql;
- QueryListenerPrivate *priv;
-
- ql = QUERY_LISTENER (bonobo_object_from_servant (servant));
- priv = ql->priv;
-
- g_signal_emit (G_OBJECT (ql), signals[QUERY_DONE], 0, convert_status (status));
-}
-
-/* Object initialization function for the live search query listener */
-static void
-query_listener_init (QueryListener *ql, QueryListenerClass *class)
-{
- QueryListenerPrivate *priv;
-
- priv = g_new0 (QueryListenerPrivate, 1);
- ql->priv = priv;
-}
-
-/* Finalize handler for the live search query listener */
-static void
-query_listener_finalize (GObject *object)
-{
- QueryListener *ql;
- QueryListenerPrivate *priv;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (IS_QUERY_LISTENER (object));
-
- ql = QUERY_LISTENER (object);
- priv = ql->priv;
-
- g_free (priv);
-
- if (G_OBJECT_CLASS (parent_class)->finalize)
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-/* Class initialization function for the live search query listener */
-static void
-query_listener_class_init (QueryListenerClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = query_listener_finalize;
-
- klass->epv.notifyObjectsAdded = impl_notifyObjectsAdded;
- klass->epv.notifyObjectsModified = impl_notifyObjectsModified;
- klass->epv.notifyObjectsRemoved = impl_notifyObjectsRemoved;
- klass->epv.notifyQueryProgress = impl_notifyQueryProgress;
- klass->epv.notifyQueryDone = impl_notifyQueryDone;
-
- signals[OBJECTS_ADDED] =
- g_signal_new ("objects_added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (QueryListenerClass, objects_added),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
- signals[OBJECTS_MODIFIED] =
- g_signal_new ("objects_modified",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (QueryListenerClass, objects_modified),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
- signals[OBJECTS_REMOVED] =
- g_signal_new ("objects_removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (QueryListenerClass, objects_removed),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
- signals[QUERY_PROGRESS] =
- g_signal_new ("query_progress",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (QueryListenerClass, query_progress),
- NULL, NULL,
- cal_marshal_VOID__POINTER,
- G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_INT);
- signals[QUERY_DONE] =
- g_signal_new ("query_done",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (QueryListenerClass, query_done),
- NULL, NULL,
- cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
-}
-
-BONOBO_TYPE_FUNC_FULL (QueryListener,
- GNOME_Evolution_Calendar_QueryListener,
- BONOBO_TYPE_OBJECT,
- query_listener);
-
-QueryListener *
-query_listener_new (void)
-{
- QueryListener *ql;
-
- ql = g_object_new (QUERY_LISTENER_TYPE, NULL);
-
- return ql;
-}
diff --git a/calendar/cal-client/query-listener.h b/calendar/cal-client/query-listener.h
deleted file mode 100644
index 6a204bbf77..0000000000
--- a/calendar/cal-client/query-listener.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Evolution calendar - Live search query listener implementation
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * Author: Federico Mena-Quintero <federico@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef QUERY_LISTENER_H
-#define QUERY_LISTENER_H
-
-#include <bonobo/bonobo-object.h>
-#include "cal-client-types.h"
-#include "evolution-calendar.h"
-
-G_BEGIN_DECLS
-
-
-
-#define QUERY_LISTENER_TYPE (query_listener_get_type ())
-#define QUERY_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), QUERY_LISTENER_TYPE, QueryListener))
-#define QUERY_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), QUERY_LISTENER_TYPE, \
- QueryListenerClass))
-#define IS_QUERY_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), QUERY_LISTENER_TYPE))
-#define IS_QUERY_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), QUERY_LISTENER_TYPE))
-
-typedef struct _QueryListenerPrivate QueryListenerPrivate;
-
-typedef struct {
- BonoboObject xobject;
-
- /* Private data */
- QueryListenerPrivate *priv;
-} QueryListener;
-
-typedef struct {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Calendar_QueryListener__epv epv;
-
- void (*objects_added) (QueryListener *listener, GList *objects);
- void (*objects_modified) (QueryListener *listener, GList *objects);
- void (*objects_removed) (QueryListener *listener, GList *uids);
- void (*query_progress) (QueryListener *listener, const char *message, int percent);
- void (*query_done) (QueryListener *listener, ECalendarStatus status);
-} QueryListenerClass;
-
-/* Notification functions */
-
-GType query_listener_get_type (void);
-QueryListener *query_listener_new (void);
-
-
-
-G_END_DECLS
-
-#endif
diff --git a/calendar/cal-client/test.ics b/calendar/cal-client/test.ics
deleted file mode 100644
index 128251ee11..0000000000
--- a/calendar/cal-client/test.ics
+++ /dev/null
@@ -1,318 +0,0 @@
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//hacksw/handcal//NONSGML v1.0//EN
-
-BEGIN:VEVENT
-DTSTART:19970714T170000Z
-DTEND:19970715T035959Z
-SUMMARY:Bastille Day Party
-END:VEVENT
-
-BEGIN:VEVENT
-UID:19970901T130000Z-123401@host.com
-DTSTAMP:19970901T1300Z
-DTSTART:19970903T163000Z
-DTEND:19970903T190000Z
-SUMMARY:Annual Employee Review
-CLASS:PRIVATE
-CATEGORIES:BUSINESS,HUMAN RESOURCES
-END:VEVENT
-
-BEGIN:VEVENT
-UID:19970901T130000Z-123402@host.com
-DTSTAMP:19970901T1300Z
-DTSTART:19970401T163000Z
-DTEND:19970402T010000Z
-SUMMARY:Laurel is in sensitivity awareness class.
-CLASS:PUBLIC
-CATEGORIES:BUSINESS,HUMAN RESOURCES
-TRANSP:TRANSPARENT
-END:VEVENT
-
-BEGIN:VEVENT
-UID:19970901T130000Z-123403@host.com
-DTSTAMP:19970901T1300Z
-DTSTART:19971102
-SUMMARY:Our Blissful Anniversary
-CLASS:CONFIDENTIAL
-CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION
-RRULE:FREQ=YEARLY
-END:VEVENT
-
-BEGIN:VTODO
-UID:19970901T130000Z-123404@host.com
-DTSTAMP:19970901T1300Z
-DTSTART:19970415T133000Z
-DUE:19970416T045959Z
-SUMMARY:1996 Income Tax Preparation
-CLASS:CONFIDENTIAL
-CATEGORIES:FAMILY,FINANCE
-PRIORITY:1
-STATUS:NEEDS-ACTION
-END:VTODO
-
-BEGIN:VJOURNAL
-UID:19970901T130000Z-123405@host.com
-DTSTAMP:19970901T1300Z
-DTSTART;VALUE=DATE:19970317
-SUMMARY:Staff meeting minutes
-DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa
- and Bob. Aurora project plans were reviewed. There is currently
- no budget reserves for this project. Lisa will escalate to
- management. Next meeting on Tuesday.\n
- 2. Telephone Conference: ABC Corp. sales representative called
- to discuss new printer. Promised to get us a demo by Friday.\n
- 3. Henry Miller (Handsoff Insurance): Car was totaled by tree.
- Is looking into a loaner car. 654-2323 (tel).
-END:VJOURNAL
-
-BEGIN:VFREEBUSY
-ORGANIZER:MAILTO:jane_doe@host1.com
-ATTENDEE:MAILTO:john_public@host2.com
-DTSTART:19971015T050000Z
-DTEND:19971016T050000Z
-DTSTAMP:19970901T083000Z
-END:VFREEBUSY
-
-BEGIN:VFREEBUSY
-ORGANIZER:MAILTO:jane_doe@host1.com
-ATTENDEE:MAILTO:john_public@host2.com
-DTSTAMP:19970901T100000Z
-FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M,
- 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M
-URL:http://host2.com/pub/busy/jpublic-01.ifb
-COMMENT:This iCalendar file contains busy time information for
- the next three months.
-END:VFREEBUSY
-
-BEGIN:VFREEBUSY
-ORGANIZER:jsmith@host.com
-DTSTART:19980313T141711Z
-DTEND:19980410T141711Z
-FREEBUSY:19980314T233000Z/19980315T003000Z
-FREEBUSY:19980316T153000Z/19980316T163000Z
-FREEBUSY:19980318T030000Z/19980318T040000Z
-URL:http://www.host.com/calendar/busytime/jsmith.ifb
-END:VFREEBUSY
-
-BEGIN:VTIMEZONE
-TZID:US-Eastern
-LAST-MODIFIED:19870101T000000Z
-BEGIN:STANDARD
-DTSTART:19971026T020000
-RDATE:19971026T020000
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19971026T020000
-RDATE:19970406T020000
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-END:DAYLIGHT
-END:VTIMEZONE
-
-BEGIN:VTIMEZONE
-TZID:US-Eastern
-LAST-MODIFIED:19870101T000000Z
-TZURL:http://zones.stds_r_us.net/tz/US-Eastern
-BEGIN:STANDARD
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-END:DAYLIGHT
-END:VTIMEZONE
-
-BEGIN:VTIMEZONE
-TZID:US--Fictitious-Eastern
-LAST-MODIFIED:19870101T000000Z
-BEGIN:STANDARD
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-END:DAYLIGHT
-END:VTIMEZONE
-
-BEGIN:VTIMEZONE
-TZID:US--Fictitious-Eastern
-LAST-MODIFIED:19870101T000000Z
-BEGIN:STANDARD
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-DTSTART:19990424T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-END:DAYLIGHT
-END:VTIMEZONE
-
-BEGIN:VALARM
-TRIGGER;VALUE=DATE-TIME:19970317T133000Z
-REPEAT:4
-DURATION:PT15M
-ACTION:AUDIO
-ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud
-END:VALARM
-BEGIN:VALARM
-TRIGGER:-PT30M
-REPEAT:2
-DURATION:PT15M
-ACTION:DISPLAY
-DESCRIPTION:Breakfast meeting with executive\n
- team at 8:30 AM EST.
-END:VALARM
-
-BEGIN:VALARM
-TRIGGER:-P2D
-ACTION:EMAIL
-ATTENDEE:MAILTO:john_doe@host.com
-SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING ***
-DESCRIPTION:A draft agenda needs to be sent out to the attendees
- to the weekly managers meeting (MGR-LIST). Attached is a
- pointer the document template for the agenda file.
-ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen
- da.doc
-END:VALARM
-
-BEGIN:VALARM
-TRIGGER;VALUE=DATE-TIME:19980101T050000Z
-REPEAT:23
-DURATION:PT1H
-ACTION:PROCEDURE
-ATTACH;FMTTYPE=application/binary:ftp://host.com/novo-
- procs/felizano.exe
-END:VALARM
-
-BEGIN:VTIMEZONE
-TZID:US-Eastern
-BEGIN:STANDARD
-DTSTART:19981025T020000
-RDATE:19981025T020000
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19990404T020000
-RDATE:19990404T020000
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-END:DAYLIGHT
-END:VTIMEZONE
-
-BEGIN:VEVENT
-DTSTAMP:19980309T231000Z
-UID:guid-1.host1.com
-ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com
-ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:
- MAILTO:employee-A@host.com
-DESCRIPTION:Project XYZ Review Meeting
-CATEGORIES:MEETING
-CLASS:PUBLIC
-CREATED:19980309T130000Z
-SUMMARY:XYZ Project Review
-DTSTART;TZID=US-Eastern:19980312T083000
-DTEND;TZID=US-Eastern:19980312T093000
-LOCATION:1CP Conference Room 4350
-END:VEVENT
-
-BEGIN:VEVENT
-DTSTAMP:19970324T1200Z
-SEQUENCE:0
-UID:uid3@host1.com
-ORGANIZER:MAILTO:jdoe@host1.com
-DTSTART:19970324T123000Z
-DTEND:19970324T210000Z
-CATEGORIES:MEETING,PROJECT
-CLASS:PUBLIC
-SUMMARY:Calendaring Interoperability Planning Meeting
-DESCRIPTION:Discuss how we can test c&s interoperability\n
- using iCalendar and other IETF standards.
-LOCATION:LDB Lobby
-ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/
- conf/bkgrnd.ps
-END:VEVENT
-
-BEGIN:VTODO
-DTSTAMP:19980130T134500Z
-SEQUENCE:2
-UID:uid4@host1.com
-ORGANIZER:MAILTO:unclesam@us.gov
-ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com
-DUE:19980415T235959
-STATUS:NEEDS-ACTION
-SUMMARY:Submit Income Taxes
-BEGIN:VALARM
-ACTION:AUDIO
-TRIGGER:19980403T120000
-ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-
- files/ssbanner.aud
-REPEAT:4
-DURATION:PT1H
-END:VALARM
-END:VTODO
-
-BEGIN:VJOURNAL
-DTSTAMP:19970324T120000Z
-UID:uid5@host1.com
-ORGANIZER:MAILTO:jsmith@host.com
-STATUS:DRAFT
-CLASS:PUBLIC
-CATEGORIES:Project Report, XYZ, Weekly Meeting
-DESCRIPTION:Project xyz Review Meeting Minutes\n
- Agenda\n1. Review of project version 1.0 requirements.\n2.
- Definition
- of project processes.\n3. Review of project schedule.\n
- Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was
- decided that the requirements need to be signed off by
- product marketing.\n-Project processes were accepted.\n
- -Project schedule needs to account for scheduled holidays
- and employee vacation time. Check with HR for specific
- dates.\n-New schedule will be distributed by Friday.\n-
- Next weeks meeting is cancelled. No meeting until 3/23.
-END:VJOURNAL
-
-BEGIN:VFREEBUSY
-ORGANIZER:MAILTO:jsmith@host.com
-DTSTART:19980313T141711Z
-DTEND:19980410T141711Z
-FREEBUSY:19980314T233000Z/19980315T003000Z
-FREEBUSY:19980316T153000Z/19980316T163000Z
-FREEBUSY:19980318T030000Z/19980318T040000Z
-URL:http://www.host.com/calendar/busytime/jsmith.ifb
-END:VFREEBUSY
-END:VCALENDAR