changeset 5961:7aa61bb91ba3 HEAD

When status is returned, make sure we return correct uidvalidity/nextuid values from uidlist if index isn't up-to-date.
author Timo Sirainen <tss@iki.fi>
date Thu, 12 Jul 2007 05:50:10 +0300
parents 33908f232e9a
children 3e01ee1a2864
files src/lib-storage/index/maildir/maildir-storage.c
diffstat 1 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-storage.c	Thu Jul 12 04:56:02 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-storage.c	Thu Jul 12 05:50:10 2007 +0300
@@ -845,6 +845,30 @@
 	return index_storage_mailbox_close(box);
 }
 
+static int maildir_storage_get_status(struct mailbox *box,
+				      enum mailbox_status_items items,
+				      struct mailbox_status *status_r)
+{
+	struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
+	uint32_t uid_validity, next_uid;
+
+	if (index_storage_get_status(box, items, status_r) < 0)
+		return -1;
+
+	/* if index isn't up-to-date, get the values from uidlist */
+	if (maildir_uidlist_refresh(mbox->uidlist) < 0)
+		return -1;
+
+	uid_validity = maildir_uidlist_get_uid_validity(mbox->uidlist);
+	if (uid_validity != 0)
+		status_r->uidvalidity = uid_validity;
+
+	next_uid = maildir_uidlist_get_next_uid(mbox->uidlist);
+	if (status_r->uidnext < next_uid)
+		status_r->uidnext = next_uid;
+	return 0;
+}
+
 static void maildir_notify_changes(struct mailbox *box)
 {
 	struct maildir_mailbox *mbox = (struct maildir_mailbox *)box;
@@ -1030,7 +1054,7 @@
 		index_storage_is_readonly,
 		index_storage_allow_new_keywords,
 		maildir_storage_mailbox_close,
-		index_storage_get_status,
+		maildir_storage_get_status,
 		maildir_storage_sync_init,
 		index_mailbox_sync_next,
 		index_mailbox_sync_deinit,