dovecot-2.2: pop3: Added pop3_delete_type setting with values "d...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Aug 12 09:52:50 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/4fcf4d745a27
changeset: 18931:4fcf4d745a27
user: Timo Sirainen <tss at iki.fi>
date: Wed Aug 12 12:52:06 2015 +0300
description:
pop3: Added pop3_delete_type setting with values "default", "expunge" or "flag".
This is related to pop3_deleted_flag setting. The main behefit here is that
you can now hide messages from POP3 by setting pop3_deleted_flag, but
without changing the actual deletion behavior by setting
pop3_delete_type=expunge.
diffstat:
src/pop3/pop3-commands.c | 11 ++++++++---
src/pop3/pop3-settings.c | 22 +++++++++++++++++++++-
src/pop3/pop3-settings.h | 6 ++++++
3 files changed, 35 insertions(+), 4 deletions(-)
diffs (93 lines):
diff -r 79b8efbbad96 -r 4fcf4d745a27 src/pop3/pop3-commands.c
--- a/src/pop3/pop3-commands.c Tue Aug 11 14:27:01 2015 +0300
+++ b/src/pop3/pop3-commands.c Wed Aug 12 12:52:06 2015 +0300
@@ -219,10 +219,15 @@
static void client_expunge(struct client *client, struct mail *mail)
{
- if (client->deleted_kw != NULL)
+ switch (client->set->parsed_delete_type) {
+ case POP3_DELETE_TYPE_EXPUNGE:
+ mail_expunge(mail);
+ break;
+ case POP3_DELETE_TYPE_FLAG:
+ i_assert(client->deleted_kw != NULL);
mail_update_keywords(mail, MODIFY_ADD, client->deleted_kw);
- else
- mail_expunge(mail);
+ break;
+ }
client->expunged_count++;
}
diff -r 79b8efbbad96 -r 4fcf4d745a27 src/pop3/pop3-settings.c
--- a/src/pop3/pop3-settings.c Tue Aug 11 14:27:01 2015 +0300
+++ b/src/pop3/pop3-settings.c Wed Aug 12 12:52:06 2015 +0300
@@ -72,6 +72,7 @@
DEF(SET_STR, pop3_logout_format),
DEF(SET_ENUM, pop3_uidl_duplicates),
DEF(SET_STR, pop3_deleted_flag),
+ DEF(SET_ENUM, pop3_delete_type),
SETTING_DEFINE_LIST_END
};
@@ -88,7 +89,8 @@
.pop3_client_workarounds = "",
.pop3_logout_format = "top=%t/%p, retr=%r/%b, del=%d/%m, size=%s",
.pop3_uidl_duplicates = "allow:rename",
- .pop3_deleted_flag = ""
+ .pop3_deleted_flag = "",
+ .pop3_delete_type = "default:expunge:flag"
};
static const struct setting_parser_info *pop3_setting_dependencies[] = {
@@ -156,6 +158,24 @@
if (pop3_settings_parse_workarounds(set, error_r) < 0)
return FALSE;
+ if (strcmp(set->pop3_delete_type, "default") == 0) {
+ if (set->pop3_deleted_flag[0] == '\0')
+ set->parsed_delete_type = POP3_DELETE_TYPE_EXPUNGE;
+ else
+ set->parsed_delete_type = POP3_DELETE_TYPE_FLAG;
+ } else if (strcmp(set->pop3_delete_type, "expunge") == 0) {
+ set->parsed_delete_type = POP3_DELETE_TYPE_EXPUNGE;
+ } else if (strcmp(set->pop3_delete_type, "flag") == 0) {
+ if (set->pop3_deleted_flag[0] == '\0') {
+ *error_r = "pop3_delete_type=flag, but pop3_deleted_flag not set";
+ return FALSE;
+ }
+ set->parsed_delete_type = POP3_DELETE_TYPE_FLAG;
+ } else {
+ *error_r = t_strdup_printf("pop3_delete_type: Unknown value '%s'",
+ set->pop3_delete_type);
+ return FALSE;
+ }
return TRUE;
}
/* </settings checks> */
diff -r 79b8efbbad96 -r 4fcf4d745a27 src/pop3/pop3-settings.h
--- a/src/pop3/pop3-settings.h Tue Aug 11 14:27:01 2015 +0300
+++ b/src/pop3/pop3-settings.h Wed Aug 12 12:52:06 2015 +0300
@@ -8,6 +8,10 @@
WORKAROUND_OUTLOOK_NO_NULS = 0x01,
WORKAROUND_OE_NS_EOH = 0x02
};
+enum pop3_delete_type {
+ POP3_DELETE_TYPE_EXPUNGE = 0,
+ POP3_DELETE_TYPE_FLAG,
+};
/* </settings checks> */
struct pop3_settings {
@@ -24,8 +28,10 @@
const char *pop3_logout_format;
const char *pop3_uidl_duplicates;
const char *pop3_deleted_flag;
+ const char *pop3_delete_type;
enum pop3_client_workarounds parsed_workarounds;
+ enum pop3_delete_type parsed_delete_type;
};
extern const struct setting_parser_info pop3_setting_parser_info;
More information about the dovecot-cvs
mailing list