From 9f197c605b64fb2ac740df9445897c5d3bb62447 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 14 Jun 2000 05:10:54 +0000 Subject: Renamed from camel_mbox_summary_expunge. Takes a gboolean saying whether * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): Renamed from camel_mbox_summary_expunge. Takes a gboolean saying whether to expunge or just sync the mbox file. Change some g_errors to g_warning so we don't abort. Make the quick X-Evolution updating code lseek around correctly. Update the mbox mtime in the summary file even in the quick case. * providers/mbox/camel-mbox-summary.h: make CAMEL_MESSAGE_FOLDER_NOXEV not conflict with CAMEL_MESSAGE_FOLDER_FLAGGED defined in camel-mime-message.h * providers/mbox/camel-mbox-folder.c (mbox_close): call camel_mbox_summary_sync to save flag state if not expunging. (mbox_expunge): Update for camel_mbox_summary_expunge rename. svn path=/trunk/; revision=3558 --- camel/providers/mbox/camel-mbox-summary.c | 43 ++++++++++++++++++------------- 1 file changed, 25 insertions(+), 18 deletions(-) (limited to 'camel/providers/mbox/camel-mbox-summary.c') diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c index e78bede490..c2fd326104 100644 --- a/camel/providers/mbox/camel-mbox-summary.c +++ b/camel/providers/mbox/camel-mbox-summary.c @@ -524,7 +524,7 @@ copy_block(int fromfd, int tofd, off_t start, size_t bytes) } int -camel_mbox_summary_expunge(CamelMboxSummary *mbs) +camel_mbox_summary_sync(CamelMboxSummary *mbs, gboolean expunge) { CamelMimeParser *mp=NULL; int i, count; @@ -539,6 +539,7 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) int len; guint32 uid, flags; int quick = TRUE, work = FALSE; + struct stat st; /* make sure we're in sync */ count = camel_folder_summary_count(s); @@ -550,16 +551,17 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) } /* check if we have any work to do */ - d(printf("Performing expunge, %d messages in inbox\n", count)); + d(printf("Performing sync, %d messages in inbox\n", count)); for (i=0;quick && iinfo.flags & (CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_FOLDER_NOXEV)) + if ((expunge && (info->info.flags & CAMEL_MESSAGE_DELETED)) || + (info->info.flags & CAMEL_MESSAGE_FOLDER_NOXEV)) quick = FALSE; else work |= (info->info.flags & CAMEL_MESSAGE_FOLDER_FLAGGED) != 0; } - d(printf("Options: %s %s\n", quick?"quick":"", work?"Work":"")); + d(printf("Options: %s %s %s\n", expunge?"expunge":"", quick?"quick":"", work?"Work":"")); if (quick && !work) return 0; @@ -588,8 +590,11 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) } for (i=0;ifrompos) { - g_error("Summary/mbox mismatch, aborting expunge"); + g_warning("Summary/mbox mismatch, aborting sync"); goto error; } if (camel_mime_parser_step(mp, &buffer, &len) == HSCAN_FROM_END) goto error; - xev = camel_mime_parser_header(mp, "X-Evolution", (int *)&xevoffset); + xev = camel_mime_parser_header(mp, "X-Evolution", &xevoffset); if (xev && header_evolution_decode(xev, &uid, &flags) != -1) { char name[64]; @@ -640,13 +645,16 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) xevnew = header_evolution_encode(strtoul(info->info.uid, NULL, 10), info->info.flags & 0xffff); if (quick) { if (!xevok) { - g_error("The summary told me I had an X-Evolution header, but i dont!"); + g_warning("The summary told me I had an X-Evolution header, but i dont!"); goto error; } buffer = g_strdup_printf("X-Evolution: %s", xevnew); + lastpos = lseek (fd, 0, SEEK_CUR); + lseek (fd, xevoffset, SEEK_SET); do { len = write(fd, buffer, strlen(buffer)); } while (len == -1 && errno == EINTR); + lseek (fd, lastpos, SEEK_SET); g_free(buffer); if (len == -1) { goto error; @@ -706,8 +714,6 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) } if (!quick) { - struct stat st; - if (close(fdout) == -1) { g_warning("Cannot close tmp folder: %s", strerror(errno)); goto error; @@ -719,17 +725,18 @@ camel_mbox_summary_expunge(CamelMboxSummary *mbs) } tmpname = 0; - if (stat(mbs->folder_path, &st) == -1) - goto error; - - camel_folder_summary_touch(s); - s->time = st.st_mtime; - mbs->folder_size = st.st_size; - camel_folder_summary_save(s); if (mbs->index) ibex_save(mbs->index); } + if (stat(mbs->folder_path, &st) == -1) + goto error; + + camel_folder_summary_touch(s); + s->time = st.st_mtime; + mbs->folder_size = st.st_size; + camel_folder_summary_save(s); + gtk_object_unref((GtkObject *)mp); return 0; -- cgit v1.2.3