Make sure all new APIs have "Since: 3.2" tags.
[platform/upstream/evolution-data-server.git] / calendar / libecal / e-cal.h
1 /* Evolution calendar ecal
2  *
3  * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
4  *
5  * Authors: Federico Mena-Quintero <federico@ximian.com>
6  *          Rodrigo Moya <rodrigo@novell.com>
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of version 2 of the GNU Lesser General Public
10  * License as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  */
21
22 #ifndef E_CAL_H
23 #define E_CAL_H
24
25 #ifndef E_CAL_DISABLE_DEPRECATED
26
27 #include <libedataserver/e-source-list.h>
28 #include <libedataserver/e-source.h>
29 #include <libecal/e-cal-recur.h>
30 #include <libecal/e-cal-util.h>
31 #include <libecal/e-cal-view.h>
32 #include <libecal/e-cal-types.h>
33
34 G_BEGIN_DECLS
35
36 \f
37
38 #define E_TYPE_CAL            (e_cal_get_type ())
39 #define E_CAL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_CAL, ECal))
40 #define E_CAL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_CAL, ECalClass))
41 #define E_IS_CAL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_CAL))
42 #define E_IS_CAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_CAL))
43
44 #define E_TYPE_CAL_SOURCE_TYPE (e_cal_source_type_enum_get_type ())
45 #define E_CAL_SET_MODE_STATUS_ENUM_TYPE (e_cal_set_mode_status_enum_get_type ())
46 #define CAL_MODE_ENUM_TYPE                   (cal_mode_enum_get_type ())
47
48 typedef struct _ECal ECal;
49 typedef struct _ECalClass ECalClass;
50 typedef struct _ECalPrivate ECalPrivate;
51
52 typedef enum {
53         E_CAL_SOURCE_TYPE_EVENT,
54         E_CAL_SOURCE_TYPE_TODO,
55         E_CAL_SOURCE_TYPE_JOURNAL,
56         E_CAL_SOURCE_TYPE_LAST
57 } ECalSourceType;
58
59 /* Set mode status for the e_cal_set_mode function */
60 typedef enum {
61         E_CAL_SET_MODE_SUCCESS,
62         E_CAL_SET_MODE_ERROR,
63         E_CAL_SET_MODE_NOT_SUPPORTED
64 } ECalSetModeStatus;
65
66 /* Whether the ecal is not loaded, is being loaded, or is already loaded */
67 typedef enum {
68         E_CAL_LOAD_NOT_LOADED,
69         E_CAL_LOAD_AUTHENTICATING,
70         E_CAL_LOAD_LOADING,
71         E_CAL_LOAD_LOADED
72 } ECalLoadState;
73
74 /**
75  * EDataCalMode:
76  *
77  * FIXME: Document me.
78  *
79  * Since: 3.2
80  **/
81 typedef enum {
82         Local = 1 << 0,
83         Remote = 1 << 1,
84         AnyMode = 0x07
85 } EDataCalMode;
86
87 struct _ECal {
88         GObject object;
89
90         /*< private >*/
91         ECalPrivate *priv;
92 };
93
94 struct _ECalClass {
95         GObjectClass parent_class;
96
97         /* Notification signals */
98
99         #ifndef E_CAL_DISABLE_DEPRECATED
100         void (* cal_opened) (ECal *ecal, ECalendarStatus status);
101         #endif
102         void (* cal_opened_ex) (ECal *ecal, const GError *error);
103         void (* cal_set_mode) (ECal *ecal, ECalSetModeStatus status, CalMode mode);
104
105         void (* backend_error) (ECal *ecal, const gchar *message);
106         void (* backend_died) (ECal *ecal);
107 };
108
109 typedef gchar * (* ECalAuthFunc) (ECal *ecal,
110                                  const gchar *prompt,
111                                  const gchar *key,
112                                  gpointer user_data);
113
114 GType e_cal_get_type (void);
115
116 GType e_cal_source_type_enum_get_type (void);
117 GType e_cal_set_mode_status_enum_get_type (void);
118 GType cal_mode_enum_get_type (void);
119
120 ECal *e_cal_new (ESource *source, ECalSourceType type);
121 ECal *e_cal_new_from_uri (const gchar *uri, ECalSourceType type);
122 ECal *e_cal_new_system_calendar (void);
123 ECal *e_cal_new_system_tasks (void);
124 ECal *e_cal_new_system_memos (void);
125
126 void e_cal_set_auth_func (ECal *ecal, ECalAuthFunc func, gpointer data);
127
128 gboolean e_cal_open (ECal *ecal, gboolean only_if_exists, GError **error);
129 void e_cal_open_async (ECal *ecal, gboolean only_if_exists);
130 gboolean e_cal_refresh (ECal *ecal, GError **error);
131 gboolean e_cal_remove (ECal *ecal, GError **error);
132
133 GList *e_cal_uri_list (ECal *ecal, CalMode mode);
134
135 ECalSourceType e_cal_get_source_type (ECal *ecal);
136 ECalLoadState e_cal_get_load_state (ECal *ecal);
137
138 ESource *e_cal_get_source (ECal *ecal);
139 const gchar *e_cal_get_uri (ECal *ecal);
140
141 gboolean e_cal_is_read_only (ECal *ecal, gboolean *read_only, GError **error);
142 gboolean e_cal_get_cal_address (ECal *ecal, gchar **cal_address, GError **error);
143 gboolean e_cal_get_alarm_email_address (ECal *ecal, gchar **alarm_address, GError **error);
144 gboolean e_cal_get_ldap_attribute (ECal *ecal, gchar **ldap_attribute, GError **error);
145
146 gboolean e_cal_get_one_alarm_only (ECal *ecal);
147 gboolean e_cal_get_organizer_must_attend (ECal *ecal);
148 gboolean e_cal_get_save_schedules (ECal *ecal);
149 gboolean e_cal_get_static_capability (ECal *ecal, const gchar *cap);
150 gboolean e_cal_get_organizer_must_accept (ECal *ecal);
151 gboolean e_cal_get_refresh_supported (ECal *ecal);
152
153 gboolean e_cal_set_mode (ECal *ecal, CalMode mode);
154
155 gboolean e_cal_get_default_object (ECal *ecal,
156                                    icalcomponent **icalcomp, GError **error);
157
158 gboolean e_cal_get_object (ECal *ecal,
159                            const gchar *uid,
160                            const gchar *rid,
161                            icalcomponent **icalcomp,
162                            GError **error);
163 gboolean e_cal_get_objects_for_uid (ECal *ecal,
164                                     const gchar *uid,
165                                     GList **objects,
166                                     GError **error);
167
168 gboolean e_cal_get_changes (ECal *ecal, const gchar *change_id, GList **changes, GError **error);
169 void e_cal_free_change_list (GList *list);
170
171 gboolean e_cal_get_object_list (ECal *ecal, const gchar *query, GList **objects, GError **error);
172 gboolean e_cal_get_object_list_as_comp (ECal *ecal, const gchar *query, GList **objects, GError **error);
173 void e_cal_free_object_list (GList *objects);
174
175 gboolean e_cal_get_free_busy (ECal *ecal, GList *users, time_t start, time_t end,
176                               GList **freebusy, GError **error);
177
178 void e_cal_generate_instances (ECal *ecal, time_t start, time_t end,
179                                ECalRecurInstanceFn cb, gpointer cb_data);
180 void e_cal_generate_instances_for_object (ECal *ecal, icalcomponent *icalcomp,
181                                           time_t start, time_t end,
182                                           ECalRecurInstanceFn cb, gpointer cb_data);
183
184 GSList *e_cal_get_alarms_in_range (ECal *ecal, time_t start, time_t end);
185
186 void e_cal_free_alarms (GSList *comp_alarms);
187
188 gboolean e_cal_get_alarms_for_object (ECal *ecal, const ECalComponentId *id,
189                                       time_t start, time_t end,
190                                       ECalComponentAlarms **alarms);
191
192 gboolean e_cal_create_object (ECal *ecal, icalcomponent *icalcomp, gchar **uid, GError **error);
193 gboolean e_cal_modify_object (ECal *ecal, icalcomponent *icalcomp, CalObjModType mod, GError **error);
194 gboolean e_cal_remove_object (ECal *ecal, const gchar *uid, GError **error);
195 gboolean e_cal_remove_object_with_mod (ECal *ecal, const gchar *uid, const gchar *rid, CalObjModType mod, GError **error);
196
197 gboolean e_cal_discard_alarm (ECal *ecal, ECalComponent *comp, const gchar *auid, GError **error);
198
199 gboolean e_cal_receive_objects (ECal *ecal, icalcomponent *icalcomp, GError **error);
200 gboolean e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GList **users, icalcomponent **modified_icalcomp, GError **error);
201
202 gboolean e_cal_get_timezone (ECal *ecal, const gchar *tzid, icaltimezone **zone, GError **error);
203 gboolean e_cal_add_timezone (ECal *ecal, icaltimezone *izone, GError **error);
204 /* Sets the default timezone to use to resolve DATE and floating DATE-TIME
205  * values. This will typically be from the user's timezone setting. Call this
206  * before using any other functions. It will pass the default timezone on to
207  * the server. Returns TRUE on success. */
208 gboolean e_cal_set_default_timezone (ECal *ecal, icaltimezone *zone, GError **error);
209
210 gboolean e_cal_get_query (ECal *ecal, const gchar *sexp, ECalView **query, GError **error);
211
212 /* Resolves TZIDs for the recurrence generator. */
213 icaltimezone *e_cal_resolve_tzid_cb (const gchar *tzid, gpointer data);
214
215 /* Returns a complete VCALENDAR for a VEVENT/VTODO including all VTIMEZONEs
216  * used by the component. It also includes a 'METHOD:PUBLISH' property. */
217 gchar * e_cal_get_component_as_string (ECal *ecal, icalcomponent *icalcomp);
218
219 const gchar * e_cal_get_error_message (ECalendarStatus status);
220
221 /* Calendar/Tasks Discovery */
222 gboolean    e_cal_open_default (ECal **ecal, ECalSourceType type, ECalAuthFunc func, gpointer data, GError **error);
223 gboolean    e_cal_set_default (ECal  *ecal, GError **error);
224 gboolean    e_cal_set_default_source (ESource *source, ECalSourceType type, GError **error);
225 gboolean    e_cal_get_sources (ESourceList **sources, ECalSourceType type, GError **error);
226 const gchar * e_cal_get_local_attachment_store (ECal *ecal);
227 gboolean e_cal_get_recurrences_no_master (ECal *ecal);
228 gboolean e_cal_get_attachments_for_comp (ECal *ecal, const gchar *uid, const gchar *rid, GSList **list, GError **error);
229
230 G_END_DECLS
231
232 #endif /* E_CAL_DISABLE_DEPRECATED */
233
234 #endif