aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog11
-rw-r--r--mail/folder-browser-factory.c1
-rw-r--r--mail/mail-callbacks.c63
-rw-r--r--mail/mail-callbacks.h3
-rw-r--r--mail/mail-ops.h127
5 files changed, 154 insertions, 51 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 9f00220887..b0a3bc8634 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,14 @@
+2001-03-11 Jeffrey Stedfast <fejj@ximian.com>
+
+ * mail-ops.h: Added protection.
+
+ * folder-browser-factory.c: Add ActionsEmptyTrash. By the way -
+ should we rename the bonobo verbs now that our menu structure has
+ changed?
+
+ * mail-callbacks.c (empty_trash): New callback to empty ALL of the
+ trash folders.
+
2001-03-10 Jeffrey Stedfast <fejj@ximian.com>
* mail-ops.c (send_queue_send): Remove our X-Evolution header
diff --git a/mail/folder-browser-factory.c b/mail/folder-browser-factory.c
index 4a0252b091..b97535bdda 100644
--- a/mail/folder-browser-factory.c
+++ b/mail/folder-browser-factory.c
@@ -98,6 +98,7 @@ BonoboUIVerb verbs [] = {
/* Folder Menu */
BONOBO_UI_UNSAFE_VERB ("FolderExpunge", expunge_folder),
BONOBO_UI_UNSAFE_VERB ("FolderConfig", configure_folder),
+ BONOBO_UI_UNSAFE_VERB ("ActionsEmptyTrash", empty_trash),
/* Toolbar specific */
BONOBO_UI_UNSAFE_VERB ("MailStop", stop_threads),
diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c
index 31a3b5513d..2f5292c4b2 100644
--- a/mail/mail-callbacks.c
+++ b/mail/mail-callbacks.c
@@ -1397,11 +1397,70 @@ edit_message (BonoboUIComponent *uih, void *user_data, const char *path)
}
void
-stop_threads(BonoboUIComponent *uih, void *user_data, const char *path)
+stop_threads (BonoboUIComponent *uih, void *user_data, const char *path)
{
- camel_operation_cancel(NULL);
+ camel_operation_cancel (NULL);
}
+static void
+empty_trash_expunged_cb (CamelFolder *folder, void *data)
+{
+ camel_object_unref (CAMEL_OBJECT (folder));
+}
+
+void
+empty_trash (BonoboUIComponent *uih, void *user_data, const char *path)
+{
+ MailConfigAccount *account;
+ CamelProvider *provider;
+ CamelService *service;
+ CamelFolder *vtrash;
+ const GSList *accounts;
+ CamelException *ex;
+
+ ex = camel_exception_new ();
+
+ /* expunge all remote stores */
+ accounts = mail_config_get_accounts ();
+ while (accounts) {
+ account = accounts->data;
+
+ /* make sure this is a valid source */
+ if (account->source && account->source->url) {
+ service = camel_session_get_service (session, account->source->url,
+ CAMEL_PROVIDER_STORE, ex);
+
+ if (service) {
+ provider = camel_service_get_provider (service);
+
+ /* make sure this store is a remote store */
+ if (provider->flags & CAMEL_PROVIDER_IS_STORAGE &&
+ provider->flags & CAMEL_PROVIDER_IS_REMOTE) {
+ char *url;
+
+ url = g_strdup_printf ("vtrash:%s", account->source->url);
+ vtrash = mail_tool_uri_to_folder (url, ex);
+ g_free (url);
+
+ if (vtrash)
+ mail_expunge_folder (vtrash, empty_trash_expunged_cb, NULL);
+ }
+
+ camel_object_unref (CAMEL_OBJECT (service));
+ }
+ }
+
+ camel_exception_clear (ex);
+ accounts = accounts->next;
+ }
+
+ /* Now empty the local trash folder */
+ vtrash = mail_tool_uri_to_folder ("vtrash:file:/", ex);
+ if (vtrash)
+ mail_expunge_folder (vtrash, empty_trash_expunged_cb, NULL);
+
+ camel_exception_free (ex);
+}
static void
create_folders (EvolutionStorage *storage, const char *prefix, CamelFolderInfo *fi)
diff --git a/mail/mail-callbacks.h b/mail/mail-callbacks.h
index bc04110b3c..feee9a8045 100644
--- a/mail/mail-callbacks.h
+++ b/mail/mail-callbacks.h
@@ -88,6 +88,8 @@ void configure_folder (BonoboUIComponent *uih, void *user_data, const char
void stop_threads (BonoboUIComponent *uih, void *user_data, const char *path);
+void empty_trash (BonoboUIComponent *uih, void *user_data, const char *path);
+
void mail_reply (CamelFolder *folder, CamelMimeMessage *msg, const char *uid, gboolean to_all);
void composer_send_cb (EMsgComposer *composer, gpointer data);
void composer_postpone_cb (EMsgComposer *composer, gpointer data);
@@ -97,7 +99,6 @@ void forward_messages (CamelFolder *folder, GPtrArray *uids, gboolean inline)
void mail_print_preview_msg (MailDisplay *md);
void mail_print_msg (MailDisplay *md);
-
/* CamelStore callbacks */
void folder_created (CamelStore *store, CamelFolderInfo *fi);
void folder_deleted (CamelStore *store, CamelFolderInfo *fi);
diff --git a/mail/mail-ops.h b/mail/mail-ops.h
index 74a197cb56..efca4faaab 100644
--- a/mail/mail-ops.h
+++ b/mail/mail-ops.h
@@ -23,6 +23,14 @@
* USA
*/
+#ifndef MAIL_OPS_H
+#define MAIL_OPS_H
+
+#ifdef __cplusplus
+extern "C" {
+#pragma }
+#endif /* __cplusplus */
+
#include "camel/camel-folder.h"
#include "camel/camel-filter-driver.h"
#include "camel/camel-mime-message.h"
@@ -34,83 +42,106 @@
#include "e-util/e-msgport.h"
/* utility functions */
-FilterContext *mail_load_filter_context(void);
+FilterContext *mail_load_filter_context (void);
void mail_append_mail (CamelFolder *folder, CamelMimeMessage *message, CamelMessageInfo *info,
- void (*done)(CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, int ok, void *data), void *data);
+ void (*done)(CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, int ok, void *data),
+ void *data);
void mail_do_transfer_messages (CamelFolder *source, GPtrArray *uids,
gboolean delete_from_source,
gchar *dest_uri);
/* get a single message, asynchronously */
-void mail_get_message(CamelFolder *folder, const char *uid,
- void (*done) (CamelFolder *folder, char *uid, CamelMimeMessage *msg, void *data), void *data,
- EThread *thread);
+void mail_get_message (CamelFolder *folder, const char *uid,
+ void (*done) (CamelFolder *folder, char *uid, CamelMimeMessage *msg, void *data),
+ void *data,
+ EThread *thread);
/* get several messages */
-void mail_get_messages(CamelFolder *folder, GPtrArray *uids,
- void (*done) (CamelFolder *folder, GPtrArray *uids, GPtrArray *msgs, void *data), void *data);
+void mail_get_messages (CamelFolder *folder, GPtrArray *uids,
+ void (*done) (CamelFolder *folder, GPtrArray *uids, GPtrArray *msgs, void *data),
+ void *data);
/* same for a folder */
-int mail_get_folder(const char *uri,
- void (*done) (char *uri, CamelFolder *folder, void *data), void *data);
+int mail_get_folder (const char *uri,
+ void (*done) (char *uri, CamelFolder *folder, void *data), void *data);
/* and for a store */
-int mail_get_store(const char *uri,
- void (*done) (char *uri, CamelStore *store, void *data), void *data);
+int mail_get_store (const char *uri,
+ void (*done) (char *uri, CamelStore *store, void *data), void *data);
/* build an attachment */
-void mail_build_attachment(CamelFolder *folder, GPtrArray *uids,
- void (*done)(CamelFolder *folder, GPtrArray *messages, CamelMimePart *part, char *subject, void *data), void *data);
+void mail_build_attachment (CamelFolder *folder, GPtrArray *uids,
+ void (*done)(CamelFolder *folder, GPtrArray *messages,
+ CamelMimePart *part, char *subject, void *data),
+ void *data);
+
+void mail_sync_folder (CamelFolder *folder,
+ void (*done) (CamelFolder *folder, void *data),
+ void *data);
-void mail_sync_folder(CamelFolder *folder,
- void (*done) (CamelFolder *folder, void *data), void *data);
-void mail_expunge_folder(CamelFolder *folder,
- void (*done) (CamelFolder *folder, void *data), void *data);
+void mail_expunge_folder (CamelFolder *folder,
+ void (*done) (CamelFolder *folder, void *data),
+ void *data);
/* get folder info asynchronously */
-int mail_get_folderinfo(CamelStore *store,
- void (*done)(CamelStore *store, CamelFolderInfo *info, void *data), void *data);
+int mail_get_folderinfo (CamelStore *store,
+ void (*done)(CamelStore *store, CamelFolderInfo *info, void *data),
+ void *data);
/* create a new mail folder */
-void mail_create_folder(const char *uri,
- void (*done) (char *uri, CamelFolder *folder, void *data), void *data);
+void mail_create_folder (const char *uri,
+ void (*done) (char *uri, CamelFolder *folder, void *data),
+ void *data);
/* save messages */
-int mail_save_messages(CamelFolder *folder, GPtrArray *uids, const char *path,
- void (*done) (CamelFolder *folder, GPtrArray *uids, char *path, void *data), void *data);
-int mail_save_part(CamelMimePart *part, const char *path,
- void (*done)(CamelMimePart *part, char *path, int saved, void *data), void *data);
+int mail_save_messages (CamelFolder *folder, GPtrArray *uids, const char *path,
+ void (*done) (CamelFolder *folder, GPtrArray *uids, char *path, void *data),
+ void *data);
-int mail_send_mail(const char *uri, CamelMimeMessage *message,
- void (*done) (char *uri, CamelMimeMessage *message, gboolean sent, void *data), void *data);
+int mail_save_part (CamelMimePart *part, const char *path,
+ void (*done)(CamelMimePart *part, char *path, int saved, void *data),
+ void *data);
+
+int mail_send_mail (const char *uri, CamelMimeMessage *message,
+ void (*done) (char *uri, CamelMimeMessage *message, gboolean sent, void *data),
+ void *data);
/* scan subfolders and add them to the storage, synchronous */
/* FIXME: Move this to component-factory.c */
-void mail_scan_subfolders(CamelStore *store, EvolutionStorage *storage);
+void mail_scan_subfolders (CamelStore *store, EvolutionStorage *storage);
/* not sure about this one though */
-int mail_update_subfolders(CamelStore *store, EvolutionStorage *storage,
- void (*done)(CamelStore *, void *data), void *data);
+int mail_update_subfolders (CamelStore *store, EvolutionStorage *storage,
+ void (*done)(CamelStore *, void *data),
+ void *data);
/* yeah so this is messy, but it does a lot, maybe i can consolidate all user_data's to be the one */
-void mail_send_queue(CamelFolder *queue, const char *destination,
- FilterContext *fc, const char *type,
- CamelOperation *cancel,
- CamelFilterGetFolderFunc get_folder, void *get_data,
- CamelFilterStatusFunc *status, void *status_data,
- void (*done)(char *destination, void *data), void *data);
-
-void mail_fetch_mail(const char *source, int keep,
- FilterContext *fc, const char *type,
- CamelOperation *cancel,
- CamelFilterGetFolderFunc get_folder, void *get_data,
- CamelFilterStatusFunc *status, void *status_data,
- void (*done)(char *source, void *data), void *data);
-
-void mail_filter_folder(CamelFolder *source_folder, GPtrArray *uids,
- FilterContext *fc, const char *type,
- CamelOperation *cancel);
+void mail_send_queue (CamelFolder *queue, const char *destination,
+ FilterContext *fc, const char *type,
+ CamelOperation *cancel,
+ CamelFilterGetFolderFunc get_folder, void *get_data,
+ CamelFilterStatusFunc *status, void *status_data,
+ void (*done)(char *destination, void *data),
+ void *data);
+
+void mail_fetch_mail (const char *source, int keep,
+ FilterContext *fc, const char *type,
+ CamelOperation *cancel,
+ CamelFilterGetFolderFunc get_folder, void *get_data,
+ CamelFilterStatusFunc *status, void *status_data,
+ void (*done)(char *source, void *data),
+ void *data);
+
+void mail_filter_folder (CamelFolder *source_folder, GPtrArray *uids,
+ FilterContext *fc, const char *type,
+ CamelOperation *cancel);
/* convenience function for above */
-void mail_filter_on_demand(CamelFolder *folder, GPtrArray *uids);
+void mail_filter_on_demand (CamelFolder *folder, GPtrArray *uids);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* MAIL_OPS_H */