static void index_mail_init_data(struct index_mail *mail);
static int index_mail_parse_body(struct index_mail *mail,
enum index_cache_field field);
+static int index_mail_write_body_snippet(struct index_mail *mail);
int index_mail_cache_lookup_field(struct index_mail *mail, buffer_t *buf,
unsigned int field_idx)
}
}
-static void index_mail_body_parsed_cache_body_snippet(struct index_mail *mail)
+static void index_mail_save_finish_make_snippet(struct index_mail *mail)
{
+ if (mail->data.save_body_snippet) {
+ if (index_mail_write_body_snippet(mail) < 0)
+ return;
+ mail->data.save_body_snippet = FALSE;
+ }
+
if (mail->data.body_snippet != NULL &&
index_mail_want_cache(mail, MAIL_CACHE_BODY_SNIPPET)) {
index_mail_cache_add(mail, MAIL_CACHE_BODY_SNIPPET,
mail->data.save_bodystructure_body = FALSE;
i_assert(mail->data.parts != NULL);
}
- if (mail->data.save_body_snippet) {
- if (index_mail_write_body_snippet(mail) < 0)
- return -1;
- mail->data.save_body_snippet = FALSE;
- }
if (mail->data.no_caching) {
/* if we're here because we aborted parsing, don't get any
index_mail_body_parsed_cache_flags(mail);
index_mail_body_parsed_cache_message_parts(mail);
index_mail_body_parsed_cache_bodystructure(mail, field);
- index_mail_body_parsed_cache_body_snippet(mail);
index_mail_cache_sizes(mail);
index_mail_cache_dates(mail);
return 0;
}
break;
case MAIL_CACHE_BODY_SNIPPET:
+ if (data->body_snippet == NULL) {
+ if (index_mail_write_body_snippet(mail) < 0)
+ return -1;
+
+ if (index_mail_want_cache(mail, MAIL_CACHE_BODY_SNIPPET))
+ index_mail_cache_add(mail, MAIL_CACHE_BODY_SNIPPET,
+ mail->data.body_snippet,
+ strlen(mail->data.body_snippet) + 1);
+ }
i_assert(data->body_snippet != NULL &&
data->body_snippet[0] != '\0');
break;
{
struct index_mail *imail = (struct index_mail *)ctx->dest_mail;
+ index_mail_save_finish_make_snippet(imail);
+
if (ctx->data.from_envelope != NULL &&
imail->data.from_envelope == NULL) {
imail->data.from_envelope =