changeset 9518:87990dce79d4 HEAD

Mailbox list iteration: Added MAILBOX_LIST_ITER_SKIP_ALIASES flag.
author Timo Sirainen <tss@iki.fi>
date Tue, 23 Jun 2009 17:32:01 -0400
parents f5d95f4fd954
children c0c3dcb5a6f0
files src/lib-storage/mailbox-list.c src/lib-storage/mailbox-list.h
diffstat 2 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mailbox-list.c	Tue Jun 23 17:31:29 2009 -0400
+++ b/src/lib-storage/mailbox-list.c	Tue Jun 23 17:32:01 2009 -0400
@@ -516,6 +516,16 @@
 	return list->v.iter_init(list, patterns, flags);
 }
 
+static struct mail_namespace *
+ns_next(struct ns_list_iterate_context *ctx, struct mail_namespace *ns)
+{
+	if ((ctx->ctx.flags & MAILBOX_LIST_ITER_SKIP_ALIASES) != 0) {
+		while (ns != NULL && ns->alias_for != NULL)
+			ns = ns->next;
+	}
+	return ns;
+}
+
 static const struct mailbox_info *
 mailbox_list_ns_iter_next(struct mailbox_list_iterate_context *_ctx)
 {
@@ -533,7 +543,7 @@
 			mailbox_list_iter_init_multiple(ctx->namespaces->list,
 							ctx->patterns,
 							_ctx->flags);
-		ctx->namespaces = ctx->namespaces->next;
+		ctx->namespaces = ns_next(ctx, ctx->namespaces->next);
 		return mailbox_list_ns_iter_next(_ctx);
 	}
 	return info;
@@ -577,10 +587,11 @@
 	for (i = 0; i < count; i++)
 		ctx->patterns[i] = p_strdup(pool, patterns[i]);
 
+	namespaces = ns_next(ctx, namespaces);
 	ctx->ctx.list->ns = namespaces;
 	ctx->backend_ctx = mailbox_list_iter_init_multiple(namespaces->list,
 							   patterns, flags);
-	ctx->namespaces = namespaces->next;
+	ctx->namespaces = ns_next(ctx, namespaces->next);
 	return &ctx->ctx;
 }
 
--- a/src/lib-storage/mailbox-list.h	Tue Jun 23 17:31:29 2009 -0400
+++ b/src/lib-storage/mailbox-list.h	Tue Jun 23 17:32:01 2009 -0400
@@ -46,6 +46,9 @@
 	/* Use virtual mailbox names (virtual separators and namespace
 	   prefixes) for patterns and for returned mailbox names. */
 	MAILBOX_LIST_ITER_VIRTUAL_NAMES		= 0x000002,
+	/* For mailbox_list_iter_init_namespaces(): Skip namespaces that
+	   have alias_for set. */
+	MAILBOX_LIST_ITER_SKIP_ALIASES		= 0x000004,
 
 	/* List only subscribed mailboxes */
 	MAILBOX_LIST_ITER_SELECT_SUBSCRIBED	= 0x000010,