don't let wildcards match INBOX, unless it lives under Path

it's counter-intuitive to have '*' match the (always present) INBOX
when the rest of the mailboxes lives in a different namespace.
This commit is contained in:
Oswald Buddenhagen 2013-04-13 19:05:27 +02:00
parent e7c96f8891
commit 406e967430
2 changed files with 24 additions and 19 deletions

View File

@ -706,28 +706,29 @@ store_opened( store_t *ctx, void *aux )
for (flags = 0, cpat = mvars->chan->patterns; cpat; cpat = cpat->next) {
const char *pat = cpat->string;
if (*pat != '!') {
int i;
char c;
static const char strinbox[] = "INBOX";
for (i = 0; ; i++) {
c = pat[i];
if (i == sizeof(strinbox) - 1)
break;
if (c != strinbox[i])
goto nextpat;
}
if (!c) {
flags |= LIST_INBOX;
} else if (c == '/') {
if (ctx->conf->flat_delim)
/* Partial matches like "INB*" or even "*" are not considered,
* except implicity when the INBOX lives under Path. */
if (!memcmp( pat, "INBOX", 5 )) {
char c = pat[5];
if (!c) {
/* User really wants the INBOX. */
flags |= LIST_INBOX;
} else if (c == '/') {
/* Flattened sub-folders of INBOX actually end up in Path. */
if (ctx->conf->flat_delim)
flags |= LIST_PATH;
else
flags |= LIST_INBOX;
} else {
/* User may not want the INBOX after all ... */
flags |= LIST_PATH;
else
flags |= LIST_INBOX;
/* ... but maybe he does.
* The flattened sub-folder case is implicitly covered by the previous line. */
if (c == '*' || c == '%')
flags |= LIST_INBOX;
}
} else {
nextpat:
flags |= LIST_PATH;
if (c == '*' || c == '%')
flags |= LIST_INBOX;
}
}
}

View File

@ -370,6 +370,10 @@ and \fB%\fR matches anything up to the next hierarchy delimiter. Prepending
\fB!\fR to a pattern makes it an exclusion. Multiple patterns can be specified
(either by supplying multiple arguments or by using \fBPattern\fR multiple
times); later matches take precedence.
.br
Note that \fBINBOX\fR is not matched by wildcards, unless it lives under
\fBPath\fR.
.br
Example: "\fBPatterns\fR\ \fI%\ !Trash\fR"
..
.TP