client->untagged_context = context;
}
-void imapc_client_run(struct imapc_client *client)
+void imapc_client_run_pre(struct imapc_client *client)
{
struct imapc_client_connection *const *connp;
struct ioloop *prev_ioloop = current_ioloop;
if (io_loop_is_running(client->ioloop))
io_loop_run(client->ioloop);
-
current_ioloop = prev_ioloop;
+}
+
+void imapc_client_run_post(struct imapc_client *client)
+{
+ struct imapc_client_connection *const *connp;
+
array_foreach(&client->conns, connp)
imapc_connection_ioloop_changed((*connp)->conn);
imapc_untagged_callback_t *callback,
void *context);
-void imapc_client_run(struct imapc_client *client);
+void imapc_client_run_pre(struct imapc_client *client);
+void imapc_client_run_post(struct imapc_client *client);
void imapc_client_stop(struct imapc_client *client);
/* Stop immediately, don't finish even any already read pending replies.
They'll be finished when imapc_client_run() is again called. */
or until all FETCH replies have been received (i.e. some FETCHes
failed) */
while (!imapc_mail_have_fields(imail, fields) && imail->fetch_count > 0)
- imapc_client_run(storage->client);
+ imapc_storage_run(storage);
return 0;
}
(struct imapc_storage *)_mail->box->storage;
while (imail->fetch_count > 0)
- imapc_client_run(storage->client);
+ imapc_storage_run(storage);
index_mail_close(_mail);
}
ctx->mbox->box.name, flags, internaldate, input);
i_stream_unref(&input);
while (sctx.ret == -2)
- imapc_client_run(ctx->mbox->storage->client);
+ imapc_storage_run(ctx->mbox->storage);
return sctx.ret;
}
"UID COPY %u %s",
mail->uid, _t->box->name);
while (sctx.ret == -2)
- imapc_client_run(src_mbox->storage->client);
+ imapc_storage_run(src_mbox->storage);
ctx->finished = TRUE;
return sctx.ret;
}
#include "imap-arg.h"
#include "imap-resp-code.h"
#include "imapc-mail.h"
-#include "imapc-client.h"
+#include "imapc-client-private.h"
+#include "imapc-connection.h"
#include "imapc-list.h"
#include "imapc-sync.h"
#include "imapc-settings.h"
void imapc_simple_run(struct imapc_simple_context *sctx)
{
while (sctx->ret == -2)
- imapc_client_run(sctx->storage->client);
+ imapc_storage_run(sctx->storage);
+}
+
+void imapc_storage_run(struct imapc_storage *storage)
+{
+ struct imapc_client_mailbox *client_box;
+ struct imapc_client_connection *const *connp;
+ struct imapc_mailbox *mbox;
+
+ imapc_client_run_pre(storage->client);
+
+ array_foreach(&storage->client->conns, connp) {
+ client_box = imapc_connection_get_mailbox((*connp)->conn);
+ if (client_box == NULL)
+ continue;
+
+ mbox = client_box->untagged_box_context;
+ if (mbox->to_idle_delay != NULL)
+ mbox->to_idle_delay = io_loop_move_timeout(&mbox->to_idle_delay);
+ }
+
+ imapc_client_run_post(storage->client);
}
void imapc_simple_callback(const struct imapc_command_reply *reply,
imapc_mailbox_open_callback,
&ctx, mbox);
while (ctx.ret == -2)
- imapc_client_run(mbox->storage->client);
+ imapc_storage_run(mbox->storage);
mbox->opening = FALSE;
if (!mbox->open_success) {
mailbox_close(box);
struct mail_index_transaction_commit_result *result);
void imapc_transaction_save_rollback(struct mail_save_context *ctx);
+void imapc_storage_run(struct imapc_storage *storage);
+
void imapc_copy_error_from_reply(struct imapc_storage *storage,
enum mail_error default_error,
const struct imapc_command_reply *reply);
imapc_sync_expunge_finish(ctx);
while (ctx->sync_command_count > 0)
- imapc_client_run(ctx->mbox->storage->client);
+ imapc_storage_run(ctx->mbox->storage);
array_free(&ctx->expunged_uids);
if (box->v.sync_notify != NULL)
imapc_client_mailbox_cmdf(mbox->client_box,
imapc_noop_stop_callback,
mbox->storage, "NOOP");
- imapc_client_run(mbox->storage->client);
+ imapc_storage_run(mbox->storage);
}
if (imapc_mailbox_commit_delayed_trans(mbox, &changes) < 0)