]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Mailbox list iteration: Added MAILBOX_LIST_ITER_SKIP_ALIASES flag.
authorTimo Sirainen <tss@iki.fi>
Tue, 23 Jun 2009 21:32:01 +0000 (17:32 -0400)
committerTimo Sirainen <tss@iki.fi>
Tue, 23 Jun 2009 21:32:01 +0000 (17:32 -0400)
--HG--
branch : HEAD

src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index 594623e0d6cf53afccb69dcefc50ab888a17161d..67561e380a59a90ae8af76079fb89101c04755c3 100644 (file)
@@ -516,6 +516,16 @@ mailbox_list_iter_init_multiple(struct mailbox_list *list,
        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_ns_iter_next(struct mailbox_list_iterate_context *_ctx)
                        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 @@ mailbox_list_iter_init_namespaces(struct mail_namespace *namespaces,
        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;
 }
 
index 2cdfc76f6e7c64fdd7e10d9db5ca8c013ab73c79..5b2d5e85e9983427d113695629c4cec51b210bf3 100644 (file)
@@ -46,6 +46,9 @@ enum mailbox_list_iter_flags {
        /* 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,