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