]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Extract imapc_server_unselect()
authorMarco Bettini <marco.bettini@open-xchange.com>
Thu, 13 Nov 2025 13:32:52 +0000 (13:32 +0000)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 24 Nov 2025 12:20:11 +0000 (12:20 +0000)
src/lib-storage/index/imapc/imapc-list.c
src/lib-storage/index/imapc/imapc-storage.c
src/lib-storage/index/imapc/imapc-storage.h

index c350e90dc90420cae7f87f001d5f72c4bfeb51dc..c457ee050cfc4ba272dc235911051e99d7685484 100644 (file)
@@ -938,14 +938,8 @@ imapc_list_delete_mailbox(struct mailbox_list *_list, const char *name)
        imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_RETRIABLE);
        if (!imapc_command_connection_is_selected(cmd))
                imapc_command_abort(&cmd);
-       else {
-               imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_SELECT);
-               if ((capa & IMAPC_CAPABILITY_UNSELECT) != 0)
-                       imapc_command_sendf(cmd, "UNSELECT");
-               else
-                       imapc_command_sendf(cmd, "SELECT \"~~~\"");
-               imapc_simple_run(&ctx, &cmd);
-       }
+       else if (imapc_server_unselect(list->client) < 0)
+               return -1;
 
        cmd = imapc_list_simple_context_init(&ctx, list);
        imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_RETRIABLE);
index d3a33804f4e17e362b5bd05d173819f260c119ba..cc139aa49d153e1a0532115e4e9ca2d03c004f4a 100644 (file)
@@ -1153,6 +1153,28 @@ static int imapc_mailbox_delete(struct mailbox *box)
        return index_storage_mailbox_delete(box);
 }
 
+int imapc_server_unselect(struct imapc_storage_client *client)
+{
+       enum imapc_capability caps;
+       if (imapc_client_get_capabilities(client->client, &caps) < 0)
+               return -1;
+
+       struct imapc_simple_context sctx;
+       imapc_simple_context_init(&sctx, client);
+
+       struct imapc_command *cmd = imapc_client_cmd(client->client,
+                                                    imapc_simple_callback, &sctx);
+
+       imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_SELECT);
+       if ((caps & IMAPC_CAPABILITY_UNSELECT) != 0)
+               imapc_command_sendf(cmd, "UNSELECT");
+       else
+               imapc_command_sendf(cmd, "SELECT \"~~~\"");
+
+       imapc_simple_run(&sctx, &cmd);
+       return 0;
+}
+
 static int imapc_mailbox_run_status(struct mailbox *box,
                                    enum mailbox_status_items items,
                                    struct mailbox_status *status_r)
index 27a5e5ff3fdfe4055cd7ce7ffd3f4a831fbd41df..e9dd62d190c4705539a7244487fa0f755a673b2d 100644 (file)
@@ -274,5 +274,6 @@ void imapc_untagged_fetch_update_flags(struct imapc_mailbox *mbox,
                                       struct mail_index_view *view,
                                       uint32_t lseq);
 bool imapc_mailbox_fetch_state(struct imapc_mailbox *mbox, uint32_t first_uid);
+int imapc_server_unselect(struct imapc_storage_client *client);
 
 #endif