aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camel/ChangeLog8
-rw-r--r--camel/providers/mbox/camel-mbox-summary.c15
2 files changed, 15 insertions, 8 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index ad8c26c456..0a0893bdcf 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,11 @@
+2000-07-13 Dan Winship <danw@helixcode.com>
+
+ * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load):
+ If the summary is for a smaller mbox, and rebuilding from the
+ last-known end position fails, try rebuilding from the beginning.
+ Deals with the case where the user edits the mbox and makes it
+ bigger, without adding new messages.
+
2000-07-13 Jeffrey Stedfast <fejj@helixcode.com>
* providers/imap/camel-imap-folder.c:
diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c
index 5af28a63e1..4c826dbc28 100644
--- a/camel/providers/mbox/camel-mbox-summary.c
+++ b/camel/providers/mbox/camel-mbox-summary.c
@@ -383,8 +383,6 @@ camel_mbox_summary_load (CamelMboxSummary *mbs, int forceindex)
}
if (forceindex || camel_folder_summary_load (s) == -1) {
- printf ("REBUILDING SUMMARY: %s\n",
- forceindex ? "Summary non-existent." : "Summary load failed.");
camel_folder_summary_clear (s);
ret = summary_rebuild (mbs, 0);
} else {
@@ -407,25 +405,26 @@ camel_mbox_summary_load (CamelMboxSummary *mbs, int forceindex)
if (st.st_size == mbs->folder_size && st.st_mtime == s->time) {
if (minstart < st.st_size) {
/* FIXME: Only clear the messages and reindex from this point forward */
- printf ("REBUILDING SUMMARY: Index file is incomplete.\n");
camel_folder_summary_clear (s);
ret = summary_rebuild (mbs, 0);
}
} else {
if (mbs->folder_size < st.st_size) {
- printf ("REBUILDING SUMMARY: Summary is for a smaller mbox\n");
if (minstart < mbs->folder_size) {
/* FIXME: only make it rebuild as necessary */
camel_folder_summary_clear (s);
ret = summary_rebuild (mbs, 0);
} else {
ret = summary_rebuild (mbs, mbs->folder_size);
+ /* If that fails, it might be because a message was changed
+ * rather than appended... so try again from the beginning.
+ */
+ if (ret == -1) {
+ camel_folder_summary_clear (s);
+ ret = summary_rebuild (mbs, 0);
+ }
}
} else {
- if (mbs->folder_size > st.st_size)
- printf ("REBUILDING_SUMMARY: Summary is for a bigger mbox\n");
- else
- printf ("REBUILDING SUMMARY: Summary is for an older mbox\n");
camel_folder_summary_clear (s);
ret = summary_rebuild (mbs, 0);
}