00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef FOLDER_H
00021 #define FOLDER_H
00022
00023 #include <clist.h>
00024 #include <chash.h>
00025
00026 #include "cntree.h"
00027 #include "libetpan.h"
00028
00029 #include "manager.h"
00030
00031 #include "folder-types.h"
00032 #include "mailbox-types.h"
00033
00034 typedef clist XePFoldersList;
00035
00036 typedef void (*XePFolderListCopyCb)(void *user_data);
00037
00039 typedef enum
00040 {
00041 XEP_FOLDER_TYPE_REAL,
00042 XEP_FOLDER_TYPE_VIRTUAL,
00043 XEP_FOLDER_TYPE_MAILBOX
00044 } XePFolderType;
00045
00055 struct XePFolder_s
00056 {
00057
00058
00059
00060
00061 char *id;
00062 char *path;
00065 XePFolderType type;
00066 long uid;
00067 XePManagerThread thread;
00068
00069 XePMailbox *mailbox;
00070 clist *rule_refs;
00072 struct mail_storage *ep_storage;
00073 struct mail_folder *ep_folder;
00074 struct mail_envelopes_tree *ep_tree;
00075 struct mail_envelopes_list *ep_list;
00077 clist *folder_refs;
00078 clist *condition_refs;
00079 uint32_t total;
00080 uint32_t unseen;
00081 uint32_t recent;
00082 };
00083
00084 clist *
00085 a_Folder_list_new(void);
00086
00087 clist *
00088 a_Folder_list_new_copy(clist *folders);
00089
00093 void
00094 a_Folder_list_free(clist *folders);
00095
00096 void
00097 a_Folder_list_free_copy(clist *folders);
00098
00109 void
00110 a_Folder_list_copy(clist *source,
00111 clist *target,
00112 XePMailbox *mailbox,
00113 XePFolderListCopyCb user_cb,
00114 void *user_data);
00115
00124 XePFolder *
00125 a_Folder_new(XePFolderType type);
00126
00136 XePFolder *
00137 a_Folder_new_copy(XePFolder *folder);
00138
00142 void
00143 a_Folder_free(XePFolder *folder);
00144
00148 void
00149 a_Folder_free_copy(XePFolder *folder);
00150
00160 void
00161 a_Folder_copy(XePFolder *source, XePFolder *target);
00162
00168 XePFolder *
00169 a_Folder_get_from_uid(long uid);
00170
00171 XePFolderType
00172 a_Folder_get_type(XePFolder *folder);
00173
00182 void
00183 a_Folder_update_id(XePFolder *folder);
00184
00188 const char *
00189 a_Folder_get_id(XePFolder *folder);
00190
00195 void
00196 a_Folder_set_path(XePFolder *folder, const char *path);
00197
00205 void
00206 a_Folder_set_path_p(XePFolder *folder, char *path);
00207
00208 const char *
00209 a_Folder_get_path(XePFolder *folder);
00210
00215 void
00216 a_Folder_set_mailbox(XePFolder *folder, XePMailbox *mailbox);
00217
00218 XePMailbox *
00219 a_Folder_get_mailbox(XePFolder *folder);
00220
00229 const char *
00230 a_Folder_get_short_name(XePFolder *folder);
00231
00232 void
00233 a_Folder_set_folder_refs(XePFolder *folder, clist *folder_refs);
00234
00235 const clist *
00236 a_Folder_get_folder_refs(XePFolder *folder);
00237
00238 void
00239 a_Folder_set_condition_refs(XePFolder *folder, clist *condition_refs);
00240
00241 const clist *
00242 a_Folder_get_condition_refs(XePFolder *folder);
00243
00244
00251 XePFolderRef *
00252 a_Folder_ref_new(void);
00253
00257 XePFolderRef *
00258 a_Folder_ref_new_copy(XePFolderRef *folder_ref);
00259
00262 void
00263 a_Folder_ref_free(XePFolderRef *folder_ref);
00264
00266 void
00267 a_Folder_ref_free_content(XePFolderRef *folder_ref);
00268
00271 clist *
00272 a_Folder_ref_list_new(void);
00273
00276 void
00277 a_Folder_ref_list_free(clist *folder_refs);
00278
00280 chash *
00281 a_Folder_ref_hash_new(void);
00282
00285 void
00286 a_Folder_ref_hash_free(void);
00287
00290 chash *
00291 a_Folder_ref_hash_get(void);
00292
00296 int
00297 a_Folder_register(XePFolder *folder);
00298
00302 int
00303 a_Folder_unregister(XePFolder *folder);
00304
00309 int
00310 a_Folder_register_list(clist *folders);
00311
00316 int
00317 a_Folder_unregister_list(clist *folders);
00318
00322 XePFolder *
00323 a_Folder_get_from_ref(const char *ref);
00324
00332 void
00333 a_Folder_update_rules_links(XePFoldersList *folders);
00334
00342 int
00343 a_Folder_ref_link_to_folder(XePFolderRef *folder_ref);
00344
00349 void
00350 a_Folder_ref_relink_all(void);
00351
00356 XePManagerThreadState
00357 a_Folder_get_thread_state(XePFolder *folder);
00358
00359 int
00360 a_Folder_is_locked(XePFolder *folder);
00361
00362 int
00363 a_Folder_connect(XePFolder *folder);
00364
00365 int
00366 a_Folder_disconnect(XePFolder *folder);
00367
00368 int
00369 a_Folder_noop(XePFolder *folder);
00370
00371 int
00372 a_Folder_expunge(XePFolder *folder);
00373
00379 int
00380 a_Folder_sync(XePFolder *folder);
00381
00384 int
00385 a_Folder_check(XePFolder *folder);
00386
00393 int
00394 a_Folder_append(XePFolder *folder, const char *data, size_t size);
00395
00396 int
00397 a_Folder_mailbox_connect(XePFolder *folder);
00398
00399 int
00400 a_Folder_mailbox_disconnect(XePFolder *folder);
00401
00402 int
00403 a_Folder_mailbox_list(XePFolder *folder, struct mail_list **mb_list);
00404
00405 int
00406 a_Folder_mailbox_lsub(XePFolder *folder, struct mail_list **mb_list);
00407
00408
00417 void
00418 a_Folder_append_file_async(XePFolder *folder, const char *filename,
00419 XePManagerMsgCb user_cb, void *user_data);
00420
00421 void
00422 a_Folder_disconnect_async(XePFolder *folder,
00423 XePManagerMsgCb user_cb, void *user_data);
00424
00429 uint32_t
00430 a_Folder_tree_get_total_count(XePFolder *folder);
00431
00432 void
00433 a_Folder_messages_change_flags_async(XePFolder *folder,
00434 carray *messages,
00435 XePManagerMsgCb user_cb,
00436 void *user_data);
00437 #endif