str_printfa(str, "UID FETCH %u (", _mail->uid);
if ((fields & MAIL_FETCH_RECEIVED_DATE) != 0)
str_append(str, "INTERNALDATE ");
- if ((fields & MAIL_FETCH_PHYSICAL_SIZE) != 0)
+ if ((fields & (MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE)) != 0)
str_append(str, "RFC822.SIZE ");
if ((fields & MAIL_FETCH_GUID) != 0) {
str_append(str, mbox->guid_fetch_field_name);
if ((data->wanted_fields & MAIL_FETCH_SAVE_DATE) != 0 &&
data->save_date == (time_t)-1 && data->received_date == (time_t)-1)
fields |= MAIL_FETCH_RECEIVED_DATE;
- if ((data->wanted_fields & MAIL_FETCH_PHYSICAL_SIZE) != 0 &&
+ if ((data->wanted_fields & (MAIL_FETCH_PHYSICAL_SIZE |
+ MAIL_FETCH_VIRTUAL_SIZE)) != 0 &&
data->physical_size == (uoff_t)-1 &&
IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_RFC822_SIZE))
- fields |= MAIL_FETCH_PHYSICAL_SIZE;
+ fields |= MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE;
if ((data->wanted_fields & MAIL_FETCH_GUID) != 0 &&
data->guid == NULL && mbox->guid_fetch_field_name != NULL)
fields |= MAIL_FETCH_GUID;
return FALSE;
fields &= ~MAIL_FETCH_RECEIVED_DATE;
}
- if ((fields & MAIL_FETCH_PHYSICAL_SIZE) != 0) {
+ if ((fields & (MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE)) != 0) {
if (imail->imail.data.physical_size == (uoff_t)-1)
return FALSE;
- fields &= ~MAIL_FETCH_PHYSICAL_SIZE;
+ fields &= ~(MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE);
}
if ((fields & MAIL_FETCH_GUID) != 0) {
if (imail->imail.data.guid == NULL)
uoff_t old_offset;
int ret;
- if (data->physical_size == (uoff_t)-1) {
+ if (data->physical_size == (uoff_t)-1)
(void)index_mail_get_physical_size(_mail, size_r);
- if (data->physical_size != (uoff_t)-1) {
- *size_r = data->physical_size;
- return 0;
- }
+ if (data->physical_size != (uoff_t)-1) {
+ *size_r = data->physical_size;
+ return 0;
}
if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_RFC822_SIZE) &&
return 0;
}
+static int imapc_mail_get_virtual_size(struct mail *_mail, uoff_t *size_r)
+{
+ struct index_mail *mail = (struct index_mail *)_mail;
+ struct index_mail_data *data = &mail->data;
+
+ if (imapc_mail_get_physical_size(_mail, size_r) < 0)
+ return -1;
+ data->virtual_size = data->physical_size;
+ return 0;
+}
+
static int
imapc_mail_get_header_stream(struct mail *_mail,
struct mailbox_header_lookup_ctx *headers,
data->save_date = data->received_date;
}
}
- if ((data->wanted_fields & MAIL_FETCH_PHYSICAL_SIZE) != 0) {
+ if ((data->wanted_fields & (MAIL_FETCH_PHYSICAL_SIZE |
+ MAIL_FETCH_VIRTUAL_SIZE)) != 0) {
if (index_mail_get_physical_size(_mail, &size) < 0 &&
!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_RFC822_SIZE))
data->access_part |= READ_HDR | READ_BODY;
index_mail_get_date,
imapc_mail_get_received_date,
imapc_mail_get_save_date,
- imapc_mail_get_physical_size,
+ imapc_mail_get_virtual_size,
imapc_mail_get_physical_size,
imapc_mail_get_first_header,
imapc_mail_get_headers,