aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-store-summary.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/camel-store-summary.c')
-rw-r--r--camel/camel-store-summary.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/camel/camel-store-summary.c b/camel/camel-store-summary.c
index 86e42fc98c..982d0ed2b1 100644
--- a/camel/camel-store-summary.c
+++ b/camel/camel-store-summary.c
@@ -47,9 +47,10 @@
/* possible versions, for versioning changes */
#define CAMEL_STORE_SUMMARY_VERSION_0 (1)
+#define CAMEL_STORE_SUMMARY_VERSION_2 (2)
/* current version */
-#define CAMEL_STORE_SUMMARY_VERSION (1)
+#define CAMEL_STORE_SUMMARY_VERSION (2)
#define _PRIVATE(o) (((CamelStoreSummary *)(o))->priv)
@@ -822,6 +823,23 @@ store_info_load(CamelStoreSummary *s, FILE *in)
camel_file_util_decode_uint32(in, &mi->unread);
camel_file_util_decode_uint32(in, &mi->total);
+ /* Ok, brown paper bag bug - prior to version 2 of the file, flags are
+ stored using the bit number, not the bit. Try to recover as best we can */
+ if (s->version < CAMEL_STORE_SUMMARY_VERSION_2) {
+ guint32 flags = 0;
+
+ if (mi->flags & 1)
+ flags |= CAMEL_STORE_INFO_FOLDER_NOSELECT;
+ if (mi->flags & 2)
+ flags |= CAMEL_STORE_INFO_FOLDER_READONLY;
+ if (mi->flags & 3)
+ flags |= CAMEL_STORE_INFO_FOLDER_SUBSCRIBED;
+ if (mi->flags & 4)
+ flags |= CAMEL_STORE_INFO_FOLDER_FLAGGED;
+
+ mi->flags = flags;
+ }
+
if (!ferror(in))
return mi;