bool want_attachment_kw =
index_mail_want_attachment_keywords_on_fetch(mail);
- if (want_attachment_kw)
+ if (want_attachment_kw) {
data->access_part |= PARSE_HDR | PARSE_BODY;
+ data->access_reason_code = "mail:attachment_keywords";
+ }
if (hdr_size != NULL || body_size != NULL)
(void)get_cached_msgpart_sizes(mail);
"hdr.message-id");
if (cache_field_hdr == UINT_MAX ||
mail_cache_field_exists(_mail->transaction->cache_view,
- _mail->seq, cache_field_hdr) <= 0)
+ _mail->seq, cache_field_hdr) <= 0) {
+ mail->data.access_reason_code = "mail:imap_envelope";
mail->data.access_part |= PARSE_HDR;
+ }
mail->data.save_envelope = TRUE;
}
if (mail_cache_field_exists(cache_view, _mail->seq,
cache_field) <= 0) {
+ data->access_reason_code = "mail:mime_parts";
data->access_part |= PARSE_HDR | PARSE_BODY;
data->save_message_parts = TRUE;
}
cache_field1) <= 0 &&
mail_cache_field_exists(cache_view, _mail->seq,
cache_field2) <= 0) {
+ data->access_reason_code = "mail:imap_bodystructure";
data->access_part |= PARSE_HDR | PARSE_BODY;
data->save_bodystructure_header = TRUE;
data->save_bodystructure_body = TRUE;
if (mail_cache_field_exists(cache_view, _mail->seq,
cache_field) <= 0) {
+ data->access_reason_code = "mail:imap_bodystructure";
data->access_part |= PARSE_HDR | PARSE_BODY;
data->save_bodystructure_header = TRUE;
data->save_bodystructure_body = TRUE;
if (mail_cache_field_exists(cache_view, _mail->seq,
cache_field) <= 0) {
+ data->access_reason_code = "mail:date";
data->access_part |= PARSE_HDR;
data->save_sent_date = TRUE;
}
if (mail_cache_field_exists(cache_view, _mail->seq,
cache_field) <= 0) {
+ data->access_reason_code = "mail:snippet";
data->access_part |= PARSE_HDR | PARSE_BODY;
data->save_body_snippet = TRUE;
}
}
if ((data->wanted_fields & (MAIL_FETCH_STREAM_HEADER |
MAIL_FETCH_STREAM_BODY)) != 0) {
+ /* Clear reason_code if set. The mail is going to be read
+ in any case, so the previous reason for deciding to open
+ the mail won't matter. */
+ data->access_reason_code = NULL;
if ((data->wanted_fields & MAIL_FETCH_STREAM_HEADER) != 0)
data->access_part |= READ_HDR;
if ((data->wanted_fields & MAIL_FETCH_STREAM_BODY) != 0)
int index_mail_opened(struct mail *mail,
struct istream **stream ATTR_UNUSED)
{
+ struct index_mail *imail =
+ container_of(mail, struct index_mail, mail.mail);
+ struct event_reason *reason = NULL;
+
+ if (imail->data.access_reason_code != NULL)
+ reason = event_reason_begin(imail->data.access_reason_code);
mail_opened_event(mail);
+ event_reason_end(&reason);
return 0;
}