aboutsummaryrefslogtreecommitdiffstats
path: root/mail/folder-browser.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/folder-browser.c')
-rw-r--r--mail/folder-browser.c46
1 files changed, 30 insertions, 16 deletions
diff --git a/mail/folder-browser.c b/mail/folder-browser.c
index b2b9f2f2f3..e28ff18431 100644
--- a/mail/folder-browser.c
+++ b/mail/folder-browser.c
@@ -317,6 +317,8 @@ message_list_drag_data_get (ETree *tree, int row, ETreePath path, int col,
{
const char *filename, *tmpdir;
CamelMimeMessage *message;
+ CamelMimeFilter *filter;
+ CamelStream *fstream;
CamelStream *stream;
char *uri_list;
int fd;
@@ -351,7 +353,7 @@ message_list_drag_data_get (ETree *tree, int row, ETreePath path, int col,
fd = open (uri_list + 7, O_WRONLY | O_CREAT | O_EXCL, 0600);
if (fd == -1) {
/* cleanup and abort */
- camel_object_unref (CAMEL_OBJECT (message));
+ camel_object_unref (message);
for (i = 1; i < uids->len; i++)
g_free (uids->pdata[i]);
g_ptr_array_free (uids, TRUE);
@@ -359,20 +361,28 @@ message_list_drag_data_get (ETree *tree, int row, ETreePath path, int col,
return;
}
- stream = camel_stream_fs_new_with_fd (fd);
+ fstream = camel_stream_fs_new_with_fd (fd);
- camel_stream_write (stream, "From - \n", 8);
+ stream = camel_stream_filter_new_with_stream (fstream);
+ filter = camel_mime_filter_from_new ();
+ camel_stream_filter_add (CAMEL_STREAM_FILTER (stream), filter);
+ camel_object_unref (filter);
+
+ camel_stream_write (fstream, "From - \n", 8);
camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), stream);
- camel_object_unref (CAMEL_OBJECT (message));
+ camel_object_unref (message);
for (i = 1; i < uids->len; i++) {
message = camel_folder_get_message (fb->folder, uids->pdata[i], NULL);
- camel_stream_write (stream, "From - \n", 8);
+ camel_stream_write (fstream, "From - \n", 8);
camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), stream);
- camel_object_unref (CAMEL_OBJECT (message));
+ camel_object_unref (message);
g_free (uids->pdata[i]);
}
- camel_object_unref (CAMEL_OBJECT (stream));
+ g_ptr_array_free (uids, TRUE);
+
+ camel_object_unref (stream);
+ camel_object_unref (fstream);
gtk_selection_data_set (selection_data, selection_data->target, 8,
uri_list, strlen (uri_list));
@@ -381,13 +391,16 @@ message_list_drag_data_get (ETree *tree, int row, ETreePath path, int col,
break;
case DND_TARGET_TYPE_MESSAGE_RFC822:
{
- /* FIXME: this'll be fucking slow for the user... pthread this? */
+ CamelMimeFilter *filter;
CamelStream *stream;
- GByteArray *bytes;
+ CamelStream *mem;
- bytes = g_byte_array_new ();
- stream = camel_stream_mem_new ();
- camel_stream_mem_set_byte_array (CAMEL_STREAM_MEM (stream), bytes);
+ mem = camel_stream_mem_new ();
+
+ stream = camel_stream_filter_new_with_stream (mem);
+ filter = camel_mime_filter_from_new ();
+ camel_stream_filter_add (CAMEL_STREAM_FILTER (stream), filter);
+ camel_object_unref (filter);
for (i = 0; i < uids->len; i++) {
CamelMimeMessage *message;
@@ -398,17 +411,18 @@ message_list_drag_data_get (ETree *tree, int row, ETreePath path, int col,
if (message) {
camel_stream_write (stream, "From - \n", 8);
camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), stream);
- camel_object_unref (CAMEL_OBJECT (message));
+ camel_object_unref (message);
}
}
g_ptr_array_free (uids, TRUE);
- camel_object_unref (CAMEL_OBJECT (stream));
+ camel_object_unref (stream);
gtk_selection_data_set (selection_data, selection_data->target, 8,
- bytes->data, bytes->len);
+ CAMEL_STREAM_MEM (mem)->buffer->data,
+ CAMEL_STREAM_MEM (mem)->buffer->len);
- g_byte_array_free (bytes, TRUE);
+ camel_object_unref (mem);
}
break;
case DND_TARGET_TYPE_X_EVOLUTION_MESSAGE: