From a6f0914f29a46e353a17e36d0cb4f85424f58f3f Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Thu, 3 Jul 2003 18:36:51 +0000 Subject: Strip the signature from the body text. Fixes bug #45523. While we're 2003-07-02 Jeffrey Stedfast * mail-tools.c (mail_tool_forward_message): Strip the signature from the body text. Fixes bug #45523. While we're here, also fix the code to quote exactly the same way as the mail_tool_quote_message() function. (mail_tool_quote_message): The last arg should not be 'want_plain', because that arg is for whether or not the body should be quoted. * folder-browser.c (message_list_drag_data_get): Apply a From-filter when dragging as a test/uri-list and message/rfc822. Fixes bug #45617. Also free the uids ptrarray for the text/uri-list case. svn path=/trunk/; revision=21739 --- mail/ChangeLog | 15 +++++++++++++++ mail/folder-browser.c | 46 ++++++++++++++++++++++++++++++---------------- mail/mail-tools.c | 50 +++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 86 insertions(+), 25 deletions(-) diff --git a/mail/ChangeLog b/mail/ChangeLog index 48e05806ef..29173456fd 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,18 @@ +2003-07-02 Jeffrey Stedfast + + * mail-tools.c (mail_tool_forward_message): Strip the signature + from the body text. Fixes bug #45523. While we're here, also fix + the code to quote exactly the same way as the + mail_tool_quote_message() function. + (mail_tool_quote_message): The last arg should not be + 'want_plain', because that arg is for whether or not the body + should be quoted. + + * folder-browser.c (message_list_drag_data_get): Apply a + From-filter when dragging as a test/uri-list and + message/rfc822. Fixes bug #45617. Also free the uids ptrarray for + the text/uri-list case. + 2003-07-01 Dan Winship * mail-display.c (pixbuf_for_mime_type): Gone 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: diff --git a/mail/mail-tools.c b/mail/mail-tools.c index 846d0d9dd7..758a4b512b 100644 --- a/mail/mail-tools.c +++ b/mail/mail-tools.c @@ -372,7 +372,7 @@ mail_tool_quote_message (CamelMimeMessage *message, const char *fmt, ...) * am sure --Larry */ want_plain = FALSE; - text = mail_get_message_body (contents, want_plain, want_plain); + text = mail_get_message_body (contents, want_plain, FALSE); /* Set the quoted reply text. */ if (text) { @@ -427,19 +427,51 @@ mail_tool_quote_message (CamelMimeMessage *message, const char *fmt, ...) gchar * mail_tool_forward_message (CamelMimeMessage *message, gboolean quoted) { - char *title, *body, *ret; - gboolean send_html; GConfClient *gconf; + char *text; gconf = mail_config_get_gconf_client (); - send_html = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/send_html", NULL); - body = mail_get_message_body (CAMEL_DATA_WRAPPER (message), !send_html, quoted); - title = _("Forwarded Message"); - ret = g_strdup_printf ("-----%s-----
%s", title, body ? body : ""); - g_free (body); + text = mail_get_message_body (CAMEL_DATA_WRAPPER (message), FALSE, FALSE); - return ret; + if (text != NULL) { + char *sig, *p, *ret_text; + + /* FIXME: this code should be merged with the quote_message() code above somehow... */ + + /* look for the signature and strip it off */ + sig = text; + while ((p = strstr (sig, "\n-- \n"))) + sig = p + 1; + + if (sig != text) + *sig = '\0'; + + if (quoted) { + char *colour; + + colour = gconf_client_get_string (gconf, "/apps/evolution/mail/display/citation_colour", NULL); + + ret_text = g_strdup_printf ("-----%s-----
" + "" + "\n%s%s%s" + "", + _("Forwarded Message"), + colour ? colour : "#737373", + "
", text, + "
"); + + g_free (colour); + } else { + ret_text = g_strdup_printf ("-----%s-----
%s", _("Forwarded Message"), text ? text : ""); + } + + g_free (text); + + return ret_text; + } + + return NULL; } -- cgit v1.2.3