From: Timo Sirainen Date: Wed, 16 Mar 2011 17:17:57 +0000 (+0200) Subject: virtual: Support +mailbox entries that clear \Recent flag from messages. X-Git-Tag: 2.0.12~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2128e2bebe4af374561ea2846b9d3eca3cde233e;p=thirdparty%2Fdovecot%2Fcore.git virtual: Support +mailbox entries that clear \Recent flag from messages. --- diff --git a/src/plugins/virtual/virtual-config.c b/src/plugins/virtual/virtual-config.c index c048084d91..d3fe5e8278 100644 --- a/src/plugins/virtual/virtual-config.c +++ b/src/plugins/virtual/virtual-config.c @@ -134,7 +134,7 @@ virtual_config_parse_line(struct virtual_parse_context *ctx, const char *line, if (strcasecmp(line, "INBOX") == 0) line = "INBOX"; bbox->name = p_strdup(ctx->pool, line); - if (*line == '-' || *line == '!') line++; + if (*line == '-' || *line == '+' || *line == '!') line++; bbox->ns = strcasecmp(line, "INBOX") == 0 ? mail_namespace_find_inbox(user->namespaces) : mail_namespace_find(user->namespaces, &line); @@ -143,6 +143,11 @@ virtual_config_parse_line(struct virtual_parse_context *ctx, const char *line, bbox->name); return -1; } + if (bbox->name[0] == '+') { + bbox->name++; + bbox->clear_recent = TRUE; + } + if (strchr(bbox->name, '*') != NULL || strchr(bbox->name, '%') != NULL) { name = bbox->name[0] == '-' ? bbox->name + 1 : bbox->name; diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index b0ef4b9b28..6b85820a00 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -173,7 +173,8 @@ static int virtual_backend_box_open(struct virtual_mailbox *mbox, i_assert(bbox->box == NULL); - flags |= MAILBOX_FLAG_KEEP_RECENT; + if (!bbox->clear_recent) + flags |= MAILBOX_FLAG_KEEP_RECENT; mailbox = bbox->name; ns = mail_namespace_find(user->namespaces, &mailbox); diff --git a/src/plugins/virtual/virtual-storage.h b/src/plugins/virtual/virtual-storage.h index 7814fcca96..c3a019d571 100644 --- a/src/plugins/virtual/virtual-storage.h +++ b/src/plugins/virtual/virtual-storage.h @@ -95,6 +95,7 @@ struct virtual_backend_box { unsigned int sync_seen:1; unsigned int wildcard:1; + unsigned int clear_recent:1; unsigned int uids_nonsorted:1; }; ARRAY_DEFINE_TYPE(virtual_backend_box, struct virtual_backend_box *);