static uint32_t maildir_save_set_recent_flags(struct maildir_save_context *ctx) { struct maildir_mailbox *mbox = ctx->mbox; ARRAY_TYPE(seq_range) saved_sorted_uids; const struct seq_range *uids; unsigned int i, count; uint32_t uid; count = array_count(&ctx->ctx.transaction->changes->saved_uids); if (count == 0) return 0; t_array_init(&saved_sorted_uids, count); array_append_array(&saved_sorted_uids, &ctx->ctx.transaction->changes->saved_uids); array_sort(&saved_sorted_uids, seq_range_cmp); uids = array_get(&saved_sorted_uids, &count); for (i = 0; i < count; i++) { for (uid = uids[i].seq1; uid <= uids[i].seq2; uid++) index_mailbox_set_recent_uid(&mbox->box, uid); } return uids[count-1].seq2 + 1; }
void index_mailbox_set_recent_seq(struct mailbox *box, struct mail_index_view *view, uint32_t seq1, uint32_t seq2) { uint32_t uid; for (; seq1 <= seq2; seq1++) { mail_index_lookup_uid(view, seq1, &uid); index_mailbox_set_recent_uid(box, uid); } }
static int raw_sync(struct raw_mailbox *mbox) { struct mail_index_sync_ctx *index_sync_ctx; struct mail_index_view *sync_view; struct mail_index_transaction *trans; uint32_t seq, uid_validity = ioloop_time; enum mail_index_sync_flags sync_flags; int ret; i_assert(!mbox->synced); sync_flags = index_storage_get_sync_flags(&mbox->box) | MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY | MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES; ret = mail_index_sync_begin(mbox->box.index, &index_sync_ctx, &sync_view, &trans, sync_flags); if (ret <= 0) { if (ret < 0) mailbox_set_index_error(&mbox->box); return ret; } /* set our uidvalidity */ mail_index_update_header(trans, offsetof(struct mail_index_header, uid_validity), &uid_validity, sizeof(uid_validity), TRUE); /* add our one and only message */ mail_index_append(trans, 1, &seq); index_mailbox_set_recent_uid(&mbox->box, 1); if (mail_index_sync_commit(&index_sync_ctx) < 0) { mailbox_set_index_error(&mbox->box); return -1; } mbox->synced = TRUE; return 0; }