mailbox_tree_deinit(&list->mailboxes);
list->mailboxes = mailbox_tree_init(mail_namespace_get_sep(list->list.ns));
mailbox_tree_set_parents_nonexistent(list->mailboxes);
- imapc_simple_run(&ctx);
+ imapc_simple_run(&ctx, &cmd);
if ((list->list.ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0) {
/* INBOX always exists in IMAP server. since this namespace is
pattern = t_strdup_printf("%s*", src_list->set->imapc_list_prefix);
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_RETRIABLE);
imapc_command_sendf(cmd, "LSUB \"\" %s", pattern);
- imapc_simple_run(&ctx);
+ imapc_simple_run(&ctx, &cmd);
if (ctx.ret < 0)
return -1;
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_RETRIABLE);
imapc_command_sendf(cmd, set ? "SUBSCRIBE %s" : "UNSUBSCRIBE %s",
imapc_list_to_remote(list, name));
- imapc_simple_run(&ctx);
+ imapc_simple_run(&ctx, &cmd);
return ctx.ret;
}
imapc_command_sendf(cmd, "UNSELECT");
else
imapc_command_sendf(cmd, "SELECT \"~~~\"");
- imapc_simple_run(&ctx);
+ imapc_simple_run(&ctx, &cmd);
}
cmd = imapc_list_simple_context_init(&ctx, list);
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_RETRIABLE);
imapc_command_sendf(cmd, "DELETE %s", imapc_list_to_remote(list, name));
- imapc_simple_run(&ctx);
+ imapc_simple_run(&ctx, &cmd);
if (fs_list != NULL && ctx.ret == 0) {
name = imapc_list_get_fs_name(list, name);
imapc_command_sendf(cmd, "RENAME %s %s",
imapc_list_to_remote(list, oldname),
imapc_list_to_remote(list, newname));
- imapc_simple_run(&ctx);
+ imapc_simple_run(&ctx, &cmd);
if (ctx.ret == 0 && fs_list != NULL && oldlist == newlist) {
oldname = imapc_list_get_fs_name(list, oldname);
newname = imapc_list_get_fs_name(list, newname);
sctx->ret = -2;
}
-void imapc_simple_run(struct imapc_simple_context *sctx)
+void imapc_simple_run(struct imapc_simple_context *sctx,
+ struct imapc_command **cmd)
{
if (imapc_storage_client_handle_auth_failure(sctx->client)) {
+ imapc_command_abort(cmd);
imapc_client_logout(sctx->client->client);
sctx->ret = -1;
}
+ *cmd = NULL;
while (sctx->ret == -2)
imapc_client_run(sctx->client->client);
}
cmd = imapc_client_mailbox_cmd(mbox->client_box,
imapc_simple_callback, &sctx);
imapc_command_send(cmd, "NOOP");
- imapc_simple_run(&sctx);
+ imapc_simple_run(&sctx, &cmd);
}
static void
cmd = imapc_client_cmd(mbox->storage->client->client,
imapc_simple_callback, &sctx);
imapc_command_sendf(cmd, "CREATE %s", name);
- imapc_simple_run(&sctx);
+ imapc_simple_run(&sctx, &cmd);
return sctx.ret;
}
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_RETRIABLE);
imapc_command_sendf(cmd, "STATUS %s (%1s)",
imapc_mailbox_get_remote_name(mbox), str_c(str)+1);
- imapc_simple_run(&sctx);
+ imapc_simple_run(&sctx, &cmd);
mbox->storage->cur_status_box = NULL;
mbox->storage->cur_status = NULL;
return sctx.ret;
imapc_simple_callback, &sctx);
imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_RETRIABLE);
imapc_command_send(cmd, "NAMESPACE");
- imapc_simple_run(&sctx);
+ imapc_simple_run(&sctx, &cmd);
if (sctx.ret < 0)
return -1;
const struct imapc_command_reply *reply);
void imapc_simple_context_init(struct imapc_simple_context *sctx,
struct imapc_storage_client *client);
-void imapc_simple_run(struct imapc_simple_context *sctx);
+void imapc_simple_run(struct imapc_simple_context *sctx,
+ struct imapc_command **cmd);
void imapc_simple_callback(const struct imapc_command_reply *reply,
void *context);
int imapc_mailbox_commit_delayed_trans(struct imapc_mailbox *mbox,
cmd = imapc_client_cmd(root->client->client,
imapc_simple_callback, &sctx);
imapc_command_sendf(cmd, "GETQUOTAROOT %s", root->box_name);
- imapc_simple_run(&sctx);
+ imapc_simple_run(&sctx, &cmd);
/* if there are multiple quota roots, use the first one returned by
the QUOTAROOT */
cmd = imapc_client_cmd(root->client->client,
imapc_simple_callback, &sctx);
imapc_command_sendf(cmd, "GETQUOTA %s", root->root_name);
- imapc_simple_run(&sctx);
+ imapc_simple_run(&sctx, &cmd);
/* there shouldn't be more than one QUOTA reply, but ignore anyway
anything we didn't expect. */