changeset 22730:c7add8c032df

imapc: Add imapc_features=fetch-empty-is-expunged When FETCH returns an empty mail, the mail is assumed to be expunged.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 30 Oct 2017 11:19:17 +0200
parents b50c55023f08
children e821bea31605
files src/lib-storage/index/imapc/imapc-mail-fetch.c src/lib-storage/index/imapc/imapc-settings.c src/lib-storage/index/imapc/imapc-settings.h
diffstat 3 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c	Wed May 17 10:35:03 2017 +0300
+++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c	Mon Oct 30 11:19:17 2017 +0200
@@ -609,6 +609,8 @@
 		   bool have_header, bool have_body)
 {
 	struct index_mail *imail = &mail->imail;
+	struct imapc_mailbox *mbox =
+		(struct imapc_mailbox *)mail->imail.mail.mail.box;
 	struct istream *hdr_stream = NULL;
 	const char *value;
 	int fd;
@@ -663,7 +665,9 @@
 	} else {
 		if (!imap_arg_get_nstring(arg, &value))
 			value = NULL;
-		if (value == NULL) {
+		if (value == NULL ||
+		    (value[0] == '\0' &&
+		     IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED))) {
 			mail_set_expunged(&imail->mail.mail);
 			if (hdr_stream != NULL)
 				i_stream_unref(&hdr_stream);
--- a/src/lib-storage/index/imapc/imapc-settings.c	Wed May 17 10:35:03 2017 +0300
+++ b/src/lib-storage/index/imapc/imapc-settings.c	Mon Oct 30 11:19:17 2017 +0200
@@ -102,6 +102,7 @@
 	{ "modseq", IMAPC_FEATURE_MODSEQ },
 	{ "delay-login", IMAPC_FEATURE_DELAY_LOGIN },
 	{ "fetch-bodystructure", IMAPC_FEATURE_FETCH_BODYSTRUCTURE },
+	{ "fetch-empty-is-expunged", IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED },
 	{ NULL, 0 }
 };
 
--- a/src/lib-storage/index/imapc/imapc-settings.h	Wed May 17 10:35:03 2017 +0300
+++ b/src/lib-storage/index/imapc/imapc-settings.h	Mon Oct 30 11:19:17 2017 +0200
@@ -18,6 +18,7 @@
 	IMAPC_FEATURE_MODSEQ			= 0x400,
 	IMAPC_FEATURE_DELAY_LOGIN		= 0x800,
 	IMAPC_FEATURE_FETCH_BODYSTRUCTURE	= 0x1000,
+	IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED	= 0x4000,
 };
 /* </settings checks> */