diff options
-rw-r--r-- | camel/ChangeLog | 12 | ||||
-rw-r--r-- | camel/camel-folder-summary.c | 11 | ||||
-rw-r--r-- | camel/camel-folder-summary.h | 3 | ||||
-rw-r--r-- | camel/providers/mbox/camel-mbox-folder.c | 6 | ||||
-rw-r--r-- | camel/providers/mbox/camel-mbox-summary.c | 21 |
5 files changed, 49 insertions, 4 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 0d22e830e5..1d73c7d4e4 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,8 @@ +2000-05-11 NotZed <NotZed@HelixCode.com> + + * providers/mbox/camel-mbox-folder.c (message_changed): Indicate + the summary changed also. + 2000-05-11 Jeffrey Stedfast <fejj@stampede.org> * providers/smtp/camel-smtp-transport.c: (smtp_helo): @@ -10,9 +15,16 @@ * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_finalise): Free the folder path. + (camel_mbox_summary_update): Also save summary when done. + (camel_mbox_summary_expunge): Unindex items when deleting them. + (camel_mbox_summary_expunge): Save the index as well as the + summary. * camel-folder-summary.c (camel_folder_summary_finalise): Free the summary path. + (camel_folder_summary_touch): New function, indicate the summary + info changed. + (camel_folder_summary_remove): Dirty here. * camel-internet-address.c (internet_decode): Free multiple entry addresses properly. diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c index 854017daa9..6f80a62325 100644 --- a/camel/camel-folder-summary.c +++ b/camel/camel-folder-summary.c @@ -367,13 +367,15 @@ camel_folder_summary_save(CamelFolderSummary *s) g_assert(s->summary_path); - printf("saving summary?\n"); + printf("saving summary? '%s'\n", s->summary_path); if ((s->flags & CAMEL_SUMMARY_DIRTY) == 0) { printf("nup\n"); return 0; } + printf("yep\n"); + fd = open(s->summary_path, O_RDWR|O_CREAT, 0600); if (fd == -1) return -1; @@ -493,6 +495,12 @@ perform_content_info_free(CamelFolderSummary *s, CamelMessageContentInfo *ci) } void +camel_folder_summary_touch(CamelFolderSummary *s) +{ + s->flags |= CAMEL_SUMMARY_DIRTY; +} + +void camel_folder_summary_clear(CamelFolderSummary *s) { int i; @@ -526,6 +534,7 @@ void camel_folder_summary_remove(CamelFolderSummary *s, CamelMessageInfo *info) if (s->build_content && ci) { perform_content_info_free(s, ci); } + s->flags |= CAMEL_SUMMARY_DIRTY; } void camel_folder_summary_remove_uid(CamelFolderSummary *s, const char *uid) diff --git a/camel/camel-folder-summary.h b/camel/camel-folder-summary.h index 71b7cab7cb..76cecffb31 100644 --- a/camel/camel-folder-summary.h +++ b/camel/camel-folder-summary.h @@ -146,6 +146,9 @@ guint32 camel_folder_summary_next_uid(CamelFolderSummary *s); int camel_folder_summary_load(CamelFolderSummary *); int camel_folder_summary_save(CamelFolderSummary *); +/* set the dirty bit on the summary */ +void camel_folder_summary_touch(CamelFolderSummary *s); + /* add a new raw summary item */ void camel_folder_summary_add(CamelFolderSummary *, CamelMessageInfo *info); diff --git a/camel/providers/mbox/camel-mbox-folder.c b/camel/providers/mbox/camel-mbox-folder.c index 05d00c608e..3403271e40 100644 --- a/camel/providers/mbox/camel-mbox-folder.c +++ b/camel/providers/mbox/camel-mbox-folder.c @@ -745,6 +745,7 @@ mbox_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelExcept filter_from = (CamelMimeFilter *)camel_mime_filter_from_new(); camel_stream_filter_add((CamelStreamFilter *)filter_stream, filter_from); camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), filter_stream, ex); +#warning "we still need stream_close() for this" if (!camel_exception_is_set (ex)) camel_stream_flush (filter_stream, ex); @@ -833,9 +834,10 @@ message_changed(CamelMimeMessage *m, int type, CamelMboxFolder *mf) switch (type) { case MESSAGE_FLAGS_CHANGED: info = camel_folder_summary_uid((CamelFolderSummary *)mf->summary, m->message_uid); - if (info) + if (info) { info->flags = m->flags | CAMEL_MESSAGE_FOLDER_FLAGGED; - else + camel_folder_summary_touch((CamelFolderSummary *)mf->summary); + } else g_warning("Message changed event on message not in summary: %s", m->message_uid); break; default: diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c index ead844ee66..56ff1cb198 100644 --- a/camel/providers/mbox/camel-mbox-summary.c +++ b/camel/providers/mbox/camel-mbox-summary.c @@ -323,8 +323,23 @@ summary_rebuild(CamelMboxSummary *mbs, off_t offset) int camel_mbox_summary_update(CamelMboxSummary *mbs, off_t offset) { + int ret; + mbs->index_force = FALSE; - return summary_rebuild(mbs, offset); + ret = summary_rebuild(mbs, offset); + +#if 0 +#warning "Saving full summary and index after every summarisation is slow ..." + if (ret != -1) { + if (camel_folder_summary_save((CamelFolderSummary *)mbs) == -1) + g_warning("Could not save summary: %s", strerror(errno)); + printf("summary saved\n"); + if (mbs->index) + ibex_save(mbs->index); + printf("ibex saved\n"); + } +#endif + return ret; } int @@ -581,6 +596,8 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) g_assert(!quick); offset -= (info->info.content->endpos - info->frompos); + if (mbs->index) + ibex_unindex(mbs->index, info->info.uid); camel_folder_summary_remove(s, (CamelMessageInfo *)info); count--; i--; @@ -690,6 +707,8 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) s->time = st.st_mtime; mbs->folder_size = st.st_size; camel_folder_summary_save(s); + if (mbs->index) + ibex_save(mbs->index); } gtk_object_unref((GtkObject *)mp); |