TnyMsg*
modest_tny_msg_new (const gchar* mailto, const gchar* from, const gchar *cc,
- const gchar *bcc, const gchar* subject,
+ const gchar *bcc, const gchar* subject,
const gchar *references, const gchar *in_reply_to,
const gchar *body,
GList *attachments, gint *attached, GError **err)
TnyHeader *header;
gchar *content_type;
gint tmp_attached = 0;
-
+
/* Create new msg */
new_msg = modest_formatter_create_message (NULL, TRUE, (attachments != NULL), FALSE);
header = tny_msg_get_header (new_msg);
-
+
if ((from != NULL) && (strlen(from) > 0)) {
tny_header_set_from (TNY_HEADER (header), from);
tny_header_set_replyto (TNY_HEADER (header), from);
tny_header_set_to (TNY_HEADER (header), removed_to);
g_free (removed_to);
}
- if ((cc != NULL) && (strlen(cc) > 0))
+ if ((cc != NULL) && (strlen(cc) > 0))
tny_header_set_cc (TNY_HEADER (header), cc);
- if ((bcc != NULL) && (strlen(bcc) > 0))
+ if ((bcc != NULL) && (strlen(bcc) > 0))
tny_header_set_bcc (TNY_HEADER (header), bcc);
-
- if ((subject != NULL) && (strlen(subject) > 0))
+
+ if ((subject != NULL) && (strlen(subject) > 0))
tny_header_set_subject (TNY_HEADER (header), subject);
content_type = get_content_type(body);
if (in_reply_to)
tny_mime_part_set_header_pair (TNY_MIME_PART (new_msg), "In-Reply-To", in_reply_to);
-
+
/* Add the body of the new mail */
/* This is needed even if body is NULL or empty. */
add_body_part (new_msg, body, content_type);
g_free (content_type);
-
+
/* Add attachments */
if (attachments)
tmp_attached = add_attachments (TNY_MIME_PART (new_msg), attachments, FALSE, err);
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)
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);
/* 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))
/* 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 {
- /* for attachements; inline if there is a text part, and include the
- * full old mail if there was none */
- if (no_text_part) {
+ 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 {
+ } 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);
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);
}
old_from = tny_header_dup_from (header);
if (!old_from && !old_reply_to) {
- g_warning ("%s: failed to get either Reply-To: or From: from header",
+ g_debug ("%s: failed to get either Reply-To: or From: from header",
__FUNCTION__);
return NULL;
}
if (reply_mode == MODEST_TNY_MSG_REPLY_MODE_ALL) {
gchar *old_to = tny_header_dup_to (header);
if (!old_to)
- g_warning ("%s: no To: address found in source mail",
+ g_debug ("%s: no To: address found in source mail",
__FUNCTION__);
else {
/* append the old To: */
new_header = tny_msg_get_header(new_msg);
new_to = get_new_to (msg, header, from, reply_mode);
if (!new_to)
- g_warning ("%s: failed to get new To:", __FUNCTION__);
+ g_debug ("%s: failed to get new To:", __FUNCTION__);
else {
tny_header_set_to (new_header, new_to);
g_free (new_to);
g_string_append(type, "; charset=\"utf-8\"");
} else {
/* it should be impossible to reach this, but better safe than sorry */
- g_warning("invalid utf8 in message");
+ g_debug("invalid utf8 in message");
g_string_append(type, "; charset=\"latin1\"");
}
}
{
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);
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;
}