Mercurial > dovecot > core-2.2
changeset 11592:08b879b79236 HEAD
doveadm: Ignore non-selectable mailboxes for most commands.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 21 Jun 2010 15:46:21 +0100 |
parents | 4e54843f11d0 |
children | 7d05cef711bb |
files | src/doveadm/doveadm-mail-list-iter.c src/doveadm/doveadm-mail-list-iter.h src/doveadm/doveadm-mail-mailbox.c |
diffstat | 3 files changed, 27 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/doveadm-mail-list-iter.c Mon Jun 21 15:34:48 2010 +0100 +++ b/src/doveadm/doveadm-mail-list-iter.c Mon Jun 21 15:46:21 2010 +0100 @@ -13,6 +13,7 @@ enum mailbox_list_iter_flags iter_flags; struct mailbox_list_iterate_context *iter; + bool only_selectable; }; static int @@ -72,6 +73,7 @@ } (void)array_append_space(&patterns); + iter->only_selectable = TRUE; iter->iter_flags = iter_flags; iter->iter = mailbox_list_iter_init_namespaces(user->namespaces, array_idx(&patterns, 0), @@ -80,6 +82,18 @@ return iter; } +struct doveadm_mail_list_iter * +doveadm_mail_list_iter_full_init(struct mail_user *user, + struct mail_search_args *search_args, + enum mailbox_list_iter_flags iter_flags) +{ + struct doveadm_mail_list_iter *iter; + + iter = doveadm_mail_list_iter_init(user, search_args, iter_flags); + iter->only_selectable = FALSE; + return iter; +} + void doveadm_mail_list_iter_deinit(struct doveadm_mail_list_iter **_iter) { struct doveadm_mail_list_iter *iter = *_iter; @@ -98,6 +112,11 @@ unsigned int len; while ((info = mailbox_list_iter_next(iter->iter)) != NULL) { + if ((info->flags & (MAILBOX_NOSELECT | + MAILBOX_NONEXISTENT)) != 0) { + if (iter->only_selectable) + continue; + } len = strlen(info->name); if (len > 0 && info->name[len-1] == info->ns->sep) { /* when listing "foo/%" it lists "foo/". skip it. */
--- a/src/doveadm/doveadm-mail-list-iter.h Mon Jun 21 15:34:48 2010 +0100 +++ b/src/doveadm/doveadm-mail-list-iter.h Mon Jun 21 15:46:21 2010 +0100 @@ -1,10 +1,16 @@ #ifndef DOVEADM_MAIL_LIST_ITER_H #define DOVEADM_MAIL_LIST_ITER_H +/* List only selectable mailboxes */ struct doveadm_mail_list_iter * doveadm_mail_list_iter_init(struct mail_user *user, struct mail_search_args *search_args, enum mailbox_list_iter_flags iter_flags); +/* List all mailboxes */ +struct doveadm_mail_list_iter * +doveadm_mail_list_iter_full_init(struct mail_user *user, + struct mail_search_args *search_args, + enum mailbox_list_iter_flags iter_flags); void doveadm_mail_list_iter_deinit(struct doveadm_mail_list_iter **iter); const struct mailbox_info *
--- a/src/doveadm/doveadm-mail-mailbox.c Mon Jun 21 15:34:48 2010 +0100 +++ b/src/doveadm/doveadm-mail-mailbox.c Mon Jun 21 15:46:21 2010 +0100 @@ -120,7 +120,8 @@ if (ctx->ctx.subscriptions) iter_flags |= MAILBOX_LIST_ITER_SELECT_SUBSCRIBED; - iter = doveadm_mail_list_iter_init(user, ctx->search_args, iter_flags); + iter = doveadm_mail_list_iter_full_init(user, ctx->search_args, + iter_flags); while ((info = doveadm_mail_list_iter_next(iter)) != NULL) { str_truncate(str, 0); if (ctx->mutf7 || imap_utf7_to_utf8(info->name, str) < 0)