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:
		
							parent
							
								
									e7c96f8891
								
							
						
					
					
						commit
						406e967430
					
				
					 2 changed files with 24 additions and 19 deletions
				
			
		
							
								
								
									
										39
									
								
								src/main.c
									
										
									
									
									
								
							
							
						
						
									
										39
									
								
								src/main.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue