aboutsummaryrefslogtreecommitdiffstats
path: root/mail/e-mail-reader-utils.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2011-05-18 07:50:33 +0800
committerMatthew Barnes <mbarnes@redhat.com>2011-05-18 21:25:59 +0800
commitf0a011f941bab3f6ac7228be4e1bec86a0de0d2a (patch)
treed5c64c9fc9922775171aa623223c0666bd833e64 /mail/e-mail-reader-utils.c
parentb3b917365ff2e813df0503e94267f2cb3bab4255 (diff)
downloadgsoc2013-evolution-f0a011f941bab3f6ac7228be4e1bec86a0de0d2a.tar
gsoc2013-evolution-f0a011f941bab3f6ac7228be4e1bec86a0de0d2a.tar.gz
gsoc2013-evolution-f0a011f941bab3f6ac7228be4e1bec86a0de0d2a.tar.bz2
gsoc2013-evolution-f0a011f941bab3f6ac7228be4e1bec86a0de0d2a.tar.lz
gsoc2013-evolution-f0a011f941bab3f6ac7228be4e1bec86a0de0d2a.tar.xz
gsoc2013-evolution-f0a011f941bab3f6ac7228be4e1bec86a0de0d2a.tar.zst
gsoc2013-evolution-f0a011f941bab3f6ac7228be4e1bec86a0de0d2a.zip
Remove mail_save_messages().
Use e_mail_folder_save_messages() instead.
Diffstat (limited to 'mail/e-mail-reader-utils.c')
-rw-r--r--mail/e-mail-reader-utils.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c
index 281acbbe52..8e88d7d31a 100644
--- a/mail/e-mail-reader-utils.c
+++ b/mail/e-mail-reader-utils.c
@@ -31,6 +31,7 @@
#include "e-util/e-alert-dialog.h"
#include "filter/e-filter-rule.h"
#include "misc/e-web-view.h"
+#include "shell/e-shell-utils.h"
#include "mail/e-mail-backend.h"
#include "mail/e-mail-browser.h"
@@ -753,6 +754,116 @@ whole_message:
reply_type, reply_style, EM_FORMAT (formatter));
}
+static void
+mail_reader_save_messages_cb (CamelFolder *folder,
+ GAsyncResult *result,
+ AsyncContext *context)
+{
+ EAlertSink *alert_sink;
+ GError *error = NULL;
+
+ alert_sink = e_mail_reader_get_alert_sink (context->reader);
+
+ e_mail_folder_save_messages_finish (folder, result, &error);
+
+ if (e_activity_handle_cancellation (context->activity, error)) {
+ g_error_free (error);
+
+ } else if (error != NULL) {
+ e_alert_submit (
+ alert_sink,
+ "mail:save-messages",
+ error->message, NULL);
+ g_error_free (error);
+ }
+
+ async_context_free (context);
+}
+
+void
+e_mail_reader_save_messages (EMailReader *reader)
+{
+ EShell *shell;
+ EActivity *activity;
+ AsyncContext *context;
+ EMailBackend *backend;
+ GCancellable *cancellable;
+ EShellBackend *shell_backend;
+ CamelMessageInfo *info;
+ CamelFolder *folder;
+ GFile *destination;
+ GPtrArray *uids;
+ const gchar *message_uid;
+ const gchar *title;
+ gchar *suggestion = NULL;
+
+ folder = e_mail_reader_get_folder (reader);
+ backend = e_mail_reader_get_backend (reader);
+
+ uids = e_mail_reader_get_selected_uids (reader);
+ g_return_if_fail (uids != NULL && uids->len > 0);
+ message_uid = g_ptr_array_index (uids, 0);
+
+ /* XXX Either e_mail_reader_get_selected_uids()
+ * or MessageList should do this itself. */
+ g_ptr_array_set_free_func (uids, (GDestroyNotify) g_free);
+
+ title = ngettext ("Save Message", "Save Messages", uids->len);
+
+ /* Suggest as a filename the subject of the first message. */
+ info = camel_folder_get_message_info (folder, message_uid);
+ if (info != NULL) {
+ const gchar *subject;
+
+ subject = camel_message_info_subject (info);
+ if (subject != NULL)
+ suggestion = g_strconcat (subject, ".mbox", NULL);
+ camel_folder_free_message_info (folder, info);
+ }
+
+ if (suggestion == NULL) {
+ const gchar *basename;
+
+ /* Translators: This is part of a suggested file name
+ * used when saving a message or multiple messages to
+ * mbox format, when the first message doesn't have a
+ * subject. The extension ".mbox" is appended to the
+ * string; for example "Message.mbox". */
+ basename = ngettext ("Message", "Messages", uids->len);
+ suggestion = g_strconcat (basename, ".mbox", NULL);
+ }
+
+ shell_backend = E_SHELL_BACKEND (backend);
+ shell = e_shell_backend_get_shell (shell_backend);
+
+ destination = e_shell_run_save_dialog (
+ shell, title, suggestion,
+ "*.mbox:application/mbox,message/rfc822", NULL, NULL);
+
+ if (destination == NULL) {
+ g_ptr_array_unref (uids);
+ return;
+ }
+
+ /* Save messages asynchronously. */
+
+ activity = e_mail_reader_new_activity (reader);
+ cancellable = e_activity_get_cancellable (activity);
+
+ context = g_slice_new0 (AsyncContext);
+ context->activity = activity;
+ context->reader = g_object_ref (reader);
+
+ e_mail_folder_save_messages (
+ folder, uids,
+ destination, G_PRIORITY_DEFAULT,
+ cancellable, (GAsyncReadyCallback)
+ mail_reader_save_messages_cb, context);
+
+ g_object_unref (destination);
+ g_ptr_array_unref (uids);
+}
+
void
e_mail_reader_select_next_message (EMailReader *reader,
gboolean or_else_previous)