1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /* Evolution calendar - generic backend class
4 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
6 * Authors: Federico Mena-Quintero <federico@ximian.com>
7 * Rodrigo Moya <rodrigo@ximian.com>
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of version 2 of the GNU Lesser General Public
11 * License as published by the Free Software Foundation.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 #ifndef E_CAL_BACKEND_H
24 #define E_CAL_BACKEND_H
26 #include <libebackend/e-backend.h>
27 #include <libedataserver/e-source-registry.h>
28 #include <libecal/e-cal-util.h>
29 #include <libecal/e-cal-component.h>
30 #include "e-data-cal-common.h"
31 #include <libedata-cal/e-data-cal-common.h>
32 #include <libedata-cal/e-data-cal.h>
33 #include "e-data-cal-types.h"
39 #define E_TYPE_CAL_BACKEND (e_cal_backend_get_type ())
40 #define E_CAL_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_CAL_BACKEND, ECalBackend))
41 #define E_CAL_BACKEND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_CAL_BACKEND, ECalBackendClass))
42 #define E_IS_CAL_BACKEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_CAL_BACKEND))
43 #define E_IS_CAL_BACKEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_CAL_BACKEND))
44 #define E_CAL_BACKEND_GET_CLASS(obj) (E_CAL_BACKEND_CLASS (G_OBJECT_GET_CLASS (obj)))
47 * CLIENT_BACKEND_PROPERTY_OPENED:
53 #define CLIENT_BACKEND_PROPERTY_OPENED "opened"
56 * CLIENT_BACKEND_PROPERTY_OPENING:
62 #define CLIENT_BACKEND_PROPERTY_OPENING "opening"
65 * CLIENT_BACKEND_PROPERTY_ONLINE:
71 #define CLIENT_BACKEND_PROPERTY_ONLINE "online"
74 * CLIENT_BACKEND_PROPERTY_READONLY:
80 #define CLIENT_BACKEND_PROPERTY_READONLY "readonly"
83 * CLIENT_BACKEND_PROPERTY_CACHE_DIR:
89 #define CLIENT_BACKEND_PROPERTY_CACHE_DIR "cache-dir"
92 * CLIENT_BACKEND_PROPERTY_CAPABILITIES:
98 #define CLIENT_BACKEND_PROPERTY_CAPABILITIES "capabilities"
101 * CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS:
103 * FIXME: Document me.
107 #define CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS "cal-email-address"
110 * CAL_BACKEND_PROPERTY_ALARM_EMAIL_ADDRESS:
112 * FIXME: Document me.
116 #define CAL_BACKEND_PROPERTY_ALARM_EMAIL_ADDRESS "alarm-email-address"
119 * CAL_BACKEND_PROPERTY_DEFAULT_OBJECT:
121 * FIXME: Document me.
125 #define CAL_BACKEND_PROPERTY_DEFAULT_OBJECT "default-object"
128 * CAL_BACKEND_PROPERTY_REVISION:
130 * The current overall revision string, this can be used as
131 * a quick check to see if data has changed at all since the
132 * last time the calendar revision was observed.
136 #define CAL_BACKEND_PROPERTY_REVISION "revision"
138 struct _ECalBackendCache;
140 typedef struct _ECalBackendPrivate ECalBackendPrivate;
142 struct _ECalBackend {
144 ECalBackendPrivate *priv;
147 struct _ECalBackendClass {
148 EBackendClass parent_class;
150 /* Virtual methods */
151 void (* get_backend_property) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *prop_name);
152 void (* set_backend_property) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *prop_name, const gchar *prop_value);
154 void (* open) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, gboolean only_if_exists);
155 void (* remove) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable);
157 void (* refresh) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable);
158 void (* get_object) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *uid, const gchar *rid);
159 void (* get_object_list) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *sexp);
160 void (* get_free_busy) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *users, time_t start, time_t end);
161 void (* create_objects) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *calobjs);
162 void (* modify_objects) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *calobjs, CalObjModType mod);
163 void (* remove_objects) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *ids, CalObjModType mod);
164 void (* receive_objects) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *calobj);
165 void (* send_objects) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *calobj);
166 void (* get_attachment_uris) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *uid, const gchar *rid);
167 void (* discard_alarm) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *uid, const gchar *rid, const gchar *auid);
168 void (* get_timezone) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *tzid);
169 void (* add_timezone) (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *tzobject);
171 void (* start_view) (ECalBackend *backend, EDataCalView *view);
172 void (* stop_view) (ECalBackend *backend, EDataCalView *view);
174 /* Internal methods for use only in the pcs */
175 icaltimezone *(* internal_get_timezone) (ECalBackend *backend, const gchar *tzid);
178 GType e_cal_backend_get_type (void);
181 e_cal_backend_get_kind (ECalBackend *backend);
183 e_cal_backend_get_registry (ECalBackend *backend);
184 gboolean e_cal_backend_is_opened (ECalBackend *backend);
185 gboolean e_cal_backend_is_opening (ECalBackend *backend);
186 gboolean e_cal_backend_is_readonly (ECalBackend *backend);
187 gboolean e_cal_backend_is_removed (ECalBackend *backend);
189 const gchar * e_cal_backend_get_cache_dir (ECalBackend *backend);
190 void e_cal_backend_set_cache_dir (ECalBackend *backend, const gchar *cache_dir);
191 gchar * e_cal_backend_create_cache_filename (ECalBackend *backend, const gchar *uid, const gchar *filename, gint fileindex);
193 void e_cal_backend_add_client (ECalBackend *backend, EDataCal *cal);
194 void e_cal_backend_remove_client (ECalBackend *backend, EDataCal *cal);
196 void e_cal_backend_add_view (ECalBackend *backend, EDataCalView *view);
197 void e_cal_backend_remove_view (ECalBackend *backend, EDataCalView *view);
198 void e_cal_backend_foreach_view (ECalBackend *backend, gboolean (* callback) (EDataCalView *view, gpointer user_data), gpointer user_data);
200 void e_cal_backend_set_notification_proxy (ECalBackend *backend, ECalBackend *proxy);
202 void e_cal_backend_get_backend_property (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *prop_name);
203 void e_cal_backend_set_backend_property (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *prop_name, const gchar *prop_value);
205 void e_cal_backend_open (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, gboolean only_if_exists);
206 void e_cal_backend_remove (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable);
207 void e_cal_backend_refresh (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable);
208 void e_cal_backend_get_object (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *uid, const gchar *rid);
209 void e_cal_backend_get_object_list (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *sexp);
210 void e_cal_backend_get_free_busy (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *users, time_t start, time_t end);
211 void e_cal_backend_create_objects (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *calobjs);
212 void e_cal_backend_modify_objects (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *calobjs, CalObjModType mod);
213 void e_cal_backend_remove_objects (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const GSList *ids, CalObjModType mod);
214 void e_cal_backend_receive_objects (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *calobj);
215 void e_cal_backend_send_objects (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *calobj);
216 void e_cal_backend_get_attachment_uris (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *uid, const gchar *rid);
217 void e_cal_backend_discard_alarm (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *uid, const gchar *rid, const gchar *auid);
218 void e_cal_backend_get_timezone (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *tzid);
219 void e_cal_backend_add_timezone (ECalBackend *backend, EDataCal *cal, guint32 opid, GCancellable *cancellable, const gchar *tzobject);
220 icaltimezone * e_cal_backend_internal_get_timezone (ECalBackend *backend, const gchar *tzid);
221 void e_cal_backend_start_view (ECalBackend *backend, EDataCalView *view);
222 void e_cal_backend_stop_view (ECalBackend *backend, EDataCalView *view);
224 void e_cal_backend_notify_component_created (ECalBackend *backend,
225 /* const */ ECalComponent *component);
226 void e_cal_backend_notify_component_modified (ECalBackend *backend,
227 /* const */ ECalComponent *old_component,
228 /* const */ ECalComponent *new_component);
229 void e_cal_backend_notify_component_removed (ECalBackend *backend,
230 const ECalComponentId *id,
231 /* const */ ECalComponent *old_component,
232 /* const */ ECalComponent *new_component);
234 #ifndef E_CAL_DISABLE_DEPRECATED
235 void e_cal_backend_notify_object_created (ECalBackend *backend, const gchar *calobj);
236 void e_cal_backend_notify_objects_added (ECalBackend *backend, EDataCalView *view, const GSList *objects);
237 void e_cal_backend_notify_object_modified (ECalBackend *backend, const gchar *old_object, const gchar *object);
238 void e_cal_backend_notify_objects_modified (ECalBackend *backend, EDataCalView *view, const GSList *objects);
239 void e_cal_backend_notify_object_removed (ECalBackend *backend, const ECalComponentId *id, const gchar *old_object, const gchar *new_object);
240 void e_cal_backend_notify_objects_removed (ECalBackend *backend, EDataCalView *view, const GSList *ids);
243 void e_cal_backend_notify_error (ECalBackend *backend, const gchar *message);
244 void e_cal_backend_notify_readonly (ECalBackend *backend, gboolean is_readonly);
245 void e_cal_backend_notify_online (ECalBackend *backend, gboolean is_online);
246 void e_cal_backend_notify_opened (ECalBackend *backend, GError *error);
247 void e_cal_backend_notify_property_changed (ECalBackend *backend, const gchar *prop_name, const gchar *prop_value);
249 void e_cal_backend_empty_cache (ECalBackend *backend, struct _ECalBackendCache *cache);
251 /* protected functions for subclasses */
252 void e_cal_backend_set_is_removed (ECalBackend *backend, gboolean is_removed);
254 void e_cal_backend_respond_opened (ECalBackend *backend, EDataCal *cal, guint32 opid, GError *error);