X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-msg.c;h=78b4b75ccd64006b95578ff443cfa51947c9b1ec;hp=5bda254ac1ea23c38695f44e0c160438c592d4a8;hb=4d39841513a3a7f7aa9d38ab97cb9fcc9171e80b;hpb=1086c27e5c28f025850f513f513583720b5057a4 diff --git a/src/modest-tny-msg.c b/src/modest-tny-msg.c index 5bda254..78b4b75 100644 --- a/src/modest-tny-msg.c +++ b/src/modest-tny-msg.c @@ -350,7 +350,9 @@ add_attachments (TnyMimePart *part, GList *attachments_list, gboolean add_inline tny_mime_part_set_header_pair (attachment_part, "Content-Disposition", "attachment"); } - tny_mime_part_set_transfer_encoding (TNY_MIME_PART (attachment_part), "base64"); + if (!TNY_IS_MSG (old_attachment)) { + tny_mime_part_set_transfer_encoding (TNY_MIME_PART (attachment_part), "base64"); + } ret = tny_mime_part_add_part (TNY_MIME_PART (part), attachment_part); attached++; if (old_cid) @@ -652,10 +654,12 @@ create_reply_forward_mail (TnyMsg *msg, TnyHeader *header, const gchar *from, gchar *old_subject; gchar *new_subject; TnyMimePart *body = NULL; + TnyMimePart *html_body = NULL; ModestFormatter *formatter; gchar *subject_prefix; gboolean no_text_part; gchar *parent_uid; + gboolean forward_as_attach = FALSE; if (header) g_object_ref (header); @@ -664,8 +668,10 @@ create_reply_forward_mail (TnyMsg *msg, TnyHeader *header, const gchar *from, /* Get body from original msg. Always look for the text/plain part of the message to create the reply/forwarded mail */ - if (msg != NULL) + if (msg != NULL) { body = modest_tny_msg_find_body_part (msg, FALSE); + html_body = modest_tny_msg_find_body_part (msg, TRUE); + } if (modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_PREFER_FORMATTED_TEXT, NULL)) @@ -679,15 +685,24 @@ create_reply_forward_mail (TnyMsg *msg, TnyHeader *header, const gchar *from, /* when we're reply, include the text part if we have it, or nothing otherwise. */ if (is_reply) - new_msg = modest_formatter_quote (formatter, no_text_part ? NULL: body, header, + new_msg = modest_formatter_quote (formatter, body, header, attachments); else { - new_msg = modest_formatter_attach (formatter, msg, header); + if (no_text_part || (html_body && (strcmp (tny_mime_part_get_content_type (html_body), "text/html")==0))) { + forward_as_attach = TRUE; + new_msg = modest_formatter_attach (formatter, msg, header); + } else { + forward_as_attach = FALSE; + new_msg = modest_formatter_inline (formatter, body, header, + attachments); + } } g_object_unref (G_OBJECT(formatter)); if (body) g_object_unref (G_OBJECT(body)); + if (html_body) + g_object_unref (G_OBJECT(html_body)); /* Fill the header */ new_header = tny_msg_get_header (new_msg); @@ -725,7 +740,7 @@ create_reply_forward_mail (TnyMsg *msg, TnyHeader *header, const gchar *from, g_object_unref (G_OBJECT (header)); /* ugly to unref it here instead of in the calling func */ - if (!is_reply & !no_text_part) { + if (!is_reply & !forward_as_attach) { add_attachments (TNY_MIME_PART (new_msg), attachments, FALSE, NULL); } @@ -1239,11 +1254,15 @@ modest_tny_msg_header_get_all_recipients_list (TnyHeader *header) { GSList *recipients = NULL; gchar *from = NULL, *to = NULL, *cc = NULL, *bcc = NULL; - gchar *tmp = NULL, *old_tmp = NULL; + gchar *after_remove; + GString *buffer; + gboolean add_separator = TRUE; if (header == NULL) return NULL; + buffer = g_string_new (""); + from = tny_header_dup_from (header); to = tny_header_dup_to (header); cc = tny_header_dup_cc (header); @@ -1251,32 +1270,39 @@ modest_tny_msg_header_get_all_recipients_list (TnyHeader *header) recipients = NULL; if (from) { - tmp = g_strdup (from); - old_tmp = tmp; - g_free (from); + buffer = g_string_append (buffer, from); + add_separator = TRUE; } if (to) { - tmp = g_strjoin ("; ", old_tmp, to, NULL); - g_free (old_tmp); - old_tmp = tmp; - g_free (to); + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, to); } if (cc) { - tmp = g_strjoin ("; ", old_tmp, cc, NULL); - g_free (old_tmp); - old_tmp = tmp; - g_free (cc); + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, cc); } if (bcc) { - tmp = g_strjoin ("; ", old_tmp, bcc, NULL); - g_free (old_tmp); - old_tmp = tmp; - g_free (bcc); + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, bcc); } - old_tmp = modest_text_utils_remove_duplicate_addresses (tmp); - recipients = modest_text_utils_split_addresses_list (old_tmp); - g_free (tmp); + after_remove = modest_text_utils_remove_duplicate_addresses (buffer->str); + g_string_free (buffer, TRUE); + + recipients = modest_text_utils_split_addresses_list (after_remove); + g_free (after_remove); return recipients; }