1 #ifndef IMAPC_MAIL_H
2 #define IMAPC_MAIL_H
3 
4 #include "index-mail.h"
5 
6 struct imap_arg;
7 struct imapc_untagged_reply;
8 struct imapc_mailbox;
9 
10 struct imapc_mail {
11 	struct index_mail imail;
12 
13 	enum mail_fetch_field fetching_fields;
14 	const char *const *fetching_headers;
15 	unsigned int fetch_count;
16 	bool fetch_sent;
17 	const char *last_fetch_reply;
18 
19 	int fd;
20 	buffer_t *body;
21 	bool header_fetched;
22 	bool body_fetched;
23 	bool header_list_fetched;
24 	bool fetch_ignore_if_missing;
25 	bool fetch_failed;
26 };
27 
28 #define IMAPC_MAIL(s)	container_of(s, struct imapc_mail, imail.mail.mail)
29 
30 extern struct mail_vfuncs imapc_mail_vfuncs;
31 
32 struct mail *
33 imapc_mail_alloc(struct mailbox_transaction_context *t,
34 		 enum mail_fetch_field wanted_fields,
35 		 struct mailbox_header_lookup_ctx *wanted_headers);
36 int imapc_mail_fetch(struct mail *mail, enum mail_fetch_field fields,
37 		     const char *const *headers);
38 void imapc_mail_try_init_stream_from_cache(struct imapc_mail *mail);
39 bool imapc_mail_prefetch(struct mail *mail);
40 void imapc_mail_fetch_flush(struct imapc_mailbox *mbox);
41 void imapc_mail_init_stream(struct imapc_mail *mail);
42 bool imapc_mail_has_headers_in_cache(struct index_mail *mail,
43 				     struct mailbox_header_lookup_ctx *headers);
44 
45 void imapc_mail_fetch_update(struct imapc_mail *mail,
46 			     const struct imapc_untagged_reply *reply,
47 			     const struct imap_arg *args);
48 void imapc_mail_update_access_parts(struct index_mail *mail);
49 void imapc_mail_command_flush(struct imapc_mailbox *mbox);
50 
51 #endif
52