diff options
-rw-r--r-- | mail/ChangeLog | 11 | ||||
-rw-r--r-- | mail/folder-browser-factory.c | 1 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 63 | ||||
-rw-r--r-- | mail/mail-callbacks.h | 3 | ||||
-rw-r--r-- | mail/mail-ops.h | 127 |
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 */ |