changeset 4249:706c978c7c7d HEAD

Keep track of recent flags.
author Timo Sirainen <tss@iki.fi>
date Thu, 04 May 2006 01:02:28 +0300
parents f17622d1d927
children a767dd4fafb0
files src/lib-storage/index/dbox/dbox-sync.c
diffstat 1 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-sync.c	Thu May 04 01:01:22 2006 +0300
+++ b/src/lib-storage/index/dbox/dbox-sync.c	Thu May 04 01:02:28 2006 +0300
@@ -75,6 +75,23 @@
 	return 0;
 }
 
+static int dbox_update_recent_flags(struct dbox_sync_context *ctx,
+				    uint32_t seq1, uint32_t seq2)
+{
+	uint32_t seq;
+	const struct mail_index_record *rec;
+
+	for (seq = seq1; seq <= seq2; seq++) {
+		if (mail_index_lookup(ctx->sync_view, seq, &rec) < 0) {
+			mail_storage_set_index_error(&ctx->mbox->ibox);
+			return -1;
+		}
+		if ((rec->flags & MAIL_RECENT) != 0)
+			index_mailbox_set_recent(&ctx->mbox->ibox, seq);
+	}
+	return 0;
+}
+
 static int dbox_sync_add(struct dbox_sync_context *ctx,
 			 const struct mail_index_sync_rec *sync_rec)
 {
@@ -108,6 +125,10 @@
 	case MAIL_INDEX_SYNC_TYPE_FLAGS:
 		dbox_sync_rec.value.flags.add = sync_rec->add_flags;
 		dbox_sync_rec.value.flags.remove = sync_rec->remove_flags;
+		if ((sync_rec->remove_flags & MAIL_RECENT) != 0) {
+			if (dbox_update_recent_flags(ctx, seq1, seq2) < 0)
+				return -1;
+		}
 		break;
 	case MAIL_INDEX_SYNC_TYPE_KEYWORD_ADD:
 	case MAIL_INDEX_SYNC_TYPE_KEYWORD_REMOVE: