]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mailbox-list-iter: Send delayed inbox after actually seeing the inbox
authorSiavash Tavakoli <siavash.tavakoli@open-xchange.com>
Mon, 1 Feb 2021 17:53:59 +0000 (17:53 +0000)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 11 Feb 2021 10:42:15 +0000 (10:42 +0000)
Control delayed inbox listing with a flag in ns_list_iterate_context.
Send only when the inbox is actually seen.

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

index d20d03ed187dbdeb888a57ace72bc214d18091f4..4098d8fb840cc60209daed68156151961b7899a3 100644 (file)
@@ -35,6 +35,7 @@ struct ns_list_iterate_context {
        bool cur_ns_prefix_sent:1;
        bool inbox_list:1;
        bool inbox_listed:1;
+       bool inbox_seen:1;
 };
 
 static void mailbox_list_ns_iter_failed(struct ns_list_iterate_context *ctx);
@@ -572,7 +573,9 @@ mailbox_list_ns_iter_try_next(struct mailbox_list_iterate_context *_ctx,
        bool has_children;
 
        if (ctx->cur_ns == NULL) {
-               if (!ctx->inbox_listed && ctx->inbox_list && !_ctx->failed) {
+               if (!ctx->inbox_listed && ctx->inbox_list && !_ctx->failed &&
+                   ((_ctx->flags & MAILBOX_LIST_ITER_NO_AUTO_BOXES) == 0 ||
+                    ctx->inbox_seen)) {
                        /* send delayed INBOX reply */
                        ctx->inbox_listed = TRUE;
                        inbox_set_children_flags(ctx);
@@ -626,6 +629,7 @@ mailbox_list_ns_iter_try_next(struct mailbox_list_iterate_context *_ctx,
                        /* delay sending INBOX reply. we already saved its
                           flags at init stage, except for \Noinferiors
                           and subscription states */
+                       ctx->inbox_seen = TRUE;
                        ctx->inbox_info.flags |=
                                (info->flags & (MAILBOX_NOINFERIORS |
                                                MAILBOX_SUBSCRIBED |