dovecot-2.2: imapc: When sending FETCH, always request also miss...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Nov 16 20:10:36 EET 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/0c9b17f7cadf
changeset: 16962:0c9b17f7cadf
user: Timo Sirainen <tss at iki.fi>
date: Sat Nov 16 20:10:27 2013 +0200
description:
imapc: When sending FETCH, always request also missing wanted_fields.
This avoids sending multiple FETCH commands when prefetch hadn't already
fetched everything.
diffstat:
src/lib-storage/index/imapc/imapc-mail-fetch.c | 30 ++++++++++++++++++-------
1 files changed, 21 insertions(+), 9 deletions(-)
diffs (58 lines):
diff -r 4597e6572ba1 -r 0c9b17f7cadf src/lib-storage/index/imapc/imapc-mail-fetch.c
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c Sat Nov 16 20:09:19 2013 +0200
+++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c Sat Nov 16 20:10:27 2013 +0200
@@ -207,19 +207,14 @@
imapc_mail_init_stream(mail, TRUE);
}
-bool imapc_mail_prefetch(struct mail *_mail)
+static enum mail_fetch_field
+imapc_mail_get_wanted_fetch_fields(struct imapc_mail *mail)
{
- struct imapc_mail *mail = (struct imapc_mail *)_mail;
- struct imapc_mailbox *mbox = (struct imapc_mailbox *)_mail->box;
+ struct imapc_mailbox *mbox =
+ (struct imapc_mailbox *)mail->imail.mail.mail.box;
struct index_mail_data *data = &mail->imail.data;
enum mail_fetch_field fields = 0;
- if (mbox->prev_mail_cache.uid == _mail->uid)
- imapc_mail_cache_get(mail, &mbox->prev_mail_cache);
-
- /* try to get as much from cache as possible */
- imapc_mail_update_access_parts(&mail->imail);
-
if ((data->wanted_fields & MAIL_FETCH_RECEIVED_DATE) != 0 &&
data->received_date == (time_t)-1)
fields |= MAIL_FETCH_RECEIVED_DATE;
@@ -240,6 +235,22 @@
else
fields |= MAIL_FETCH_STREAM_HEADER;
}
+ return fields;
+}
+
+bool imapc_mail_prefetch(struct mail *_mail)
+{
+ struct imapc_mail *mail = (struct imapc_mail *)_mail;
+ struct imapc_mailbox *mbox = (struct imapc_mailbox *)_mail->box;
+ struct index_mail_data *data = &mail->imail.data;
+ enum mail_fetch_field fields;
+
+ if (mbox->prev_mail_cache.uid == _mail->uid)
+ imapc_mail_cache_get(mail, &mbox->prev_mail_cache);
+ /* try to get as much from cache as possible */
+ imapc_mail_update_access_parts(&mail->imail);
+
+ fields = imapc_mail_get_wanted_fetch_fields(mail);
if (fields != 0) T_BEGIN {
(void)imapc_mail_send_fetch(_mail, fields,
data->wanted_headers == NULL ? NULL :
@@ -292,6 +303,7 @@
return -1;
}
+ fields |= imapc_mail_get_wanted_fetch_fields(imail);
T_BEGIN {
ret = imapc_mail_send_fetch(_mail, fields, headers);
} T_END;
More information about the dovecot-cvs
mailing list