]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Treat modseq updates explicitly instead of as if they were flag changes.
authorTimo Sirainen <tss@iki.fi>
Mon, 29 Oct 2012 12:31:04 +0000 (14:31 +0200)
committerTimo Sirainen <tss@iki.fi>
Mon, 29 Oct 2012 12:31:04 +0000 (14:31 +0200)
src/lib-index/mail-index-view-sync.c
src/lib-index/mail-index.h
src/lib-storage/index/index-sync.c

index 5c7b8eef7979e093335097a6f954c1085c679ac3..693bec6d952112c0336bdd65f306449b0691f35e 100644 (file)
@@ -774,7 +774,10 @@ mail_index_view_sync_get_rec(struct mail_index_view_sync_ctx *ctx,
                        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;
index 11fda3842e0835c7dc0fcd7305ce613d78b9a314..4b6edd0debefc79c9ce7d92e9f422556029a7374 100644 (file)
@@ -185,7 +185,8 @@ struct mail_index_sync_rec {
 
 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 {
index daad54802ed2cb9b2e061f74fdf11b0bd0594af4..ea3c0a68f2406792b249160a6c26edad6ff05a7b 100644 (file)
@@ -143,6 +143,7 @@ static void index_view_sync_recs_get(struct index_mailbox_sync_context *ctx)
        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,
@@ -150,10 +151,11 @@ static void index_view_sync_recs_get(struct index_mailbox_sync_context *ctx)
                                                         &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);
                        }