forked from pool/evolution
Dominique Leuenberger
2de28c3f59
Add post-3.6.3 patches from upstream git to fix important bugs, including a couple of crashes. Build tested locally for openSUSE:Factory. OBS-URL: https://build.opensuse.org/request/show/154964 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution?expand=0&rev=194
153 lines
5.0 KiB
Diff
153 lines
5.0 KiB
Diff
From 9f5d682172643701e51452c4803db904cd6dbeac Mon Sep 17 00:00:00 2001
|
|
From: Milan Crha <mcrha@redhat.com>
|
|
Date: Wed, 23 Jan 2013 19:06:47 +0000
|
|
Subject: Bug #680537 - Reply to individual message in digest generates empty body
|
|
|
|
---
|
|
diff --git a/modules/mail/e-mail-attachment-handler.c b/modules/mail/e-mail-attachment-handler.c
|
|
index 8bc2aad..1623cca 100644
|
|
--- a/modules/mail/e-mail-attachment-handler.c
|
|
+++ b/modules/mail/e-mail-attachment-handler.c
|
|
@@ -60,40 +60,87 @@ static GtkTargetEntry target_table[] = {
|
|
{ (gchar *) "x-uid-list", 0, 0 }
|
|
};
|
|
|
|
-static void
|
|
-mail_attachment_handler_forward (GtkAction *action,
|
|
- EAttachmentHandler *handler)
|
|
+static CamelMimeMessage *
|
|
+mail_attachment_handler_get_selected_message (EAttachmentHandler *handler)
|
|
{
|
|
- EMailAttachmentHandlerPrivate *priv;
|
|
- EShellSettings *shell_settings;
|
|
EAttachment *attachment;
|
|
EAttachmentView *view;
|
|
CamelMimePart *mime_part;
|
|
CamelDataWrapper *wrapper;
|
|
- EMailForwardStyle style;
|
|
- const gchar *property_name;
|
|
+ CamelMimeMessage *message = NULL;
|
|
+ CamelContentType *content_type;
|
|
GList *selected;
|
|
|
|
view = e_attachment_handler_get_view (handler);
|
|
- priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler);
|
|
|
|
selected = e_attachment_view_get_selected_attachments (view);
|
|
- g_return_if_fail (g_list_length (selected) == 1);
|
|
+ g_return_val_if_fail (g_list_length (selected) == 1, NULL);
|
|
|
|
attachment = E_ATTACHMENT (selected->data);
|
|
mime_part = e_attachment_get_mime_part (attachment);
|
|
wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part));
|
|
|
|
+ content_type = camel_data_wrapper_get_mime_type_field (wrapper);
|
|
+ if (content_type && camel_content_type_is (content_type, "message", "rfc822")) {
|
|
+ CamelDataWrapper *inner;
|
|
+ CamelContentType *inner_content_type;
|
|
+
|
|
+ inner = camel_medium_get_content (CAMEL_MEDIUM (wrapper));
|
|
+ inner_content_type = camel_data_wrapper_get_mime_type_field (inner);
|
|
+ if (!camel_content_type_is (inner_content_type, content_type->type, content_type->subtype)) {
|
|
+ CamelStream *mem;
|
|
+
|
|
+ /* Create a message copy in case the inner content-type doesn't match
|
|
+ the mime_part's content type, which can happen for multipart/digest,
|
|
+ where it confuses the formatter on reply, which skips all rfc822 subparts.
|
|
+ */
|
|
+ mem = camel_stream_mem_new ();
|
|
+ camel_data_wrapper_write_to_stream_sync (CAMEL_DATA_WRAPPER (wrapper), mem, NULL, NULL);
|
|
+
|
|
+ g_seekable_seek (G_SEEKABLE (mem), 0, G_SEEK_SET, NULL, NULL);
|
|
+ message = camel_mime_message_new ();
|
|
+ if (!camel_data_wrapper_construct_from_stream_sync (CAMEL_DATA_WRAPPER (message), mem, NULL, NULL)) {
|
|
+ g_object_unref (message);
|
|
+ message = NULL;
|
|
+ }
|
|
+
|
|
+ g_object_unref (mem);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (!message)
|
|
+ message = g_object_ref (wrapper);
|
|
+
|
|
+ g_list_foreach (selected, (GFunc) g_object_unref, NULL);
|
|
+ g_list_free (selected);
|
|
+
|
|
+ return message;
|
|
+}
|
|
+
|
|
+static void
|
|
+mail_attachment_handler_forward (GtkAction *action,
|
|
+ EAttachmentHandler *handler)
|
|
+{
|
|
+ EMailAttachmentHandlerPrivate *priv;
|
|
+ EShellSettings *shell_settings;
|
|
+ EMailForwardStyle style;
|
|
+ CamelMimeMessage *message;
|
|
+ const gchar *property_name;
|
|
+
|
|
+ priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler);
|
|
+
|
|
+ message = mail_attachment_handler_get_selected_message (handler);
|
|
+ g_return_if_fail (message != NULL);
|
|
+
|
|
property_name = "mail-forward-style";
|
|
shell_settings = e_shell_get_shell_settings (priv->shell);
|
|
style = e_shell_settings_get_int (shell_settings, property_name);
|
|
|
|
em_utils_forward_message (
|
|
priv->shell, CAMEL_SESSION (priv->session),
|
|
- CAMEL_MIME_MESSAGE (wrapper), style, NULL, NULL);
|
|
+ message, style, NULL, NULL);
|
|
|
|
- g_list_foreach (selected, (GFunc) g_object_unref, NULL);
|
|
- g_list_free (selected);
|
|
+ g_object_unref (message);
|
|
}
|
|
|
|
static void
|
|
@@ -102,34 +149,24 @@ mail_attachment_handler_reply (EAttachmentHandler *handler,
|
|
{
|
|
EMailAttachmentHandlerPrivate *priv;
|
|
EShellSettings *shell_settings;
|
|
- EAttachment *attachment;
|
|
- EAttachmentView *view;
|
|
- CamelMimePart *mime_part;
|
|
- CamelDataWrapper *wrapper;
|
|
EMailReplyStyle style;
|
|
+ CamelMimeMessage *message;
|
|
const gchar *property_name;
|
|
- GList *selected;
|
|
|
|
- view = e_attachment_handler_get_view (handler);
|
|
priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler);
|
|
|
|
- selected = e_attachment_view_get_selected_attachments (view);
|
|
- g_return_if_fail (g_list_length (selected) == 1);
|
|
-
|
|
- attachment = E_ATTACHMENT (selected->data);
|
|
- mime_part = e_attachment_get_mime_part (attachment);
|
|
- wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part));
|
|
+ message = mail_attachment_handler_get_selected_message (handler);
|
|
+ g_return_if_fail (message != NULL);
|
|
|
|
property_name = "mail-reply-style";
|
|
shell_settings = e_shell_get_shell_settings (priv->shell);
|
|
style = e_shell_settings_get_int (shell_settings, property_name);
|
|
|
|
em_utils_reply_to_message (
|
|
- priv->shell, CAMEL_MIME_MESSAGE (wrapper),
|
|
+ priv->shell, message,
|
|
NULL, NULL, reply_type, style, NULL, NULL);
|
|
|
|
- g_list_foreach (selected, (GFunc) g_object_unref, NULL);
|
|
- g_list_free (selected);
|
|
+ g_object_unref (message);
|
|
}
|
|
|
|
static void
|
|
--
|
|
cgit v0.9.0.2
|