map->hdr.messages_count++;
map->hdr.next_uid = rec->uid+1;
- if ((new_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0)
+ if ((new_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0 &&
+ (view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0)
map->hdr.flags |= MAIL_INDEX_HDR_FLAG_HAVE_DIRTY;
mail_index_header_update_lowwaters(ctx, rec->uid, new_flags);
seq1, seq2);
}
- if ((u->add_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0)
+ if ((u->add_flags & MAIL_INDEX_MAIL_FLAG_DIRTY) != 0 &&
+ (view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0)
view->map->hdr.flags |= MAIL_INDEX_HDR_FLAG_HAVE_DIRTY;
flag_mask = ~u->remove_flags;
const struct mail_index_record *rec;
uint32_t seq;
- if ((map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0)
+ if ((map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 ||
+ (map->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) != 0)
return;
/* do we have dirty flags anymore? */
int ret;
if ((ctx->view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 &&
- (ctx->flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0) {
+ (ctx->flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0 &&
+ (ctx->view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0) {
/* show dirty flags as flag updates */
mail_index_sync_add_dirty_updates(ctx);
}
return TRUE;
if ((hdr->flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 &&
- (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0)
+ (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0 &&
+ (index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0)
return TRUE;
if (log_file_seq == (uint32_t)-1) {
return TRUE;
if ((view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) != 0 &&
- (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0)
+ (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0 &&
+ (view->index->flags & MAIL_INDEX_OPEN_FLAG_NO_DIRTY) == 0)
return TRUE;
mail_transaction_log_get_head(view->index->log, &log_seq, &log_offset);
MAIL_INDEX_OPEN_FLAG_SAVEONLY = 0x400,
/* Enable debug logging */
MAIL_INDEX_OPEN_FLAG_DEBUG = 0x800,
+ /* MAIL_INDEX_MAIL_FLAG_DIRTY can be used as a backend-specific flag.
+ All special handling of the flag is disabled by this. */
+ MAIL_INDEX_OPEN_FLAG_NO_DIRTY = 0x1000,
};
enum mail_index_header_compat_flags {
enum mail_index_mail_flags {
/* For private use by backend. Replacing flags doesn't change this. */
MAIL_INDEX_MAIL_FLAG_BACKEND = 0x40,
- /* Message flags haven't been written to backend */
+ /* Message flags haven't been written to backend. If
+ MAIL_INDEX_OPEN_FLAG_NO_DIRTY is set, this is treated as a
+ backend-specific flag with no special internal handling. */
MAIL_INDEX_MAIL_FLAG_DIRTY = 0x80,
/* Force updating this message's modseq via a flag update record */
MAIL_INDEX_MAIL_FLAG_UPDATE_MODSEQ = 0x100