changeset 15265:41018c6fcc53

lib-storage: Make sure mailbox was synced at least once when getting status/metadata.
author Timo Sirainen <tss@iki.fi>
date Mon, 29 Oct 2012 13:01:37 +0200
parents 3d7edc15fcec
children 99965e11d9e1
files src/lib-storage/index/index-status.c src/lib-storage/mail-storage.h
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-status.c	Mon Oct 29 13:00:36 2012 +0200
+++ b/src/lib-storage/index/index-status.c	Mon Oct 29 13:01:37 2012 +0200
@@ -36,6 +36,8 @@
 	if (!box->opened) {
 		if (mailbox_open(box) < 0)
 			return -1;
+	}
+	if (!box->synced) {
 		if (mailbox_sync(box, 0) < 0)
 			return -1;
 	}
@@ -357,6 +359,10 @@
 		if (mailbox_open(box) < 0)
 			return -1;
 	}
+	if (!box->synced && (items & MAILBOX_METADATA_SYNC_ITEMS) != 0) {
+		if (mailbox_sync(box, 0) < 0)
+			return -1;
+	}
 
 	if ((items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0) {
 		if (get_metadata_virtual_size(box, metadata_r) < 0)
--- a/src/lib-storage/mail-storage.h	Mon Oct 29 13:00:36 2012 +0200
+++ b/src/lib-storage/mail-storage.h	Mon Oct 29 13:01:37 2012 +0200
@@ -85,6 +85,9 @@
 	MAILBOX_METADATA_CACHE_FIELDS		= 0x04,
 	MAILBOX_METADATA_PRECACHE_FIELDS	= 0x08,
 	MAILBOX_METADATA_BACKEND_NAMESPACE	= 0x10
+	/* metadata items that require mailbox to be synced at least once. */
+#define MAILBOX_METADATA_SYNC_ITEMS \
+	(MAILBOX_METADATA_GUID | MAILBOX_METADATA_VIRTUAL_SIZE)
 };
 
 enum mailbox_search_result_flags {