1 /*
2  * e-cal-client.h
3  *
4  * Copyright (C) 2011 Red Hat, Inc. (www.redhat.com)
5  *
6  * This library is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation.
9  *
10  * This library is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13  * for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this library. If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #if !defined (__LIBECAL_H_INSIDE__) && !defined (LIBECAL_COMPILATION)
21 #error "Only <libecal/libecal.h> should be included directly."
22 #endif
23 
24 #ifndef E_CAL_CLIENT_H
25 #define E_CAL_CLIENT_H
26 
27 #include <libedataserver/libedataserver.h>
28 
29 #include <libecal/e-cal-client-view.h>
30 #include <libecal/e-cal-enums.h>
31 #include <libecal/e-cal-recur.h>
32 #include <libecal/e-cal-util.h>
33 
34 /* Standard GObject macros */
35 #define E_TYPE_CAL_CLIENT \
36 	(e_cal_client_get_type ())
37 #define E_CAL_CLIENT(obj) \
38 	(G_TYPE_CHECK_INSTANCE_CAST \
39 	((obj), E_TYPE_CAL_CLIENT, ECalClient))
40 #define E_CAL_CLIENT_CLASS(cls) \
41 	(G_TYPE_CHECK_CLASS_CAST \
42 	((cls), E_TYPE_CAL_CLIENT, ECalClientClass))
43 #define E_IS_CAL_CLIENT(obj) \
44 	(G_TYPE_CHECK_INSTANCE_TYPE \
45 	((obj), E_TYPE_CAL_CLIENT))
46 #define E_IS_CAL_CLIENT_CLASS(cls) \
47 	(G_TYPE_CHECK_CLASS_TYPE \
48 	((cls), E_TYPE_CAL_CLIENT))
49 #define E_CAL_CLIENT_GET_CLASS(obj) \
50 	(G_TYPE_INSTANCE_GET_CLASS \
51 	((obj), E_TYPE_CAL_CLIENT, ECalClientClass))
52 
53 /**
54  * E_CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS:
55  *
56  * An email address associated with the calendar.
57  *
58  * Since: 3.2
59  **/
60 #define E_CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS	"cal-email-address"
61 
62 /**
63  * E_CAL_BACKEND_PROPERTY_ALARM_EMAIL_ADDRESS:
64  *
65  * An email address preferred for e-mail reminders by the calendar.
66  *
67  * Since: 3.2
68  **/
69 #define E_CAL_BACKEND_PROPERTY_ALARM_EMAIL_ADDRESS	"alarm-email-address"
70 
71 /**
72  * E_CAL_BACKEND_PROPERTY_DEFAULT_OBJECT:
73  *
74  * A default object for the calendar. Calendars use VEVENT, memo lists VJOURNAL
75  * and task lists VTODO, which can have prefilled values by the backend.
76  *
77  * Since: 3.2
78  **/
79 #define E_CAL_BACKEND_PROPERTY_DEFAULT_OBJECT		"default-object"
80 
81 /**
82  * E_CAL_BACKEND_PROPERTY_REVISION:
83  *
84  * The current overall revision string, this can be used as
85  * a quick check to see if data has changed at all since the
86  * last time the calendar revision was observed.
87  *
88  * Since: 3.4
89  **/
90 #define E_CAL_BACKEND_PROPERTY_REVISION			"revision"
91 
92 /**
93  * E_CAL_CLIENT_ERROR:
94  *
95  * An error domain associated with #ECalClient. The error codes
96  * are from #ECalClientError.
97  *
98  * Since: 3.2
99  **/
100 #define E_CAL_CLIENT_ERROR e_cal_client_error_quark ()
101 
102 G_BEGIN_DECLS
103 
104 /**
105  * ECalClientError:
106  * @E_CAL_CLIENT_ERROR_NO_SUCH_CALENDAR: No such calendar
107  * @E_CAL_CLIENT_ERROR_OBJECT_NOT_FOUND: Object not found
108  * @E_CAL_CLIENT_ERROR_INVALID_OBJECT: Invalid object
109  * @E_CAL_CLIENT_ERROR_UNKNOWN_USER: Unknown user
110  * @E_CAL_CLIENT_ERROR_OBJECT_ID_ALREADY_EXISTS: Object ID already exists
111  * @E_CAL_CLIENT_ERROR_INVALID_RANGE: Invalid range
112  *
113  * Since: 3.2
114  **/
115 typedef enum {
116 	E_CAL_CLIENT_ERROR_NO_SUCH_CALENDAR,
117 	E_CAL_CLIENT_ERROR_OBJECT_NOT_FOUND,
118 	E_CAL_CLIENT_ERROR_INVALID_OBJECT,
119 	E_CAL_CLIENT_ERROR_UNKNOWN_USER,
120 	E_CAL_CLIENT_ERROR_OBJECT_ID_ALREADY_EXISTS,
121 	E_CAL_CLIENT_ERROR_INVALID_RANGE
122 } ECalClientError;
123 
124 GQuark		e_cal_client_error_quark	(void) G_GNUC_CONST;
125 const gchar *	e_cal_client_error_to_string	(ECalClientError code);
126 GError *	e_cal_client_error_create	(ECalClientError code,
127 						 const gchar *custom_msg);
128 GError *	e_cal_client_error_create_fmt	(ECalClientError code,
129 						 const gchar *format,
130 						 ...) G_GNUC_PRINTF (2, 3);
131 
132 typedef struct _ECalClient ECalClient;
133 typedef struct _ECalClientClass ECalClientClass;
134 typedef struct _ECalClientPrivate ECalClientPrivate;
135 
136 /**
137  * ECalClient:
138  *
139  * Contains only private data that should be read and manipulated using the
140  * functions below.
141  *
142  * Since: 3.2
143  **/
144 struct _ECalClient {
145 	/*< private >*/
146 	EClient parent;
147 
148 	ECalClientPrivate *priv;
149 };
150 
151 /**
152  * ECalClientClass:
153  * @free_busy_data: signal used to notify about free/busy data
154  *
155  * Base class structure for the #ECalClient class
156  **/
157 struct _ECalClientClass {
158 	/*< private >*/
159 	EClientClass parent;
160 
161 	/*< public >*/
162 	/* Signals */
163 	void		(*free_busy_data)	(ECalClient *client,
164 						 const GSList *free_busy_ecalcomps); /* ECalComponent * */
165 };
166 
167 GType		e_cal_client_get_type		(void) G_GNUC_CONST;
168 EClient *	e_cal_client_connect_sync	(ESource *source,
169 						 ECalClientSourceType source_type,
170 						 guint32 wait_for_connected_seconds,
171 						 GCancellable *cancellable,
172 						 GError **error);
173 void		e_cal_client_connect		(ESource *source,
174 						 ECalClientSourceType source_type,
175 						 guint32 wait_for_connected_seconds,
176 						 GCancellable *cancellable,
177 						 GAsyncReadyCallback callback,
178 						 gpointer user_data);
179 EClient *	e_cal_client_connect_finish	(GAsyncResult *result,
180 						 GError **error);
181 ECalClientSourceType
182 		e_cal_client_get_source_type	(ECalClient *client);
183 const gchar *	e_cal_client_get_local_attachment_store
184 						(ECalClient *client);
185 void		e_cal_client_set_default_timezone
186 						(ECalClient *client,
187 						 ICalTimezone *zone);
188 ICalTimezone *	e_cal_client_get_default_timezone
189 						(ECalClient *client);
190 gboolean	e_cal_client_check_one_alarm_only
191 						(ECalClient *client);
192 gboolean	e_cal_client_check_save_schedules
193 						(ECalClient *client);
194 gboolean	e_cal_client_check_organizer_must_attend
195 						(ECalClient *client);
196 gboolean	e_cal_client_check_organizer_must_accept
197 						(ECalClient *client);
198 gboolean	e_cal_client_check_recurrences_no_master
199 						(ECalClient *client);
200 
201 void		e_cal_client_generate_instances	(ECalClient *client,
202 						 time_t start,
203 						 time_t end,
204 						 GCancellable *cancellable,
205 						 ECalRecurInstanceCb cb,
206 						 gpointer cb_data,
207 						 GDestroyNotify destroy_cb_data);
208 void		e_cal_client_generate_instances_sync
209 						(ECalClient *client,
210 						 time_t start,
211 						 time_t end,
212 						 GCancellable *cancellable,
213 						 ECalRecurInstanceCb cb,
214 						 gpointer cb_data);
215 void		e_cal_client_generate_instances_for_object
216 						(ECalClient *client,
217 						 ICalComponent *icalcomp,
218 						 time_t start,
219 						 time_t end,
220 						 GCancellable *cancellable,
221 						 ECalRecurInstanceCb cb,
222 						 gpointer cb_data,
223 						 GDestroyNotify destroy_cb_data);
224 void		e_cal_client_generate_instances_for_object_sync
225 						(ECalClient *client,
226 						 ICalComponent *icalcomp,
227 						 time_t start,
228 						 time_t end,
229 						 GCancellable *cancellable,
230 						 ECalRecurInstanceCb cb,
231 						 gpointer cb_data);
232 gchar *		e_cal_client_get_component_as_string
233 						(ECalClient *client,
234 						 ICalComponent *icalcomp);
235 void		e_cal_client_get_default_object	(ECalClient *client,
236 						 GCancellable *cancellable,
237 						 GAsyncReadyCallback callback,
238 						 gpointer user_data);
239 gboolean	e_cal_client_get_default_object_finish
240 						(ECalClient *client,
241 						 GAsyncResult *result,
242 						 ICalComponent **out_icalcomp,
243 						 GError **error);
244 gboolean	e_cal_client_get_default_object_sync
245 						(ECalClient *client,
246 						 ICalComponent **out_icalcomp,
247 						 GCancellable *cancellable,
248 						 GError **error);
249 void		e_cal_client_get_object		(ECalClient *client,
250 						 const gchar *uid,
251 						 const gchar *rid,
252 						 GCancellable *cancellable,
253 						 GAsyncReadyCallback callback,
254 						 gpointer user_data);
255 gboolean	e_cal_client_get_object_finish	(ECalClient *client,
256 						 GAsyncResult *result,
257 						 ICalComponent **out_icalcomp,
258 						 GError **error);
259 gboolean	e_cal_client_get_object_sync	(ECalClient *client,
260 						 const gchar *uid,
261 						 const gchar *rid,
262 						 ICalComponent **out_icalcomp,
263 						 GCancellable *cancellable,
264 						 GError **error);
265 void		e_cal_client_get_objects_for_uid
266 						(ECalClient *client,
267 						 const gchar *uid,
268 						 GCancellable *cancellable,
269 						 GAsyncReadyCallback callback,
270 						 gpointer user_data);
271 gboolean	e_cal_client_get_objects_for_uid_finish
272 						(ECalClient *client,
273 						 GAsyncResult *result,
274 						 GSList **out_ecalcomps, /* ECalComponent * */
275 						 GError **error);
276 gboolean	e_cal_client_get_objects_for_uid_sync
277 						(ECalClient *client,
278 						 const gchar *uid,
279 						 GSList **out_ecalcomps, /* ECalComponent * */
280 						 GCancellable *cancellable,
281 						 GError **error);
282 void		e_cal_client_get_object_list	(ECalClient *client,
283 						 const gchar *sexp,
284 						 GCancellable *cancellable,
285 						 GAsyncReadyCallback callback,
286 						 gpointer user_data);
287 gboolean	e_cal_client_get_object_list_finish
288 						(ECalClient *client,
289 						 GAsyncResult *result,
290 						 GSList **out_icalcomps, /* ICalComponent * */
291 						 GError **error);
292 gboolean	e_cal_client_get_object_list_sync
293 						(ECalClient *client,
294 						 const gchar *sexp,
295 						 GSList **out_icalcomps, /* ICalComponent * */
296 						 GCancellable *cancellable,
297 						 GError **error);
298 void		e_cal_client_get_object_list_as_comps
299 						(ECalClient *client,
300 						 const gchar *sexp,
301 						 GCancellable *cancellable,
302 						 GAsyncReadyCallback callback,
303 						 gpointer user_data);
304 gboolean	e_cal_client_get_object_list_as_comps_finish
305 						(ECalClient *client,
306 						 GAsyncResult *result,
307 						 GSList **out_ecalcomps, /* ECalComponent * */
308 						 GError **error);
309 gboolean	e_cal_client_get_object_list_as_comps_sync
310 						(ECalClient *client,
311 						 const gchar *sexp,
312 						 GSList **out_ecalcomps, /* ECalComponent * */
313 						 GCancellable *cancellable,
314 						 GError **error);
315 void		e_cal_client_get_free_busy	(ECalClient *client,
316 						 time_t start,
317 						 time_t end,
318 						 const GSList *users, /* gchar * */
319 						 GCancellable *cancellable,
320 						 GAsyncReadyCallback callback,
321 						 gpointer user_data);
322 gboolean	e_cal_client_get_free_busy_finish
323 						(ECalClient *client,
324 						 GAsyncResult *result,
325 						 GSList **out_freebusy, /* ECalComponent * */
326 						 GError **error);
327 gboolean	e_cal_client_get_free_busy_sync	(ECalClient *client,
328 						 time_t start,
329 						 time_t end,
330 						 const GSList *users, /* gchar * */
331 						 GSList **out_freebusy, /* ECalComponent * */
332 						 GCancellable *cancellable,
333 						 GError **error);
334 void		e_cal_client_create_object	(ECalClient *client,
335 						 ICalComponent *icalcomp,
336 						 ECalOperationFlags opflags,
337 						 GCancellable *cancellable,
338 						 GAsyncReadyCallback callback,
339 						 gpointer user_data);
340 gboolean	e_cal_client_create_object_finish
341 						(ECalClient *client,
342 						 GAsyncResult *result,
343 						 gchar **out_uid,
344 						 GError **error);
345 gboolean	e_cal_client_create_object_sync	(ECalClient *client,
346 						 ICalComponent *icalcomp,
347 						 ECalOperationFlags opflags,
348 						 gchar **out_uid,
349 						 GCancellable *cancellable,
350 						 GError **error);
351 void		e_cal_client_create_objects	(ECalClient *client,
352 						 GSList *icalcomps, /* ICalComponent * */
353 						 ECalOperationFlags opflags,
354 						 GCancellable *cancellable,
355 						 GAsyncReadyCallback callback,
356 						 gpointer user_data);
357 gboolean	e_cal_client_create_objects_finish
358 						(ECalClient *client,
359 						 GAsyncResult *result,
360 						 GSList **out_uids, /* gchar * */
361 						 GError **error);
362 gboolean	e_cal_client_create_objects_sync
363 						(ECalClient *client,
364 						 GSList *icalcomps, /* ICalComponent * */
365 						 ECalOperationFlags opflags,
366 						 GSList **out_uids, /* gchar * */
367 						 GCancellable *cancellable,
368 						 GError **error);
369 void		e_cal_client_modify_object	(ECalClient *client,
370 						 ICalComponent *icalcomp,
371 						 ECalObjModType mod,
372 						 ECalOperationFlags opflags,
373 						 GCancellable *cancellable,
374 						 GAsyncReadyCallback callback,
375 						 gpointer user_data);
376 gboolean	e_cal_client_modify_object_finish
377 						(ECalClient *client,
378 						 GAsyncResult *result,
379 						 GError **error);
380 gboolean	e_cal_client_modify_object_sync	(ECalClient *client,
381 						 ICalComponent *icalcomp,
382 						 ECalObjModType mod,
383 						 ECalOperationFlags opflags,
384 						 GCancellable *cancellable,
385 						 GError **error);
386 void		e_cal_client_modify_objects	(ECalClient *client,
387 						 GSList *icalcomps, /* ICalComponent * */
388 						 ECalObjModType mod,
389 						 ECalOperationFlags opflags,
390 						 GCancellable *cancellable,
391 						 GAsyncReadyCallback callback,
392 						 gpointer user_data);
393 gboolean	e_cal_client_modify_objects_finish
394 						(ECalClient *client,
395 						 GAsyncResult *result,
396 						 GError **error);
397 gboolean	e_cal_client_modify_objects_sync
398 						(ECalClient *client,
399 						 GSList *icalcomps, /* ICalComponent * */
400 						 ECalObjModType mod,
401 						 ECalOperationFlags opflags,
402 						 GCancellable *cancellable,
403 						 GError **error);
404 void		e_cal_client_remove_object	(ECalClient *client,
405 						 const gchar *uid,
406 						 const gchar *rid,
407 						 ECalObjModType mod,
408 						 ECalOperationFlags opflags,
409 						 GCancellable *cancellable,
410 						 GAsyncReadyCallback callback,
411 						 gpointer user_data);
412 gboolean	e_cal_client_remove_object_finish
413 						(ECalClient *client,
414 						 GAsyncResult *result,
415 						 GError **error);
416 gboolean	e_cal_client_remove_object_sync	(ECalClient *client,
417 						 const gchar *uid,
418 						 const gchar *rid,
419 						 ECalObjModType mod,
420 						 ECalOperationFlags opflags,
421 						 GCancellable *cancellable,
422 						 GError **error);
423 void		e_cal_client_remove_objects	(ECalClient *client,
424 						 const GSList *ids, /* ECalComponentId * */
425 						 ECalObjModType mod,
426 						 ECalOperationFlags opflags,
427 						 GCancellable *cancellable,
428 						 GAsyncReadyCallback callback,
429 						 gpointer user_data);
430 gboolean	e_cal_client_remove_objects_finish
431 						(ECalClient *client,
432 						 GAsyncResult *result,
433 						 GError **error);
434 gboolean	e_cal_client_remove_objects_sync
435 						(ECalClient *client,
436 						 const GSList *ids, /* ECalComponentId * */
437 						 ECalObjModType mod,
438 						 ECalOperationFlags opflags,
439 						 GCancellable *cancellable,
440 						 GError **error);
441 void		e_cal_client_receive_objects	(ECalClient *client,
442 						 ICalComponent *icalcomp,
443 						 ECalOperationFlags opflags,
444 						 GCancellable *cancellable,
445 						 GAsyncReadyCallback callback,
446 						 gpointer user_data);
447 gboolean	e_cal_client_receive_objects_finish
448 						(ECalClient *client,
449 						 GAsyncResult *result,
450 						 GError **error);
451 gboolean	e_cal_client_receive_objects_sync
452 						(ECalClient *client,
453 						 ICalComponent *icalcomp,
454 						 ECalOperationFlags opflags,
455 						 GCancellable *cancellable,
456 						 GError **error);
457 void		e_cal_client_send_objects	(ECalClient *client,
458 						 ICalComponent *icalcomp,
459 						 ECalOperationFlags opflags,
460 						 GCancellable *cancellable,
461 						 GAsyncReadyCallback callback,
462 						 gpointer user_data);
463 gboolean	e_cal_client_send_objects_finish
464 						(ECalClient *client,
465 						 GAsyncResult *result,
466 						 GSList **out_users, /* gchar * */
467 						 ICalComponent **out_modified_icalcomp,
468 						 GError **error);
469 gboolean	e_cal_client_send_objects_sync	(ECalClient *client,
470 						 ICalComponent *icalcomp,
471 						 ECalOperationFlags opflags,
472 						 GSList **out_users, /* gchar * */
473 						 ICalComponent **out_modified_icalcomp,
474 						 GCancellable *cancellable,
475 						 GError **error);
476 void		e_cal_client_get_attachment_uris
477 						(ECalClient *client,
478 						 const gchar *uid,
479 						 const gchar *rid,
480 						 GCancellable *cancellable,
481 						 GAsyncReadyCallback callback,
482 						 gpointer user_data);
483 gboolean	e_cal_client_get_attachment_uris_finish
484 						(ECalClient *client,
485 						 GAsyncResult *result,
486 						 GSList **out_attachment_uris, /* gchar * */
487 						 GError **error);
488 gboolean	e_cal_client_get_attachment_uris_sync
489 						(ECalClient *client,
490 						 const gchar *uid,
491 						 const gchar *rid,
492 						 GSList **out_attachment_uris, /* gchar * */
493 						 GCancellable *cancellable,
494 						 GError **error);
495 void		e_cal_client_discard_alarm	(ECalClient *client,
496 						 const gchar *uid,
497 						 const gchar *rid,
498 						 const gchar *auid,
499 						 ECalOperationFlags opflags,
500 						 GCancellable *cancellable,
501 						 GAsyncReadyCallback callback,
502 						 gpointer user_data);
503 gboolean	e_cal_client_discard_alarm_finish
504 						(ECalClient *client,
505 						 GAsyncResult *result,
506 						 GError **error);
507 gboolean	e_cal_client_discard_alarm_sync	(ECalClient *client,
508 						 const gchar *uid,
509 						 const gchar *rid,
510 						 const gchar *auid,
511 						 ECalOperationFlags opflags,
512 						 GCancellable *cancellable,
513 						 GError **error);
514 void		e_cal_client_get_view		(ECalClient *client,
515 						 const gchar *sexp,
516 						 GCancellable *cancellable,
517 						 GAsyncReadyCallback callback,
518 						 gpointer user_data);
519 gboolean	e_cal_client_get_view_finish	(ECalClient *client,
520 						 GAsyncResult *result,
521 						 ECalClientView **out_view,
522 						 GError **error);
523 gboolean	e_cal_client_get_view_sync	(ECalClient *client,
524 						 const gchar *sexp,
525 						 ECalClientView **out_view,
526 						 GCancellable *cancellable,
527 						 GError **error);
528 void		e_cal_client_get_timezone	(ECalClient *client,
529 						 const gchar *tzid,
530 						 GCancellable *cancellable,
531 						 GAsyncReadyCallback callback,
532 						 gpointer user_data);
533 gboolean	e_cal_client_get_timezone_finish
534 						(ECalClient *client,
535 						 GAsyncResult *result,
536 						 ICalTimezone **out_zone,
537 						 GError **error);
538 gboolean	e_cal_client_get_timezone_sync	(ECalClient *client,
539 						 const gchar *tzid,
540 						 ICalTimezone **out_zone,
541 						 GCancellable *cancellable,
542 						 GError **error);
543 void		e_cal_client_add_timezone	(ECalClient *client,
544 						 ICalTimezone *zone,
545 						 GCancellable *cancellable,
546 						 GAsyncReadyCallback callback,
547 						 gpointer user_data);
548 gboolean	e_cal_client_add_timezone_finish
549 						(ECalClient *client,
550 						 GAsyncResult *result,
551 						 GError **error);
552 gboolean	e_cal_client_add_timezone_sync	(ECalClient *client,
553 						 ICalTimezone *zone,
554 						 GCancellable *cancellable,
555 						 GError **error);
556 
557 G_END_DECLS
558 
559 #endif /* E_CAL_CLIENT_H */
560