1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /* camel-folder.h: Abstract class for an email folder
3  *
4  * Copyright (C) 1999-2008 Novell, Inc. (www.novell.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  * Authors: Bertrand Guiheneuf <bertrand@helixcode.com>
19  *	    Michael Zucchi <notzed@ximian.com>
20  */
21 
22 #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION)
23 #error "Only <camel/camel.h> can be included directly."
24 #endif
25 
26 #ifndef CAMEL_FOLDER_H
27 #define CAMEL_FOLDER_H
28 
29 #include <camel/camel-enums.h>
30 #include <camel/camel-folder-summary.h>
31 #include <camel/camel-object.h>
32 
33 /* Standard GObject macros */
34 #define CAMEL_TYPE_FOLDER \
35 	(camel_folder_get_type ())
36 #define CAMEL_FOLDER(obj) \
37 	(G_TYPE_CHECK_INSTANCE_CAST \
38 	((obj), CAMEL_TYPE_FOLDER, CamelFolder))
39 #define CAMEL_FOLDER_CLASS(cls) \
40 	(G_TYPE_CHECK_CLASS_CAST \
41 	((cls), CAMEL_TYPE_FOLDER, CamelFolderClass))
42 #define CAMEL_IS_FOLDER(obj) \
43 	(G_TYPE_CHECK_INSTANCE_TYPE \
44 	((obj), CAMEL_TYPE_FOLDER))
45 #define CAMEL_IS_FOLDER_CLASS(cls) \
46 	(G_TYPE_CHECK_CLASS_TYPE \
47 	((cls), CAMEL_TYPE_FOLDER))
48 #define CAMEL_FOLDER_GET_CLASS(obj) \
49 	(G_TYPE_INSTANCE_GET_CLASS \
50 	((obj), CAMEL_TYPE_FOLDER, CamelFolderClass))
51 
52 #define CAMEL_TYPE_FOLDER_CHANGE_INFO (camel_folder_change_info_get_type ())
53 
54 /**
55  * CAMEL_FOLDER_ERROR:
56  *
57  * Since: 2.32
58  **/
59 #define CAMEL_FOLDER_ERROR \
60 	(camel_folder_error_quark ())
61 
62 G_BEGIN_DECLS
63 
64 struct _CamelStore;
65 
66 typedef struct _CamelFolderChangeInfo CamelFolderChangeInfo;
67 typedef struct _CamelFolderChangeInfoPrivate CamelFolderChangeInfoPrivate;
68 
69 typedef struct _CamelFolder CamelFolder;
70 typedef struct _CamelFolderClass CamelFolderClass;
71 typedef struct _CamelFolderPrivate CamelFolderPrivate;
72 
73 /**
74  * CamelFolderError:
75  * @CAMEL_FOLDER_ERROR_INVALID: a generic error about invalid operation with the folder
76  * @CAMEL_FOLDER_ERROR_INVALID_STATE: the folder is in an invalid state
77  * @CAMEL_FOLDER_ERROR_NON_EMPTY: the folder is not empty
78  * @CAMEL_FOLDER_ERROR_NON_UID: requested UID is not a UID
79  * @CAMEL_FOLDER_ERROR_INSUFFICIENT_PERMISSION: insufficient permissions for the requested operation
80  * @CAMEL_FOLDER_ERROR_INVALID_PATH: the folder path is invalid
81  * @CAMEL_FOLDER_ERROR_INVALID_UID: requested UID is invalid/cannot be found
82  * @CAMEL_FOLDER_ERROR_SUMMARY_INVALID: the folder's summary is invalid/broken
83  *
84  * Since: 2.32
85  **/
86 typedef enum {
87 	CAMEL_FOLDER_ERROR_INVALID,
88 	CAMEL_FOLDER_ERROR_INVALID_STATE,
89 	CAMEL_FOLDER_ERROR_NON_EMPTY,
90 	CAMEL_FOLDER_ERROR_NON_UID,
91 	CAMEL_FOLDER_ERROR_INSUFFICIENT_PERMISSION,
92 	CAMEL_FOLDER_ERROR_INVALID_PATH,
93 	CAMEL_FOLDER_ERROR_INVALID_UID,
94 	CAMEL_FOLDER_ERROR_SUMMARY_INVALID
95 } CamelFolderError;
96 
97 /**
98  * CamelFetchType:
99  * @CAMEL_FETCH_OLD_MESSAGES: fetch old messages
100  * @CAMEL_FETCH_NEW_MESSAGES: fetch new messages
101  *
102  * Since: 3.4
103  **/
104 typedef enum {
105 	CAMEL_FETCH_OLD_MESSAGES,
106 	CAMEL_FETCH_NEW_MESSAGES
107 } CamelFetchType;
108 
109 struct _CamelFolderChangeInfo {
110 	GPtrArray *uid_added;
111 	GPtrArray *uid_removed;
112 	GPtrArray *uid_changed;
113 	GPtrArray *uid_recent;
114 
115 	/*< private >*/
116 	CamelFolderChangeInfoPrivate *priv;
117 };
118 
119 typedef struct _CamelFolderQuotaInfo CamelFolderQuotaInfo;
120 
121 /**
122  * CamelFolderQuotaInfo:
123  * @name: name, aka identification, of the quota type
124  * @used: how many bytes is currently in use
125  * @total: what is the maximum quota to use
126  * @next: a reference to a follwing #CamelFolderQuotaInfo
127  *
128  * Since: 2.24
129  **/
130 struct _CamelFolderQuotaInfo {
131 	gchar *name;
132 	guint64 used;
133 	guint64 total;
134 
135 	struct _CamelFolderQuotaInfo *next;
136 };
137 
138 struct _CamelFolder {
139 	CamelObject parent;
140 	CamelFolderPrivate *priv;
141 };
142 
143 struct _CamelFolderClass {
144 	CamelObjectClass parent_class;
145 
146 	/* Non-Blocking Methods */
147 	gint		(*get_message_count)	(CamelFolder *folder);
148 	guint32		(*get_permanent_flags)	(CamelFolder *folder);
149 	guint32		(*get_message_flags)	(CamelFolder *folder,
150 						 const gchar *uid);
151 	gboolean	(*set_message_flags)	(CamelFolder *folder,
152 						 const gchar *uid,
153 						 guint32 mask,
154 						 guint32 set);
155 	gboolean	(*get_message_user_flag)(CamelFolder *folder,
156 						 const gchar *uid,
157 						 const gchar *name);
158 	void		(*set_message_user_flag)(CamelFolder *folder,
159 						 const gchar *uid,
160 						 const gchar *name,
161 						 gboolean value);
162 	const gchar *	(*get_message_user_tag)	(CamelFolder *folder,
163 						 const gchar *uid,
164 						 const gchar *name);
165 	void		(*set_message_user_tag)	(CamelFolder *folder,
166 						 const gchar *uid,
167 						 const gchar *name,
168 						 const gchar *value);
169 	GPtrArray *	(*get_uids)		(CamelFolder *folder);
170 	void		(*free_uids)		(CamelFolder *folder,
171 						 GPtrArray *array);
172 	gint		(*cmp_uids)		(CamelFolder *folder,
173 						 const gchar *uid1,
174 						 const gchar *uid2);
175 	void		(*sort_uids)		(CamelFolder *folder,
176 						 GPtrArray *uids);
177 	GPtrArray *	(*get_summary)		(CamelFolder *folder);
178 	void		(*free_summary)		(CamelFolder *folder,
179 						 GPtrArray *array);
180 	gboolean	(*has_search_capability)(CamelFolder *folder);
181 	GPtrArray *	(*search_by_expression)	(CamelFolder *folder,
182 						 const gchar *expression,
183 						 GCancellable *cancellable,
184 						 GError **error);
185 	GPtrArray *	(*search_by_uids)	(CamelFolder *folder,
186 						 const gchar *expression,
187 						 GPtrArray *uids,
188 						 GCancellable *cancellable,
189 						 GError **error);
190 	void		(*search_free)		(CamelFolder *folder,
191 						 GPtrArray *result);
192 	CamelMessageInfo *
193 			(*get_message_info)	(CamelFolder *folder,
194 						 const gchar *uid);
195 	void		(*delete_)		(CamelFolder *folder);
196 	void		(*rename)		(CamelFolder *folder,
197 						 const gchar *new_name);
198 	void		(*freeze)		(CamelFolder *folder);
199 	void		(*thaw)			(CamelFolder *folder);
200 	gboolean	(*is_frozen)		(CamelFolder *folder);
201 	guint32		(*count_by_expression)	(CamelFolder *folder,
202 						 const gchar *expression,
203 						 GCancellable *cancellable,
204 						 GError **error);
205 	GPtrArray *	(*get_uncached_uids)	(CamelFolder *folder,
206 						 GPtrArray *uids,
207 						 GError **error);
208 	gchar *		(*get_filename)		(CamelFolder *folder,
209 						 const gchar *uid,
210 						 GError **error);
211 	CamelMimeMessage *
212 			(*get_message_cached)	(CamelFolder *folder,
213 						 const gchar *message_uid,
214 						 GCancellable *cancellable);
215 
216 	/* Synchronous I/O Methods */
217 	gboolean	(*append_message_sync)	(CamelFolder *folder,
218 						 CamelMimeMessage *message,
219 						 CamelMessageInfo *info,
220 						 gchar **appended_uid,
221 						 GCancellable *cancellable,
222 						 GError **error);
223 	gboolean	(*expunge_sync)		(CamelFolder *folder,
224 						 GCancellable *cancellable,
225 						 GError **error);
226 	CamelMimeMessage *
227 			(*get_message_sync)	(CamelFolder *folder,
228 						 const gchar *message_uid,
229 						 GCancellable *cancellable,
230 						 GError **error);
231 	CamelFolderQuotaInfo *
232 			(*get_quota_info_sync)	(CamelFolder *folder,
233 						 GCancellable *cancellable,
234 						 GError **error);
235 	gboolean	(*purge_message_cache_sync)
236 						(CamelFolder *folder,
237 						 gchar *start_uid,
238 						 gchar *end_uid,
239 						 GCancellable *cancellable,
240 						 GError **error);
241 	gboolean	(*refresh_info_sync)	(CamelFolder *folder,
242 						 GCancellable *cancellable,
243 						 GError **error);
244 	gboolean	(*synchronize_sync)	(CamelFolder *folder,
245 						 gboolean expunge,
246 						 GCancellable *cancellable,
247 						 GError **error);
248 	gboolean	(*synchronize_message_sync)
249 						(CamelFolder *folder,
250 						 const gchar *message_uid,
251 						 GCancellable *cancellable,
252 						 GError **error);
253 	gboolean	(*transfer_messages_to_sync)
254 						(CamelFolder *source,
255 						 GPtrArray *message_uids,
256 						 CamelFolder *destination,
257 						 gboolean delete_originals,
258 						 GPtrArray **transferred_uids,
259 						 GCancellable *cancellable,
260 						 GError **error);
261 	void		(*prepare_content_refresh)
262 						(CamelFolder *folder);
263 
264 	/* Padding for future expansion */
265 	gpointer reserved_methods[20];
266 
267 	/* Signals */
268 	void		(*changed)		(CamelFolder *folder,
269 						 CamelFolderChangeInfo *changes);
270 	void		(*deleted)		(CamelFolder *folder);
271 	void		(*renamed)		(CamelFolder *folder,
272 						 const gchar *old_name);
273 
274 	/* Padding for future expansion */
275 	gpointer reserved_signals[20];
276 };
277 
278 GType		camel_folder_get_type		(void);
279 GQuark		camel_folder_error_quark	(void) G_GNUC_CONST;
280 void		camel_folder_set_lock_async	(CamelFolder *folder,
281 						 gboolean skip_folder_lock);
282 struct _CamelStore *
283 		camel_folder_get_parent_store	(CamelFolder *folder);
284 CamelFolderSummary *
285 		camel_folder_get_folder_summary	(CamelFolder *folder);
286 void		camel_folder_take_folder_summary
287 						(CamelFolder *folder,
288 						 CamelFolderSummary *summary);
289 const gchar *	camel_folder_get_full_name	(CamelFolder *folder);
290 gchar *		camel_folder_dup_full_name	(CamelFolder *folder);
291 void		camel_folder_set_full_name	(CamelFolder *folder,
292 						 const gchar *full_name);
293 const gchar *	camel_folder_get_display_name	(CamelFolder *folder);
294 gchar *		camel_folder_dup_display_name	(CamelFolder *folder);
295 void		camel_folder_set_display_name	(CamelFolder *folder,
296 						 const gchar *display_name);
297 const gchar *	camel_folder_get_description	(CamelFolder *folder);
298 gchar *		camel_folder_dup_description	(CamelFolder *folder);
299 void		camel_folder_set_description	(CamelFolder *folder,
300 						 const gchar *description);
301 guint32		camel_folder_get_flags		(CamelFolder *folder);
302 void		camel_folder_set_flags		(CamelFolder *folder,
303 						 guint32 folder_flags);
304 CamelThreeState	camel_folder_get_mark_seen	(CamelFolder *folder);
305 void		camel_folder_set_mark_seen	(CamelFolder *folder,
306 						 CamelThreeState mark_seen);
307 gint		camel_folder_get_mark_seen_timeout
308 						(CamelFolder *folder);
309 void		camel_folder_set_mark_seen_timeout
310 						(CamelFolder *folder,
311 						 gint timeout);
312 guint32		camel_folder_get_permanent_flags
313 						(CamelFolder *folder);
314 #ifndef CAMEL_DISABLE_DEPRECATED
315 guint32		camel_folder_get_message_flags	(CamelFolder *folder,
316 						 const gchar *uid);
317 gboolean	camel_folder_set_message_flags	(CamelFolder *folder,
318 						 const gchar *uid,
319 						 guint32 mask,
320 						 guint32 set);
321 gboolean	camel_folder_get_message_user_flag
322 						(CamelFolder *folder,
323 						 const gchar *uid,
324 						 const gchar *name);
325 void		camel_folder_set_message_user_flag
326 						(CamelFolder *folder,
327 						 const gchar *uid,
328 						 const gchar *name,
329 						 gboolean value);
330 const gchar *	camel_folder_get_message_user_tag
331 						(CamelFolder *folder,
332 						 const gchar *uid,
333 						 const gchar *name);
334 void		camel_folder_set_message_user_tag
335 						(CamelFolder *folder,
336 						 const gchar *uid,
337 						 const gchar *name,
338 						 const gchar *value);
339 #endif /* CAMEL_DISABLE_DEPRECATED */
340 gboolean	camel_folder_has_summary_capability
341 						(CamelFolder *folder);
342 gint		camel_folder_get_message_count	(CamelFolder *folder);
343 #ifndef CAMEL_DISABLE_DEPRECATED
344 gint		camel_folder_get_unread_message_count
345 						(CamelFolder *folder);
346 #endif
347 gint		camel_folder_get_deleted_message_count
348 						(CamelFolder *folder);
349 GPtrArray *	camel_folder_get_summary	(CamelFolder *folder);
350 void		camel_folder_free_summary	(CamelFolder *folder,
351 						 GPtrArray *array);
352 
353 #define camel_folder_delete_message(folder, uid) \
354 	(camel_folder_set_message_flags ( \
355 		folder, uid, \
356 		CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN, \
357 		CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN))
358 
359 GPtrArray *	camel_folder_get_uids		(CamelFolder *folder);
360 void		camel_folder_free_uids		(CamelFolder *folder,
361 						 GPtrArray *array);
362 GPtrArray *	camel_folder_get_uncached_uids	(CamelFolder *folder,
363 						 GPtrArray *uids,
364 						 GError **error);
365 gint		camel_folder_cmp_uids		(CamelFolder *folder,
366 						 const gchar *uid1,
367 						 const gchar *uid2);
368 void		camel_folder_sort_uids		(CamelFolder *folder,
369 						 GPtrArray *uids);
370 GPtrArray *	camel_folder_search_by_expression
371 						(CamelFolder *folder,
372 						 const gchar *expression,
373 						 GCancellable *cancellable,
374 						 GError **error);
375 GPtrArray *	camel_folder_search_by_uids	(CamelFolder *folder,
376 						 const gchar *expression,
377 						 GPtrArray *uids,
378 						 GCancellable *cancellable,
379 						 GError **error);
380 void		camel_folder_search_free	(CamelFolder *folder,
381 						 GPtrArray *result);
382 guint32		camel_folder_count_by_expression (CamelFolder *folder,
383 						 const gchar *expression,
384 						 GCancellable *cancellable,
385 						 GError **error);
386 CamelMessageInfo *
387 		camel_folder_get_message_info	(CamelFolder *folder,
388 						 const gchar *uid);
389 void		camel_folder_delete		(CamelFolder *folder);
390 void		camel_folder_rename		(CamelFolder *folder,
391 						 const gchar *new_name);
392 void		camel_folder_changed		(CamelFolder *folder,
393 						 CamelFolderChangeInfo *changes);
394 void		camel_folder_freeze		(CamelFolder *folder);
395 void		camel_folder_thaw		(CamelFolder *folder);
396 gboolean	camel_folder_is_frozen		(CamelFolder *folder);
397 gint		camel_folder_get_frozen_count	(CamelFolder *folder);
398 
399 GType		camel_folder_quota_info_get_type	(void) G_GNUC_CONST;
400 CamelFolderQuotaInfo *
401 		camel_folder_quota_info_new	(const gchar *name,
402 						 guint64 used,
403 						 guint64 total);
404 CamelFolderQuotaInfo *
405 		camel_folder_quota_info_clone	(const CamelFolderQuotaInfo *info);
406 void		camel_folder_quota_info_free	(CamelFolderQuotaInfo *info);
407 void		camel_folder_free_shallow	(CamelFolder *folder,
408 						 GPtrArray *array);
409 void		camel_folder_free_deep		(CamelFolder *folder,
410 						 GPtrArray *array);
411 gchar *		camel_folder_get_filename	(CamelFolder *folder,
412 						 const gchar *uid,
413 						 GError **error);
414 void		camel_folder_lock		(CamelFolder *folder);
415 void		camel_folder_unlock		(CamelFolder *folder);
416 
417 gboolean	camel_folder_append_message_sync
418 						(CamelFolder *folder,
419 						 CamelMimeMessage *message,
420 						 CamelMessageInfo *info,
421 						 gchar **appended_uid,
422 						 GCancellable *cancellable,
423 						 GError **error);
424 void		camel_folder_append_message	(CamelFolder *folder,
425 						 CamelMimeMessage *message,
426 						 CamelMessageInfo *info,
427 						 gint io_priority,
428 						 GCancellable *cancellable,
429 						 GAsyncReadyCallback callback,
430 						 gpointer user_data);
431 gboolean	camel_folder_append_message_finish
432 						(CamelFolder *folder,
433 						 GAsyncResult *result,
434 						 gchar **appended_uid,
435 						 GError **error);
436 gboolean	camel_folder_expunge_sync	(CamelFolder *folder,
437 						 GCancellable *cancellable,
438 						 GError **error);
439 void		camel_folder_expunge		(CamelFolder *folder,
440 						 gint io_priority,
441 						 GCancellable *cancellable,
442 						 GAsyncReadyCallback callback,
443 						 gpointer user_data);
444 gboolean	camel_folder_expunge_finish	(CamelFolder *folder,
445 						 GAsyncResult *result,
446 						 GError **error);
447 CamelMimeMessage *
448 		camel_folder_get_message_sync	(CamelFolder *folder,
449 						 const gchar *message_uid,
450 						 GCancellable *cancellable,
451 						 GError **error);
452 void		camel_folder_get_message	(CamelFolder *folder,
453 						 const gchar *message_uid,
454 						 gint io_priority,
455 						 GCancellable *cancellable,
456 						 GAsyncReadyCallback callback,
457 						 gpointer user_data);
458 CamelMimeMessage *
459 		camel_folder_get_message_finish	(CamelFolder *folder,
460 						 GAsyncResult *result,
461 						 GError **error);
462 CamelMimeMessage *
463 		camel_folder_get_message_cached	(CamelFolder *folder,
464 						 const gchar *message_uid,
465 						 GCancellable *cancellable);
466 CamelFolderQuotaInfo *
467 		camel_folder_get_quota_info_sync
468 						(CamelFolder *folder,
469 						 GCancellable *cancellable,
470 						 GError **error);
471 void		camel_folder_get_quota_info	(CamelFolder *folder,
472 						 gint io_priority,
473 						 GCancellable *cancellable,
474 						 GAsyncReadyCallback callback,
475 						 gpointer user_data);
476 CamelFolderQuotaInfo *
477 		camel_folder_get_quota_info_finish
478 						(CamelFolder *folder,
479 						 GAsyncResult *result,
480 						 GError **error);
481 gboolean	camel_folder_purge_message_cache_sync
482 						(CamelFolder *folder,
483 						 gchar *start_uid,
484 						 gchar *end_uid,
485 						 GCancellable *cancellable,
486 						 GError **error);
487 void		camel_folder_purge_message_cache
488 						(CamelFolder *folder,
489 						 gchar *start_uid,
490 						 gchar *end_uid,
491 						 gint io_priority,
492 						 GCancellable *cancellable,
493 						 GAsyncReadyCallback callback,
494 						 gpointer user_data);
495 gboolean	camel_folder_purge_message_cache_finish
496 						(CamelFolder *folder,
497 						 GAsyncResult *result,
498 						 GError **error);
499 gboolean	camel_folder_refresh_info_sync	(CamelFolder *folder,
500 						 GCancellable *cancellable,
501 						 GError **error);
502 void		camel_folder_refresh_info	(CamelFolder *folder,
503 						 gint io_priority,
504 						 GCancellable *cancellable,
505 						 GAsyncReadyCallback callback,
506 						 gpointer user_data);
507 gboolean	camel_folder_refresh_info_finish
508 						(CamelFolder *folder,
509 						 GAsyncResult *result,
510 						 GError **error);
511 gboolean	camel_folder_synchronize_sync	(CamelFolder *folder,
512 						 gboolean expunge,
513 						 GCancellable *cancellable,
514 						 GError **error);
515 void		camel_folder_synchronize	(CamelFolder *folder,
516 						 gboolean expunge,
517 						 gint io_priority,
518 						 GCancellable *cancellable,
519 						 GAsyncReadyCallback callback,
520 						 gpointer user_data);
521 gboolean	camel_folder_synchronize_finish	(CamelFolder *folder,
522 						 GAsyncResult *result,
523 						 GError **error);
524 gboolean	camel_folder_synchronize_message_sync
525 						(CamelFolder *folder,
526 						 const gchar *message_uid,
527 						 GCancellable *cancellable,
528 						 GError **error);
529 void		camel_folder_synchronize_message
530 						(CamelFolder *folder,
531 						 const gchar *message_uid,
532 						 gint io_priority,
533 						 GCancellable *cancellable,
534 						 GAsyncReadyCallback callback,
535 						 gpointer user_data);
536 gboolean	camel_folder_synchronize_message_finish
537 						(CamelFolder *folder,
538 						 GAsyncResult *result,
539 						 GError **error);
540 gboolean	camel_folder_transfer_messages_to_sync
541 						(CamelFolder *source,
542 						 GPtrArray *message_uids,
543 						 CamelFolder *destination,
544 						 gboolean delete_originals,
545 						 GPtrArray **transferred_uids,
546 						 GCancellable *cancellable,
547 						 GError **error);
548 void		camel_folder_transfer_messages_to
549 						(CamelFolder *source,
550 						 GPtrArray *message_uids,
551 						 CamelFolder *destination,
552 						 gboolean delete_originals,
553 						 gint io_priority,
554 						 GCancellable *cancellable,
555 						 GAsyncReadyCallback callback,
556 						 gpointer user_data);
557 gboolean	camel_folder_transfer_messages_to_finish
558 						(CamelFolder *source,
559 						 GAsyncResult *result,
560 						 GPtrArray **transferred_uids,
561 						 GError **error);
562 void		camel_folder_prepare_content_refresh
563 						(CamelFolder *folder);
564 
565 /* update functions for change info */
566 GType		camel_folder_change_info_get_type
567 						(void) G_GNUC_CONST;
568 CamelFolderChangeInfo *
569 		camel_folder_change_info_new	(void);
570 CamelFolderChangeInfo *
571 		camel_folder_change_info_copy	(CamelFolderChangeInfo *src);
572 void		camel_folder_change_info_clear	(CamelFolderChangeInfo *info);
573 void		camel_folder_change_info_free	(CamelFolderChangeInfo *info);
574 gboolean	camel_folder_change_info_changed (CamelFolderChangeInfo *info);
575 GPtrArray *	camel_folder_change_info_get_added_uids
576 						(CamelFolderChangeInfo *info);
577 GPtrArray *	camel_folder_change_info_get_removed_uids
578 						(CamelFolderChangeInfo *info);
579 GPtrArray *	camel_folder_change_info_get_changed_uids
580 						(CamelFolderChangeInfo *info);
581 GPtrArray *	camel_folder_change_info_get_recent_uids
582 						(CamelFolderChangeInfo *info);
583 
584 /* for building diff's automatically */
585 void		camel_folder_change_info_add_source
586 						(CamelFolderChangeInfo *info,
587 						 const gchar *uid);
588 void		camel_folder_change_info_add_source_list
589 						(CamelFolderChangeInfo *info,
590 						 const GPtrArray *list);
591 void		camel_folder_change_info_add_update
592 						(CamelFolderChangeInfo *info,
593 						 const gchar *uid);
594 void		camel_folder_change_info_add_update_list
595 						(CamelFolderChangeInfo *info,
596 						 const GPtrArray *list);
597 void		camel_folder_change_info_build_diff
598 						(CamelFolderChangeInfo *info);
599 
600 /* for manipulating diff's directly */
601 void		camel_folder_change_info_cat	(CamelFolderChangeInfo *info,
602 						 CamelFolderChangeInfo *src);
603 void		camel_folder_change_info_add_uid (CamelFolderChangeInfo *info,
604 						 const gchar *uid);
605 void		camel_folder_change_info_remove_uid
606 						(CamelFolderChangeInfo *info,
607 						 const gchar *uid);
608 void		camel_folder_change_info_change_uid
609 						(CamelFolderChangeInfo *info,
610 						 const gchar *uid);
611 void		camel_folder_change_info_recent_uid
612 						(CamelFolderChangeInfo *info,
613 						 const gchar *uid);
614 
615 G_END_DECLS
616 
617 #endif /* CAMEL_FOLDER_H */
618