Lines Matching refs:mail
11 #include "mail-cache.h"
12 #include "mail-storage-private.h"
17 struct mail *mail_alloc(struct mailbox_transaction_context *t,
21 struct mail *mail;
26 mail = t->box->v.mail_alloc(t, wanted_fields, wanted_headers);
27 hook_mail_allocated(mail);
30 return mail;
33 void mail_free(struct mail **mail)
35 struct mail_private *p = (struct mail_private *)*mail;
37 p->v.free(*mail);
38 *mail = NULL;
41 void mail_set_seq(struct mail *mail, uint32_t seq)
43 struct mail_private *p = (struct mail_private *)mail;
45 p->v.set_seq(mail, seq, FALSE);
48 void mail_set_seq_saving(struct mail *mail, uint32_t seq)
50 struct mail_private *p = (struct mail_private *)mail;
52 p->v.set_seq(mail, seq, TRUE);
55 bool mail_set_uid(struct mail *mail, uint32_t uid)
57 struct mail_private *p = (struct mail_private *)mail;
59 return p->v.set_uid(mail, uid);
62 bool mail_prefetch(struct mail *mail)
64 struct mail_private *p = (struct mail_private *)mail;
68 ret = p->v.prefetch(mail);
73 void mail_add_temp_wanted_fields(struct mail *mail,
77 struct mail_private *p = (struct mail_private *)mail;
79 i_assert(headers == NULL || headers->box == mail->box);
81 p->v.add_temp_wanted_fields(mail, fields, headers);
84 enum mail_flags mail_get_flags(struct mail *mail)
86 struct mail_private *p = (struct mail_private *)mail;
88 return p->v.get_flags(mail);
91 uint64_t mail_get_modseq(struct mail *mail)
93 struct mail_private *p = (struct mail_private *)mail;
95 return p->v.get_modseq(mail);
98 uint64_t mail_get_pvt_modseq(struct mail *mail)
100 struct mail_private *p = (struct mail_private *)mail;
102 return p->v.get_pvt_modseq(mail);
105 const char *const *mail_get_keywords(struct mail *mail)
107 struct mail_private *p = (struct mail_private *)mail;
109 return p->v.get_keywords(mail);
112 const ARRAY_TYPE(keyword_indexes) *mail_get_keyword_indexes(struct mail *mail)
114 struct mail_private *p = (struct mail_private *)mail;
116 return p->v.get_keyword_indexes(mail);
119 int mail_get_parts(struct mail *mail, struct message_part **parts_r)
121 struct mail_private *p = (struct mail_private *)mail;
125 ret = p->v.get_parts(mail, parts_r);
130 int mail_get_date(struct mail *mail, time_t *date_r, int *timezone_r)
132 struct mail_private *p = (struct mail_private *)mail;
136 ret = p->v.get_date(mail, date_r, timezone_r);
141 int mail_get_received_date(struct mail *mail, time_t *date_r)
143 struct mail_private *p = (struct mail_private *)mail;
147 ret = p->v.get_received_date(mail, date_r);
152 int mail_get_save_date(struct mail *mail, time_t *date_r)
154 struct mail_private *p = (struct mail_private *)mail;
158 ret = p->v.get_save_date(mail, date_r);
163 int mail_get_virtual_size(struct mail *mail, uoff_t *size_r)
165 struct mail_private *p = (struct mail_private *)mail;
169 ret = p->v.get_virtual_size(mail, size_r);
174 int mail_get_physical_size(struct mail *mail, uoff_t *size_r)
176 struct mail_private *p = (struct mail_private *)mail;
180 ret = p->v.get_physical_size(mail, size_r);
185 int mail_get_first_header(struct mail *mail, const char *field,
188 struct mail_private *p = (struct mail_private *)mail;
192 ret = p->v.get_first_header(mail, field, FALSE, value_r);
197 int mail_get_first_header_utf8(struct mail *mail, const char *field,
200 struct mail_private *p = (struct mail_private *)mail;
204 ret = p->v.get_first_header(mail, field, TRUE, value_r);
209 int mail_get_headers(struct mail *mail, const char *field,
212 struct mail_private *p = (struct mail_private *)mail;
216 ret = p->v.get_headers(mail, field, FALSE, value_r);
221 int mail_get_headers_utf8(struct mail *mail, const char *field,
224 struct mail_private *p = (struct mail_private *)mail;
228 ret = p->v.get_headers(mail, field, TRUE, value_r);
233 int mail_get_header_stream(struct mail *mail,
237 struct mail_private *p = (struct mail_private *)mail;
241 i_assert(headers->box == mail->box);
244 ret = p->v.get_header_stream(mail, headers, stream_r);
249 void mail_set_aborted(struct mail *mail)
251 mail_storage_set_error(mail->box->storage, MAIL_ERROR_LOOKUP_ABORTED,
255 int mail_get_stream(struct mail *mail, struct message_size *hdr_size,
258 return mail_get_stream_because(mail, hdr_size, body_size,
259 "mail stream", stream_r);
262 int mail_get_stream_because(struct mail *mail, struct message_size *hdr_size,
266 struct mail_private *p = (struct mail_private *)mail;
269 if (mail->lookup_abort != MAIL_LOOKUP_ABORT_NEVER) {
270 mail_set_aborted(mail);
275 ret = p->v.get_stream(mail, TRUE, hdr_size, body_size, stream_r);
281 int mail_get_hdr_stream(struct mail *mail, struct message_size *hdr_size,
284 return mail_get_hdr_stream_because(mail, hdr_size, "header stream", stream_r);
287 int mail_get_hdr_stream_because(struct mail *mail,
291 struct mail_private *p = (struct mail_private *)mail;
294 if (mail->lookup_abort != MAIL_LOOKUP_ABORT_NEVER) {
295 mail_set_aborted(mail);
300 ret = p->v.get_stream(mail, FALSE, hdr_size, NULL, stream_r);
306 int mail_get_binary_stream(struct mail *mail, const struct message_part *part,
310 struct mail_private *p = (struct mail_private *)mail;
313 if (mail->lookup_abort != MAIL_LOOKUP_ABORT_NEVER) {
314 mail_set_aborted(mail);
318 ret = p->v.get_binary_stream(mail, part, include_hdr,
324 int mail_get_binary_size(struct mail *mail, const struct message_part *part,
328 struct mail_private *p = (struct mail_private *)mail;
333 ret = p->v.get_binary_stream(mail, part, include_hdr,
339 int mail_get_special(struct mail *mail, enum mail_fetch_field field,
342 struct mail_private *p = (struct mail_private *)mail;
344 if (p->v.get_special(mail, field, value_r) < 0)
350 int mail_get_backend_mail(struct mail *mail, struct mail **real_mail_r)
352 struct mail_private *p = (struct mail_private *)mail;
353 return p->v.get_backend_mail(mail, real_mail_r);
356 void mail_update_flags(struct mail *mail, enum modify_type modify_type,
359 struct mail_private *p = (struct mail_private *)mail;
361 p->v.update_flags(mail, modify_type, flags);
364 void mail_update_keywords(struct mail *mail, enum modify_type modify_type,
367 struct mail_private *p = (struct mail_private *)mail;
369 p->v.update_keywords(mail, modify_type, keywords);
372 void mail_update_modseq(struct mail *mail, uint64_t min_modseq)
374 struct mail_private *p = (struct mail_private *)mail;
376 p->v.update_modseq(mail, min_modseq);
379 void mail_update_pvt_modseq(struct mail *mail, uint64_t min_pvt_modseq)
381 struct mail_private *p = (struct mail_private *)mail;
383 p->v.update_pvt_modseq(mail, min_pvt_modseq);
386 void mail_update_pop3_uidl(struct mail *mail, const char *uidl)
388 struct mail_private *p = (struct mail_private *)mail;
391 p->v.update_pop3_uidl(mail, uidl);
394 void mail_expunge(struct mail *mail)
396 struct mail_private *p = (struct mail_private *)mail;
399 p->v.expunge(mail);
403 void mail_autoexpunge(struct mail *mail)
405 struct mail_private *p = (struct mail_private *)mail;
407 mail_expunge(mail);
411 void mail_set_expunged(struct mail *mail)
413 mail_storage_set_error(mail->box->storage, MAIL_ERROR_EXPUNGED,
415 mail->expunged = TRUE;
418 void mail_precache(struct mail *mail)
420 struct mail_private *p = (struct mail_private *)mail;
423 p->v.precache(mail);
427 void mail_set_cache_corrupted(struct mail *mail,
431 struct mail_private *p = (struct mail_private *)mail;
432 p->v.set_cache_corrupted(mail, field, reason);
467 bool mail_has_attachment_keywords(struct mail *mail)
469 const char *const *kw = mail_get_keywords(mail);
474 void mail_set_attachment_keywords(struct mail *mail)
477 mail_storage_get_settings(mailbox_get_storage(mail->box));
497 if (mail_get_parts(mail, &parts) < 0) {
498 mail_set_critical(mail, "Failed to add attachment keywords: "
500 mail_storage_get_last_internal_error(mail->box->storage, NULL));
502 } else if (mailbox_keywords_create(mail->box, keyword_has_attachment, &kw_has) < 0 ||
503 mailbox_keywords_create(mail->box, keyword_has_no_attachment, &kw_has_not) < 0) {
506 mailbox_get_vname(mail->box),
507 mail_storage_get_last_error(mail->box->storage, NULL));
513 mail_update_keywords(mail, MODIFY_REMOVE, has_attachment ? kw_has_not : kw_has);
514 mail_update_keywords(mail, MODIFY_ADD, has_attachment ? kw_has : kw_has_not);