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