]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
uidvalidity/uidnext fixes
authorTimo Sirainen <tss@iki.fi>
Mon, 24 May 2004 03:03:03 +0000 (06:03 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 24 May 2004 03:03:03 +0000 (06:03 +0300)
--HG--
branch : HEAD

src/lib-storage/index/mbox/mbox-sync-parse.c
src/lib-storage/index/mbox/mbox-sync.c

index 0a8299806ddba875bfad60d74757ef7f3baec800..f5bbcdb5496018c528edb8b4af9a403315976baf 100644 (file)
@@ -102,11 +102,6 @@ static int parse_x_imap_base(struct mbox_sync_mail_context *ctx,
                return FALSE;
        }
 
-       if (pos == hdr->full_value_len)
-               return TRUE;
-
-       // FIXME: save keywords
-
        if (ctx->sync_ctx->base_uid_validity == 0) {
                ctx->sync_ctx->base_uid_validity = uid_validity;
                ctx->sync_ctx->base_uid_last = uid_last;
@@ -115,6 +110,12 @@ static int parse_x_imap_base(struct mbox_sync_mail_context *ctx,
 
        ctx->hdr_pos[MBOX_HDR_X_IMAPBASE] = str_len(ctx->header);
        ctx->seen_imapbase = TRUE;
+
+       if (pos == hdr->full_value_len)
+               return TRUE;
+
+       // FIXME: save keywords
+
        return TRUE;
 }
 
index a821ff7153823409084943eb0127a666a96a10c3..1f0ecfe1258dd1bdebbd182ccb5290a40a0c7604 100644 (file)
@@ -225,7 +225,9 @@ static int mbox_sync_do(struct index_mailbox *ibox,
                                ret = -1;
                                break;
                        }
-                       sync_ctx.base_uid_validity = hdr->uid_validity;
+                       sync_ctx.base_uid_validity =
+                               hdr->uid_validity == 0 ? (uint32_t)ioloop_time :
+                               hdr->uid_validity;
                }
 
                if ((mail_ctx.need_rewrite ||
@@ -392,6 +394,19 @@ static int mbox_sync_do(struct index_mailbox *ibox,
 
        if (mail_index_get_header(sync_view, &hdr) < 0)
                ret = -1;
+
+       if (sync_ctx.base_uid_validity != hdr->uid_validity) {
+               mail_index_update_header(t,
+                       offsetof(struct mail_index_header, uid_validity),
+                       &sync_ctx.base_uid_validity,
+                       sizeof(sync_ctx.base_uid_validity));
+       }
+       if (sync_ctx.next_uid != hdr->next_uid) {
+               mail_index_update_header(t,
+                       offsetof(struct mail_index_header, next_uid),
+                       &sync_ctx.next_uid, sizeof(sync_ctx.next_uid));
+       }
+
        if ((uint32_t)st.st_mtime != hdr->sync_stamp) {
                uint32_t sync_stamp = st.st_mtime;