[evolution/wip/webkit2] Bug 738080 - message/rfc822 attachment drag and drop often does not work



commit 0cd8796b5c467e92daae6c09db2265f333030286
Author: Milan Crha <mcrha redhat com>
Date:   Fri Feb 27 12:38:39 2015 +0100

    Bug 738080 - message/rfc822 attachment drag and drop often does not work

 mail/em-utils.c |   33 +++++++++++++++++++++++----------
 1 files changed, 23 insertions(+), 10 deletions(-)
---
diff --git a/mail/em-utils.c b/mail/em-utils.c
index b320d00..b152359 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -582,6 +582,7 @@ em_utils_read_messages_from_stream (CamelFolder *folder,
 {
        CamelMimeParser *mp = camel_mime_parser_new ();
        gboolean success = TRUE;
+       gboolean any_read = FALSE;
 
        camel_mime_parser_scan_from (mp, TRUE);
        camel_mime_parser_init_with_stream (mp, stream, NULL);
@@ -589,6 +590,8 @@ em_utils_read_messages_from_stream (CamelFolder *folder,
        while (camel_mime_parser_step (mp, NULL, NULL) == CAMEL_MIME_PARSER_STATE_FROM) {
                CamelMimeMessage *msg;
 
+               any_read = TRUE;
+
                /* NB: de-from filter, once written */
                msg = camel_mime_message_new ();
                if (!camel_mime_part_construct_from_parser_sync (
@@ -610,6 +613,22 @@ em_utils_read_messages_from_stream (CamelFolder *folder,
 
        g_object_unref (mp);
 
+       /* No message had bean read, maybe it's not MBOX, but a plain message */
+       if (!any_read) {
+               CamelMimeMessage *msg;
+
+               if (G_IS_SEEKABLE (stream))
+                       g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, NULL);
+
+               msg = camel_mime_message_new ();
+               if (camel_data_wrapper_construct_from_stream_sync (
+                       (CamelDataWrapper *) msg, stream, NULL, NULL))
+                       /* FIXME camel_folder_append_message_sync() may block. */
+                       camel_folder_append_message_sync (
+                               folder, msg, NULL, NULL, NULL, NULL);
+               g_object_unref (msg);
+       }
+
        return success ? 0 : -1;
 }
 
@@ -689,7 +708,6 @@ em_utils_selection_get_message (GtkSelectionData *selection_data,
                                 CamelFolder *folder)
 {
        CamelStream *stream;
-       CamelMimeMessage *msg;
        const guchar *data;
        gint length;
 
@@ -699,15 +717,10 @@ em_utils_selection_get_message (GtkSelectionData *selection_data,
        if (data == NULL || length == -1)
                return;
 
-       stream = (CamelStream *)
-               camel_stream_mem_new_with_buffer ((gchar *) data, length);
-       msg = camel_mime_message_new ();
-       if (camel_data_wrapper_construct_from_stream_sync (
-               (CamelDataWrapper *) msg, stream, NULL, NULL))
-               /* FIXME camel_folder_append_message_sync() may block. */
-               camel_folder_append_message_sync (
-                       folder, msg, NULL, NULL, NULL, NULL);
-       g_object_unref (msg);
+       stream = camel_stream_mem_new_with_buffer ((const gchar *) data, length);
+
+       em_utils_read_messages_from_stream (folder, stream);
+
        g_object_unref (stream);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]