changeset 8898:aef90950d50b HEAD

Shared Maildirs: Fixes to listing INBOX. Based on patch by Bernhard Herzog.
author Timo Sirainen <tss@iki.fi>
date Thu, 02 Apr 2009 18:14:51 -0400
parents 23ee853569e6
children 0e0ce37ef99d
files src/lib-storage/list/mailbox-list-maildir-iter.c src/lib-storage/mail-namespace.c
diffstat 2 files changed, 13 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-maildir-iter.c	Thu Apr 02 18:13:50 2009 -0400
+++ b/src/lib-storage/list/mailbox-list-maildir-iter.c	Thu Apr 02 18:14:51 2009 -0400
@@ -235,32 +235,28 @@
 	}
 
 	if ((ns->flags & NAMESPACE_FLAG_INBOX) != 0) {
-		/* make sure INBOX is there */
+		/* make sure INBOX is listed */
+		if (!virtual_names)
+			mailbox_name = "INBOX";
+		else {
+			mailbox_name = mail_namespace_get_vname(ns, mailbox,
+								"INBOX");
+		}
+
 		created = FALSE;
 		node = update_only ?
-			mailbox_tree_lookup(ctx->tree_ctx, "INBOX") :
-			mailbox_tree_get(ctx->tree_ctx, "INBOX", &created);
+			mailbox_tree_lookup(ctx->tree_ctx, mailbox_name) :
+			mailbox_tree_get(ctx->tree_ctx, mailbox_name, &created);
 		if (created)
 			node->flags = MAILBOX_NOCHILDREN;
 		else if (node != NULL)
 			node->flags &= ~MAILBOX_NONEXISTENT;
 
-		match = imap_match(glob, "INBOX");
+		match = imap_match(glob, mailbox_name);
 		if ((match & (IMAP_MATCH_YES | IMAP_MATCH_PARENT)) != 0) {
 			if (!update_only)
 				node->flags |= MAILBOX_MATCHED;
 		}
-	} else if (mailbox_tree_lookup(ctx->tree_ctx, "INBOX") == NULL &&
-		   imap_match(glob, "INBOX") == IMAP_MATCH_YES) {
-		/* see if INBOX exists. */
-		ret = ctx->ctx.list->v.
-			iter_is_mailbox(&ctx->ctx, ctx->dir, "", "INBOX",
-					MAILBOX_LIST_FILE_TYPE_UNKNOWN, &flags);
-		if (ret > 0) {
-			node = mailbox_tree_get(ctx->tree_ctx,
-				t_strconcat(ns->prefix, "INBOX", NULL), NULL);
-			node->flags = MAILBOX_NOCHILDREN | MAILBOX_MATCHED;
-		}
 	}
 	return 0;
 }
--- a/src/lib-storage/mail-namespace.c	Thu Apr 02 18:13:50 2009 -0400
+++ b/src/lib-storage/mail-namespace.c	Thu Apr 02 18:14:51 2009 -0400
@@ -348,7 +348,8 @@
 {
 	str_truncate(dest, 0);
 	if ((ns->flags & NAMESPACE_FLAG_INBOX) == 0 ||
-	    strcasecmp(name, "INBOX") != 0)
+	    strcasecmp(name, "INBOX") != 0 ||
+	    ns->user != ns->owner)
 		str_append(dest, ns->prefix);
 
 	for (; *name != '\0'; name++) {