changeset 22707:42e50736aac0

LAYOUT=index: List INBOX as \NoInferiors when necessary
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 14 Dec 2017 01:31:10 +0200
parents 6ea402d0c650
children fe21125a7ba8
files src/lib-storage/list/mailbox-list-index-iter.c
diffstat 1 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-index-iter.c	Thu Dec 14 01:23:45 2017 +0200
+++ b/src/lib-storage/list/mailbox-list-index-iter.c	Thu Dec 14 01:31:10 2017 +0200
@@ -85,16 +85,25 @@
 	str_append(ctx->path, node->name);
 
 	ctx->info.vname = mailbox_list_get_vname(ctx->ctx.list, str_c(ctx->path));
-	ctx->info.vname = p_strdup(ctx->info_pool, ctx->info.vname);
-	ctx->info.flags = 0;
+	ctx->info.flags = node->children != NULL ?
+		MAILBOX_CHILDREN : MAILBOX_NOCHILDREN;
+	if (strcmp(ctx->info.vname, "INBOX") != 0) {
+		/* non-INBOX */
+		ctx->info.vname = p_strdup(ctx->info_pool, ctx->info.vname);
+	} else {
+		/* listing INBOX itself */
+		ctx->info.vname = "INBOX";
+		if (mail_namespace_is_inbox_noinferiors(ctx->info.ns)) {
+			ctx->info.flags &= ~(MAILBOX_CHILDREN|MAILBOX_NOCHILDREN);
+			ctx->info.flags |= MAILBOX_NOINFERIORS;
+		}
+	}
 	if ((node->flags & MAILBOX_LIST_INDEX_FLAG_NONEXISTENT) != 0)
 		ctx->info.flags |= MAILBOX_NONEXISTENT;
 	else if ((node->flags & MAILBOX_LIST_INDEX_FLAG_NOSELECT) != 0)
 		ctx->info.flags |= MAILBOX_NOSELECT;
 	if ((node->flags & MAILBOX_LIST_INDEX_FLAG_NOINFERIORS) != 0)
 		ctx->info.flags |= MAILBOX_NOINFERIORS;
-	ctx->info.flags |= node->children != NULL ?
-		MAILBOX_CHILDREN : MAILBOX_NOCHILDREN;
 
 	if ((ctx->ctx.flags & (MAILBOX_LIST_ITER_SELECT_SUBSCRIBED |
 			       MAILBOX_LIST_ITER_RETURN_SUBSCRIBED)) != 0) {