/* This is the LOGOUT command. Use a small timeout for it. */
IMAPC_COMMAND_FLAG_LOGOUT = 0x08,
/* Command is being resent after a reconnection. */
- IMAPC_COMMAND_FLAG_RECONNECTED = 0x10
+ IMAPC_COMMAND_FLAG_RECONNECTED = 0x10,
+ /* The command unselects the mailbox (UNSELECT) */
+ IMAPC_COMMAND_FLAG_UNSELECT = 0x20,
};
struct imapc_command_reply {
conn->selected_box != NULL) {
/* EXAMINE/SELECT failed: mailbox is no longer selected */
imapc_connection_mailbox_closed(conn->selected_box, TRUE);
- }
+ } else if (reply.state == IMAPC_COMMAND_STATE_OK &&
+ (cmd->flags & IMAPC_COMMAND_FLAG_UNSELECT) != 0) {
+ i_free_and_null(conn->selected_on_server);
+ }
if (conn->reconnect_command_count > 0 &&
(cmd->flags & IMAPC_COMMAND_FLAG_RECONNECTED) != 0) {
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)
+ if ((caps & IMAPC_CAPABILITY_UNSELECT) != 0) {
+ imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_UNSELECT);
imapc_command_sendf(cmd, "UNSELECT");
- else
+ } else {
+ imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_SELECT);
imapc_command_sendf(cmd, "SELECT \"~~~\"");
+ }
imapc_simple_run(&sctx, &cmd);
return 0;