diff options
-rw-r--r-- | camel/ChangeLog | 4 | ||||
-rw-r--r-- | camel/providers/imap4/camel-imap4-folder.c | 20 |
2 files changed, 21 insertions, 3 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index bad3959169..447a1cc93f 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,9 @@ 2004-06-16 Jeffrey Stedfast <fejj@ximian.com> + * providers/imap4/camel-imap4-folder.c (imap4_refresh_info): Only + force a re-update of all FLAGS if this folder wasn't in the + SELECTED state. Otherwise, simply send a NOOP. + * providers/imap4/camel-imap4-summary.c: Added a 'first' member to the imap_fetch_all_t struct so we can use that as a base offset in our GPtrArray, allowing us to limit resource consumption which diff --git a/camel/providers/imap4/camel-imap4-folder.c b/camel/providers/imap4/camel-imap4-folder.c index 5e234a0d6f..fb47d3f994 100644 --- a/camel/providers/imap4/camel-imap4-folder.c +++ b/camel/providers/imap4/camel-imap4-folder.c @@ -597,17 +597,31 @@ imap4_refresh_info (CamelFolder *folder, CamelException *ex) { CamelIMAP4Engine *engine = ((CamelIMAP4Store *) folder->parent_store)->engine; CamelFolder *selected = (CamelFolder *) engine->folder; + CamelIMAP4Command *ic; + int id; CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock); if (folder != selected) { if (camel_imap4_engine_select_folder (engine, folder, ex) == -1) goto done; + + ((CamelIMAP4Summary *) folder->summary)->update_flags = TRUE; + } else { + ic = camel_imap4_engine_queue (engine, NULL, "NOOP\r\n"); + while ((id = camel_imap4_engine_iterate (engine)) < ic->id && id != -1) + ; + + if (id == -1 || ic->status != CAMEL_IMAP4_COMMAND_COMPLETE) + camel_exception_xfer (ex, &ic->ex); + + camel_imap4_command_unref (ic); + + if (camel_exception_is_set (ex)) + goto done; } - ((CamelIMAP4Summary *) folder->summary)->update_flags = TRUE; - if (camel_imap4_summary_flush_updates (folder->summary, ex) == -1) - goto done; + camel_imap4_summary_flush_updates (folder->summary, ex); done: |