update = CONST_PTR_OFFSET(data, ctx->data_offset);
}
- rec->type = MAIL_INDEX_VIEW_SYNC_TYPE_FLAGS;
+ if (update->add_flags != 0 || update->remove_flags != 0)
+ rec->type = MAIL_INDEX_VIEW_SYNC_TYPE_FLAGS;
+ else
+ rec->type = MAIL_INDEX_VIEW_SYNC_TYPE_MODSEQ;
rec->uid1 = update->uid1;
rec->uid2 = update->uid2;
break;
enum mail_index_view_sync_type {
/* Flags or keywords changed */
- MAIL_INDEX_VIEW_SYNC_TYPE_FLAGS = 0x01
+ MAIL_INDEX_VIEW_SYNC_TYPE_FLAGS = 0x01,
+ MAIL_INDEX_VIEW_SYNC_TYPE_MODSEQ = 0x02
};
struct mail_index_view_sync_rec {
i_array_init(&ctx->hidden_updates, 32);
while (mail_index_view_sync_next(ctx->sync_ctx, &sync_rec)) {
switch (sync_rec.type) {
+ case MAIL_INDEX_VIEW_SYNC_TYPE_MODSEQ:
case MAIL_INDEX_VIEW_SYNC_TYPE_FLAGS:
if (!mail_index_lookup_seq_range(ctx->ctx.box->view,
sync_rec.uid1,
&seq1, &seq2))
break;
- if (!sync_rec.hidden) {
+ if (!sync_rec.hidden &&
+ sync_rec.type == MAIL_INDEX_VIEW_SYNC_TYPE_FLAGS) {
seq_range_array_add_range(&ctx->flag_updates,
seq1, seq2);
- } else if (array_is_created(&ctx->hidden_updates)) {
+ } else {
seq_range_array_add_range(&ctx->hidden_updates,
seq1, seq2);
}