Adapt libedata-cal to the new ESource API.
[platform/upstream/evolution-data-server.git] / calendar / libedata-cal / e-cal-backend.h
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /* Evolution calendar - generic backend class
3  *
4  * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
5  *
6  * Authors: Federico Mena-Quintero <federico@ximian.com>
7  *          Rodrigo Moya <rodrigo@ximian.com>
8  *
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.
12  *
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.
17  *
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.
21  */
22
23 #ifndef E_CAL_BACKEND_H
24 #define E_CAL_BACKEND_H
25
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"
34
35 G_BEGIN_DECLS
36
37 \f
38
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)))
45
46 /**
47  * CLIENT_BACKEND_PROPERTY_OPENED:
48  *
49  * FIXME: Document me.
50  *
51  * Since: 3.2
52  **/
53 #define CLIENT_BACKEND_PROPERTY_OPENED                  "opened"
54
55 /**
56  * CLIENT_BACKEND_PROPERTY_OPENING:
57  *
58  * FIXME: Document me.
59  *
60  * Since: 3.2
61  **/
62 #define CLIENT_BACKEND_PROPERTY_OPENING                 "opening"
63
64 /**
65  * CLIENT_BACKEND_PROPERTY_ONLINE:
66  *
67  * FIXME: Document me.
68  *
69  * Since: 3.2
70  **/
71 #define CLIENT_BACKEND_PROPERTY_ONLINE                  "online"
72
73 /**
74  * CLIENT_BACKEND_PROPERTY_READONLY:
75  *
76  * FIXME: Document me.
77  *
78  * Since: 3.2
79  **/
80 #define CLIENT_BACKEND_PROPERTY_READONLY                "readonly"
81
82 /**
83  * CLIENT_BACKEND_PROPERTY_CACHE_DIR:
84  *
85  * FIXME: Document me.
86  *
87  * Since: 3.2
88  **/
89 #define CLIENT_BACKEND_PROPERTY_CACHE_DIR               "cache-dir"
90
91 /**
92  * CLIENT_BACKEND_PROPERTY_CAPABILITIES:
93  *
94  * FIXME: Document me.
95  *
96  * Since: 3.2
97  **/
98 #define CLIENT_BACKEND_PROPERTY_CAPABILITIES            "capabilities"
99
100 /**
101  * CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS:
102  *
103  * FIXME: Document me.
104  *
105  * Since: 3.2
106  **/
107 #define CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS          "cal-email-address"
108
109 /**
110  * CAL_BACKEND_PROPERTY_ALARM_EMAIL_ADDRESS:
111  *
112  * FIXME: Document me.
113  *
114  * Since: 3.2
115  **/
116 #define CAL_BACKEND_PROPERTY_ALARM_EMAIL_ADDRESS        "alarm-email-address"
117
118 /**
119  * CAL_BACKEND_PROPERTY_DEFAULT_OBJECT:
120  *
121  * FIXME: Document me.
122  *
123  * Since: 3.2
124  **/
125 #define CAL_BACKEND_PROPERTY_DEFAULT_OBJECT             "default-object"
126
127 /**
128  * CAL_BACKEND_PROPERTY_REVISION:
129  *
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.
133  *
134  * Since: 3.4
135  **/
136 #define CAL_BACKEND_PROPERTY_REVISION                   "revision"
137
138 struct _ECalBackendCache;
139
140 typedef struct _ECalBackendPrivate ECalBackendPrivate;
141
142 struct _ECalBackend {
143         EBackend parent;
144         ECalBackendPrivate *priv;
145 };
146
147 struct _ECalBackendClass {
148         EBackendClass parent_class;
149
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);
153
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);
156
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);
170
171         void    (* start_view)                  (ECalBackend *backend, EDataCalView *view);
172         void    (* stop_view)                   (ECalBackend *backend, EDataCalView *view);
173
174         /* Internal methods for use only in the pcs */
175         icaltimezone *(* internal_get_timezone) (ECalBackend *backend, const gchar *tzid);
176 };
177
178 GType           e_cal_backend_get_type                  (void);
179
180 icalcomponent_kind
181                 e_cal_backend_get_kind                  (ECalBackend *backend);
182 ESourceRegistry *
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);
188
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);
192
193 void            e_cal_backend_add_client                (ECalBackend *backend, EDataCal *cal);
194 void            e_cal_backend_remove_client             (ECalBackend *backend, EDataCal *cal);
195
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);
199
200 void            e_cal_backend_set_notification_proxy    (ECalBackend *backend, ECalBackend *proxy);
201
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);
204
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);
223
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);
233
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);
241 #endif
242
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);
248
249 void            e_cal_backend_empty_cache               (ECalBackend *backend, struct _ECalBackendCache *cache);
250
251 /* protected functions for subclasses */
252 void            e_cal_backend_set_is_removed            (ECalBackend *backend, gboolean is_removed);
253
254 void            e_cal_backend_respond_opened            (ECalBackend *backend, EDataCal *cal, guint32 opid, GError *error);
255
256 G_END_DECLS
257
258 #endif