aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog7
-rw-r--r--mail/component-factory.c2
-rw-r--r--mail/mail-callbacks.c35
3 files changed, 33 insertions, 11 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index c502ff40f9..96af73c18a 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,10 @@
+2001-08-06 Jeffrey Stedfast <fejj@ximian.com>
+
+ * mail-callbacks.c (empty_trash): Yuck. Special case whether or
+ not we want to expunge all the trash folders syncronously or
+ asyncronously based on whether or not we are doing Empty-On-Exit
+ or emptying trash by user request respectively.
+
2001-08-06 Jason Leach <jleach@ximian.com>
* mail-folder-cache.c (make_folder_name): Removed this function,
diff --git a/mail/component-factory.c b/mail/component-factory.c
index 4c947c1fa1..4275079894 100644
--- a/mail/component-factory.c
+++ b/mail/component-factory.c
@@ -682,7 +682,7 @@ static void
debug_cb (EvolutionShellComponent *shell_component, gpointer user_data)
{
extern gboolean camel_verbose_debug;
-
+
camel_verbose_debug = 1;
}
diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c
index ccb9977bbc..e1bb896ba5 100644
--- a/mail/mail-callbacks.c
+++ b/mail/mail-callbacks.c
@@ -2019,9 +2019,13 @@ empty_trash (BonoboUIComponent *uih, void *user_data, const char *path)
CamelProvider *provider;
CamelFolder *vtrash;
const GSList *accounts;
- CamelException *ex;
+ CamelException ex;
+ gboolean async;
- ex = camel_exception_new ();
+ /* the only time all three args are NULL is for empty-on-exit */
+ async = !(uih == NULL && user_data == NULL && path == NULL);
+
+ camel_exception_init (&ex);
/* expunge all remote stores */
accounts = mail_config_get_accounts ();
@@ -2030,27 +2034,38 @@ empty_trash (BonoboUIComponent *uih, void *user_data, const char *path)
/* make sure this is a valid source */
if (account->source && account->source->url) {
- provider = camel_session_get_provider (session, account->source->url, NULL);
+ provider = camel_session_get_provider (session, account->source->url, &ex);
if (provider) {
/* make sure this store is a remote store */
if (provider->flags & CAMEL_PROVIDER_IS_STORAGE &&
provider->flags & CAMEL_PROVIDER_IS_REMOTE) {
- vtrash = mail_tool_get_trash (account->source->url, NULL);
+ vtrash = mail_tool_get_trash (account->source->url, &ex);
- if (vtrash)
- mail_expunge_folder (vtrash, empty_trash_expunged_cb, NULL);
+ if (vtrash) {
+ if (async)
+ mail_expunge_folder (vtrash, empty_trash_expunged_cb, NULL);
+ else
+ camel_folder_sync (vtrash, TRUE, NULL);
+ }
}
}
+
+ /* clear the exception for the next round */
+ camel_exception_clear (&ex);
}
accounts = accounts->next;
}
/* Now empty the local trash folder */
- vtrash = mail_tool_get_trash ("file:/", ex);
- if (vtrash)
- mail_expunge_folder (vtrash, empty_trash_expunged_cb, NULL);
+ vtrash = mail_tool_get_trash ("file:/", &ex);
+ if (vtrash) {
+ if (async)
+ mail_expunge_folder (vtrash, empty_trash_expunged_cb, NULL);
+ else
+ camel_folder_sync (vtrash, TRUE, NULL);
+ }
- camel_exception_free (ex);
+ camel_exception_clear (&ex);
}
static void