From 11f49ebea2ff5cd1921519b4366e06b4c6fc1f8e Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 25 Jun 2003 01:53:54 +0300 Subject: [PATCH] get_date() wasn't optimized by using cached ENVELOPE. --HG-- branch : HEAD --- src/lib-storage/index/index-mail.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index fca46806d6..d3b1b53932 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -666,7 +666,7 @@ void index_mail_init(struct index_mailbox *ibox, struct index_mail *mail, int index_mail_next(struct index_mail *mail, struct mail_index_record *rec) { struct index_mail_data *data = &mail->data; - int ret, open_mail, parse_header; + int ret, open_mail, parse_header, envelope_headers; t_push(); @@ -705,8 +705,7 @@ int index_mail_next(struct index_mail *mail, struct mail_index_record *rec) if ((mail->wanted_fields & MAIL_FETCH_MESSAGE_PARTS) && data->parts == NULL) parse_header = TRUE; - else if ((mail->wanted_fields & (MAIL_FETCH_DATE | - MAIL_FETCH_IMAP_ENVELOPE)) && + else if ((mail->wanted_fields & MAIL_FETCH_IMAP_ENVELOPE) && data->envelope == NULL) parse_header = TRUE; else if ((mail->wanted_fields & MAIL_FETCH_IMAP_BODYSTRUCTURE) && @@ -728,10 +727,10 @@ int index_mail_next(struct index_mail *mail, struct mail_index_record *rec) else if ((mail->wanted_fields & MAIL_FETCH_SIZE) && data->size == 0) open_mail = TRUE; + envelope_headers = FALSE; if (!parse_header && mail->wanted_headers != NULL) { const char *const *tmp; enum imap_envelope_field env_field; - int envelope_headers = FALSE; for (tmp = mail->wanted_headers; *tmp != NULL; tmp++) { if (imap_envelope_get_field(*tmp, &env_field)) @@ -742,14 +741,17 @@ int index_mail_next(struct index_mail *mail, struct mail_index_record *rec) break; } } + } - if (!parse_header && envelope_headers && - data->envelope == NULL) { - data->envelope = - get_cached_field(mail, DATA_FIELD_ENVELOPE); - if (data->envelope == NULL) - parse_header = TRUE; - } + if (!parse_header && (mail->wanted_fields & MAIL_FETCH_DATE)) + envelope_headers = TRUE; + + if (!parse_header && envelope_headers && + data->envelope == NULL) { + data->envelope = + get_cached_field(mail, DATA_FIELD_ENVELOPE); + if (data->envelope == NULL) + parse_header = TRUE; } if (open_mail || parse_header) { -- 2.47.3