}
}
+void imap_mailbox_select_finish(struct imapc_mailbox *mbox)
+{
+ if (mbox->exists_count == 0) {
+ /* no mails. expunge everything. */
+ mbox->sync_next_lseq = 1;
+ imapc_mailbox_init_delayed_trans(mbox);
+ imapc_mailbox_fetch_state_finish(mbox);
+ }
+}
+
static void
imapc_mailbox_fetch_state(struct imapc_mailbox *mbox, uint32_t first_uid)
{
if (mbox->exists_count == 0) {
/* empty mailbox - no point in fetching anything.
- just make sure everything is expunged in local index. */
- mbox->sync_next_lseq = 1;
- imapc_mailbox_init_delayed_trans(mbox);
- imapc_mailbox_fetch_state_finish(mbox);
+ just make sure everything is expunged in local index.
+ Delay calling imapc_mailbox_fetch_state_finish() until
+ SELECT finishes, so we see the updated UIDNEXT. */
return;
}
if (mbox->state_fetching_uid1) {
if (reply->state != IMAPC_COMMAND_STATE_OK)
errmsg = reply->text_full;
else if (imapc_mailbox_verify_select(mbox, &errmsg)) {
+ imap_mailbox_select_finish(mbox);
errmsg = NULL;
mbox->selected = TRUE;
}
"imapc: Opening mailbox failed: %s", error);
ctx->ret = -1;
} else {
+ imap_mailbox_select_finish(ctx->mbox);
ctx->mbox->selected = TRUE;
ctx->ret = 0;
}
void imapc_mailbox_run_nofetch(struct imapc_mailbox *mbox);
void imapc_mail_cache_free(struct imapc_mail_cache *cache);
int imapc_mailbox_select(struct imapc_mailbox *mbox);
+void imap_mailbox_select_finish(struct imapc_mailbox *mbox);
bool imapc_mailbox_has_modseqs(struct imapc_mailbox *mbox);
bool imap_resp_text_code_parse(const char *str, enum mail_error *error_r);