1 /* 2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client 3 * Copyright (C) 2005-2012 DINH Viet Hoa and the Claws Mail team 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 #ifndef IMAP_THREAD_H 21 22 #define IMAP_THREAD_H 23 24 #include <libetpan/libetpan.h> 25 #include "folder.h" 26 27 #define IMAP_SET_MAX_COUNT 500 28 29 typedef enum 30 { 31 IMAP_FLAG_SEEN = 1 << 0, 32 IMAP_FLAG_ANSWERED = 1 << 1, 33 IMAP_FLAG_FLAGGED = 1 << 2, 34 IMAP_FLAG_DELETED = 1 << 3, 35 IMAP_FLAG_DRAFT = 1 << 4, 36 IMAP_FLAG_FORWARDED = 1 << 5, 37 IMAP_FLAG_SPAM = 1 << 6, 38 IMAP_FLAG_HAM = 1 << 7 39 } IMAPFlags; 40 41 void imap_main_set_timeout(int sec); 42 void imap_main_init(gboolean skip_ssl_cert_check); 43 void imap_main_done(gboolean have_connectivity); 44 45 void imap_init(Folder * folder); 46 void imap_done(Folder * folder); 47 48 int imap_threaded_connect(Folder * folder, const char * server, int port, ProxyInfo *proxy_info); 49 int imap_threaded_connect_ssl(Folder * folder, const char * server, int port, ProxyInfo *proxy_info); 50 int imap_threaded_capability(Folder *folder, struct mailimap_capability_data ** caps); 51 52 #ifndef G_OS_WIN32 53 int imap_threaded_connect_cmd(Folder * folder, const char * command, 54 const char * server, int port); 55 #endif 56 void imap_threaded_disconnect(Folder * folder); 57 58 int imap_threaded_list(Folder * folder, const char * base, 59 const char * wildcard, 60 clist ** p_result); 61 int imap_threaded_lsub(Folder * folder, const char * base, 62 const char * wildcard, 63 clist ** p_result); 64 int imap_threaded_login(Folder * folder, 65 const char * login, const char * password, 66 const char * type); 67 int imap_threaded_status(Folder * folder, const char * mb, 68 struct mailimap_mailbox_data_status ** data_status, 69 guint mask); 70 int imap_threaded_close(Folder * folder); 71 72 int imap_threaded_noop(Folder * folder, unsigned int * p_exists, 73 unsigned int *p_recent, 74 unsigned int *p_expunge, 75 unsigned int *p_unseen, 76 unsigned int *p_uidnext, 77 unsigned int *p_uidval); 78 int imap_threaded_starttls(Folder * folder, const gchar *host, int port); 79 int imap_threaded_create(Folder * folder, const char * mb); 80 int imap_threaded_rename(Folder * folder, 81 const char * mb, const char * new_name); 82 int imap_threaded_delete(Folder * folder, const char * mb); 83 int imap_threaded_select(Folder * folder, const char * mb, 84 gint * exists, gint * recent, gint * unseen, 85 guint32 * uid_validity, gint * can_create_flags, 86 GSList **ok_flags); 87 int imap_threaded_examine(Folder * folder, const char * mb, 88 gint * exists, gint * recent, gint * unseen, 89 guint32 * uid_validity); 90 int imap_threaded_subscribe(Folder * folder, const char * mb, 91 gboolean subscribe); 92 93 enum { 94 IMAP_SEARCH_TYPE_SIMPLE, 95 IMAP_SEARCH_TYPE_SEEN, 96 IMAP_SEARCH_TYPE_UNSEEN, 97 IMAP_SEARCH_TYPE_ANSWERED, 98 IMAP_SEARCH_TYPE_FLAGGED, 99 IMAP_SEARCH_TYPE_DELETED, 100 IMAP_SEARCH_TYPE_FORWARDED, 101 IMAP_SEARCH_TYPE_SPAM, 102 103 IMAP_SEARCH_TYPE_KEYED, 104 }; 105 106 typedef struct mailimap_search_key IMAPSearchKey; 107 108 enum { 109 IMAP_SEARCH_CRITERIA_ALL, 110 IMAP_SEARCH_CRITERIA_READ, 111 IMAP_SEARCH_CRITERIA_UNREAD, 112 IMAP_SEARCH_CRITERIA_NEW, 113 IMAP_SEARCH_CRITERIA_MARKED, 114 IMAP_SEARCH_CRITERIA_DELETED, 115 IMAP_SEARCH_CRITERIA_REPLIED, 116 IMAP_SEARCH_CRITERIA_TAG, 117 IMAP_SEARCH_CRITERIA_SUBJECT, 118 IMAP_SEARCH_CRITERIA_FROM, 119 IMAP_SEARCH_CRITERIA_TO, 120 IMAP_SEARCH_CRITERIA_CC, 121 IMAP_SEARCH_CRITERIA_AGE_GREATER, 122 IMAP_SEARCH_CRITERIA_AGE_LOWER, 123 IMAP_SEARCH_CRITERIA_BODY, 124 IMAP_SEARCH_CRITERIA_MESSAGE, 125 IMAP_SEARCH_CRITERIA_HEADER, 126 IMAP_SEARCH_CRITERIA_SIZE_GREATER, 127 IMAP_SEARCH_CRITERIA_SIZE_SMALLER, 128 }; 129 130 IMAPSearchKey* imap_search_new(gint criteria, 131 const gchar *header, 132 const gchar *expr, 133 int value); 134 IMAPSearchKey* imap_search_not(IMAPSearchKey* key); 135 IMAPSearchKey* imap_search_or(IMAPSearchKey* l, IMAPSearchKey* r); 136 IMAPSearchKey* imap_search_and(IMAPSearchKey* l, IMAPSearchKey* r); 137 void imap_search_free(IMAPSearchKey* search); 138 139 int imap_threaded_search(Folder * folder, int search_type, IMAPSearchKey* key, 140 const char *charset, struct mailimap_set * set, clist ** result); 141 142 int imap_threaded_fetch_uid(Folder * folder, uint32_t first_index, 143 carray ** result); 144 145 void imap_fetch_uid_list_free(carray * uid_list); 146 147 int imap_threaded_fetch_uid_flags(Folder * folder, uint32_t first_index, 148 carray ** fetch_result); 149 150 void imap_fetch_uid_flags_list_free(carray * uid_flags_list); 151 152 int imap_threaded_fetch_content(Folder * folder, uint32_t msg_index, 153 int with_body, 154 const char * filename); 155 156 struct imap_fetch_env_info { 157 uint32_t uid; 158 char * headers; 159 uint32_t size; 160 int flags; 161 }; 162 163 int imap_threaded_fetch_env(Folder * folder, struct mailimap_set * set, 164 carray ** p_env_list); 165 166 void imap_fetch_env_free(carray * env_list); 167 168 int imap_threaded_append(Folder * folder, const char * mailbox, 169 const char * filename, 170 struct mailimap_flag_list * flag_list, 171 int *uid); 172 173 int imap_threaded_expunge(Folder * folder); 174 175 int imap_threaded_copy(Folder * folder, struct mailimap_set * set, 176 const char * mb, struct mailimap_set **source, 177 struct mailimap_set **dest); 178 179 int imap_threaded_store(Folder * folder, struct mailimap_set * set, 180 struct mailimap_store_att_flags * store_att_flags); 181 182 void imap_threaded_cancel(Folder * folder); 183 184 #endif 185