Mercurial > dovecot > original-hg > dovecot-1.2
diff src/imap/cmd-list.c @ 9409:a0fa514d92f0 HEAD
LSUB "" %: List namespace prefix if namespace has separate subscriptions.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 05 Oct 2009 14:56:51 -0400 |
parents | 13fa572535f0 |
children | b348632b11e2 |
line wrap: on
line diff
--- a/src/imap/cmd-list.c Mon Oct 05 14:13:17 2009 -0400 +++ b/src/imap/cmd-list.c Mon Oct 05 14:56:51 2009 -0400 @@ -198,12 +198,16 @@ static bool list_namespace_has_children(struct cmd_list_context *ctx) { + enum mailbox_list_iter_flags list_flags = + MAILBOX_LIST_ITER_RETURN_NO_FLAGS; struct mailbox_list_iterate_context *list_iter; const struct mailbox_info *info; bool ret = FALSE; - list_iter = mailbox_list_iter_init(ctx->ns->list, "%", - MAILBOX_LIST_ITER_RETURN_NO_FLAGS); + if ((ctx->list_flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) + list_flags |= MAILBOX_LIST_ITER_SELECT_SUBSCRIBED; + + list_iter = mailbox_list_iter_init(ctx->ns->list, "%", list_flags); info = mailbox_list_iter_next(list_iter); if (info != NULL) ret = TRUE; @@ -286,7 +290,8 @@ } } - if ((ctx->ns->flags & NAMESPACE_FLAG_LIST_CHILDREN) != 0) { + if ((ctx->ns->flags & NAMESPACE_FLAG_LIST_CHILDREN) != 0 || + (ctx->list_flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) { if (have_children) { /* children are going to be listed. */ return; @@ -540,8 +545,16 @@ list_want_send_prefix(struct cmd_list_context *ctx, const char *pattern) { /* don't send the prefix if we're listing subscribed mailboxes */ - if ((ctx->list_flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) - return FALSE; + if ((ctx->list_flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) { + if ((ctx->ns->flags & NAMESPACE_FLAG_SUBSCRIPTIONS) == 0) { + /* using parent's subscriptions file. it'll handle + this internally */ + return FALSE; + } + /* send prefix if namespace has at least some subscriptions, + but pattern doesn't match any children (e.g. "%") */ + return TRUE; + } /* send the prefix if namespace is listable. if children are listable we may or may not need to send it. */