enum mailbox_list_iter_flags iter_flags;
struct mailbox_list_iterate_context *iter;
+ bool only_selectable;
};
static int
}
(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),
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;
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. */
#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 *
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)