diff options
Diffstat (limited to 'mail/mail-ops.c')
-rw-r--r-- | mail/mail-ops.c | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/mail/mail-ops.c b/mail/mail-ops.c index 1438805321..ad86c772d6 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -1725,175 +1725,6 @@ mail_empty_trash (EMailSession *session, mail_msg_slow_ordered_push (m); } -/* ** SAVE MESSAGES ******************************************************* */ - -struct _save_messages_msg { - MailMsg base; - - CamelFolder *folder; - GPtrArray *uids; - gchar *path; - void (*done)(CamelFolder *folder, GPtrArray *uids, gchar *path, gpointer data); - gpointer data; -}; - -static gchar * -save_messages_desc (struct _save_messages_msg *m) -{ - return g_strdup_printf(ngettext("Saving %d message", - "Saving %d messages", m->uids->len), - m->uids->len); -} - -static void -save_prepare_part (CamelMimePart *mime_part) -{ - CamelDataWrapper *wrapper; - gint parts, i; - - wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part)); - if (!wrapper) - return; - - if (CAMEL_IS_MULTIPART (wrapper)) { - parts = camel_multipart_get_number (CAMEL_MULTIPART (wrapper)); - for (i = 0; i < parts; i++) { - CamelMimePart *part = camel_multipart_get_part (CAMEL_MULTIPART (wrapper), i); - - save_prepare_part (part); - } - } else { - if (CAMEL_IS_MIME_MESSAGE (wrapper)) { - /* prepare the message parts' subparts */ - save_prepare_part (CAMEL_MIME_PART (wrapper)); - } else { - CamelContentType *type; - - /* We want to save textual parts as 8bit instead of encoded */ - type = camel_data_wrapper_get_mime_type_field (wrapper); - if (camel_content_type_is (type, "text", "*")) - camel_mime_part_set_encoding (mime_part, CAMEL_TRANSFER_ENCODING_8BIT); - } - } -} - -static void -save_messages_exec (struct _save_messages_msg *m, - GCancellable *cancellable, - GError **error) -{ - CamelStream *filtered_stream; - CamelMimeFilter *from_filter; - CamelStream *stream; - gint i; - gchar *from, *path; - - if (strstr (m->path, "://")) - path = m->path; - else - path = g_filename_to_uri (m->path, NULL, NULL); - - stream = camel_stream_vfs_new_with_uri (path, CAMEL_STREAM_VFS_CREATE); - from_filter = camel_mime_filter_from_new (); - filtered_stream = camel_stream_filter_new (stream); - camel_stream_filter_add ( - CAMEL_STREAM_FILTER (filtered_stream), from_filter); - g_object_unref (from_filter); - - if (path != m->path) - g_free (path); - - for (i=0; i<m->uids->len; i++) { - CamelMimeMessage *message; - gint pc = ((i+1) * 100) / m->uids->len; - - message = camel_folder_get_message_sync ( - m->folder, m->uids->pdata[i], - cancellable, error); - camel_operation_progress (cancellable, pc); - if (message == NULL) - break; - - save_prepare_part (CAMEL_MIME_PART (message)); - - /* we need to flush after each stream write since we are writing to the same fd */ - from = camel_mime_message_build_mbox_from (message); - if (camel_stream_write_string ( - stream, from, - cancellable, error) == -1 - || camel_stream_flush ( - stream, cancellable, error) == -1 - || camel_data_wrapper_write_to_stream_sync ( - (CamelDataWrapper *) message, - (CamelStream *) filtered_stream, - cancellable, error) == -1 - || camel_stream_flush ( - (CamelStream *) filtered_stream, - cancellable, error) == -1 - || camel_stream_write_string ( - stream, "\n", - cancellable, error) == -1 - || camel_stream_flush (stream, - cancellable, error) == -1) { - g_prefix_error ( - error, _("Error saving messages to: %s:\n"), - m->path); - g_free (from); - g_object_unref ((CamelObject *) message); - break; - } - g_free (from); - g_object_unref (message); - } - - g_object_unref (filtered_stream); - g_object_unref (stream); -} - -static void -save_messages_done (struct _save_messages_msg *m) -{ - if (m->done) - m->done (m->folder, m->uids, m->path, m->data); -} - -static void -save_messages_free (struct _save_messages_msg *m) -{ - em_utils_uids_free (m->uids); - g_object_unref (m->folder); - g_free (m->path); -} - -static MailMsgInfo save_messages_info = { - sizeof (struct _save_messages_msg), - (MailMsgDescFunc) save_messages_desc, - (MailMsgExecFunc) save_messages_exec, - (MailMsgDoneFunc) save_messages_done, - (MailMsgFreeFunc) save_messages_free -}; - -gint -mail_save_messages (CamelFolder *folder, GPtrArray *uids, const gchar *path, - void (*done) (CamelFolder *folder, GPtrArray *uids, gchar *path, gpointer data), gpointer data) -{ - struct _save_messages_msg *m; - gint id; - - m = mail_msg_new (&save_messages_info); - m->folder = folder; - g_object_ref (folder); - m->uids = uids; - m->path = g_strdup (path); - m->data = data; - m->done = done; - - id = m->base.seq; - mail_msg_unordered_push (m); - - return id; -} - /* ** Execute Shell Command ***************************************************** */ void |