mail->data.save_envelope = TRUE;
}
-static void index_mail_update_access_parts(struct index_mail *mail)
+void index_mail_update_access_parts(struct mail *_mail)
{
- struct mail *_mail = &mail->mail.mail;
+ struct index_mail *mail = (struct index_mail *)_mail;
struct index_mail_data *data = &mail->data;
const struct mail_cache_field *cache_fields = mail->ibox->cache_fields;
struct mail_cache_view *cache_view = _mail->transaction->cache_view;
return;
}
- index_mail_update_access_parts(mail);
+ if (!mail->search_mail)
+ index_mail_update_access_parts(_mail);
+ else {
+ /* searching code will call the index_mail_update_access_parts()
+ after we know the mail is actually wanted to be fetched. */
+ }
mail->data.initialized = TRUE;
}
mailbox_header_lookup_init(_mail->box,
array_idx(&names, 0));
}
- index_mail_update_access_parts(mail);
+ index_mail_update_access_parts(_mail);
}
void index_mail_set_uid_cache_updates(struct mail *_mail, bool set)
void index_mail_add_temp_wanted_fields(struct mail *mail,
enum mail_fetch_field fields,
struct mailbox_header_lookup_ctx *headers);
+void index_mail_update_access_parts(struct mail *mail);
void index_mail_close(struct mail *mail);
void index_mail_close_streams(struct index_mail *mail);
void index_mail_free(struct mail *mail);
mail_search_args_reset(_ctx->args->args, FALSE);
if (match != 0) {
+ /* either matched or result is still unknown.
+ anyway we're far enough now that we probably want
+ to update the access_parts. the only problem here is
+ if searching would want fewer access_parts than the
+ fetching part, but that's probably not a big problem
+ usually. */
+ index_mail_update_access_parts(mail);
ret = 1;
break;
}
mailp = array_idx(&ctx->mails, 0);
mail_set_seq(*mailp, seq);
+ index_mail_update_access_parts(*mailp);
*mail_r = *mailp;
return TRUE;
}