}
+static TnyMimePart*
+modest_tny_msg_find_body_part_in_alternative (TnyMimePart *msg, gboolean want_html)
+{
+ TnyList *parts;
+ TnyIterator *iter;
+ TnyMimePart *part = NULL;
+ TnyMimePart *first_part = NULL;
+ const gchar *desired_mime_type = want_html ? "text/html" : "text/plain";
+
+ parts = TNY_LIST (tny_simple_list_new());
+ tny_mime_part_get_parts (TNY_MIME_PART (msg), parts);
+
+ for (iter = tny_list_create_iterator(parts);
+ !tny_iterator_is_done (iter);
+ tny_iterator_next (iter)) {
+ gchar *content_type;
+ gboolean is_body;
+
+ part = TNY_MIME_PART (tny_iterator_get_current (iter));
+
+ if (first_part == NULL) {
+ g_object_ref (part);
+ first_part = part;
+ }
+
+ is_body = FALSE;
+ content_type = g_ascii_strdown (tny_mime_part_get_content_type (part), -1);
+ is_body = g_str_has_prefix (content_type, desired_mime_type);
+ if (is_body)
+ break;
+
+ g_object_unref (part);
+ part = NULL;
+
+ }
+ g_object_unref (iter);
+ g_object_unref (parts);
+
+ if (part == NULL) {
+ return first_part;
+ } else {
+ if (first_part) g_object_unref (first_part);
+ return part;
+ }
+}
+
TnyMimePart*
modest_tny_msg_find_body_part_from_mime_part (TnyMimePart *msg, gboolean want_html)
{
- const gchar *desired_mime_type = want_html ? "text/html" : "text/plain";
TnyMimePart *part = NULL;
TnyList *parts = NULL;
TnyIterator *iter = NULL;
g_free (header_content_type);
return NULL;
}
+ if (header_content_type_lower &&
+ g_str_has_prefix (header_content_type_lower, "multipart/alternative")) {
+ g_free (header_content_type_lower);
+ g_free (header_content_type);
+ return modest_tny_msg_find_body_part_in_alternative (msg, want_html);
+ }
g_free (header_content_type_lower);
g_free (header_content_type);
g_free (content_disp);
}
- if (g_str_has_prefix (content_type, desired_mime_type) &&
+ if (g_str_has_prefix (content_type, "text/") &&
!has_content_disp_name &&
!modest_tny_mime_part_is_attachment_for_modest (part)) {
- /* we found the desired mime-type! */
+ /* we found the body. Doesn't have to be the desired mime part, first
+ text/ part in a mixed is the body */
g_free (content_type);
break;
+ } else if (g_str_has_prefix(content_type, "multipart/alternative")) {
+
+ /* multipart? recurse! */
+ g_object_unref (part);
+ g_free (content_type);
+ part = modest_tny_msg_find_body_part_in_alternative (part, want_html);
+ if (part)
+ break;
+
} else if (g_str_has_prefix(content_type, "multipart")) {
/* multipart? recurse! */
g_object_unref (G_OBJECT(iter));
g_object_unref (G_OBJECT(parts));
- /* if were trying to find an HTML part and couldn't find it,
- * try to find a text/plain part instead
- */
- if (!part && want_html)
- return modest_tny_msg_find_body_part_from_mime_part (msg, FALSE);
- else
- return part; /* this maybe NULL, this is not an error; some message just don't have a body
- * part */
+ return part; /* this maybe NULL, this is not an error; some message just don't have a body
+ * part */
}
{
GSList *recipients = NULL;
gchar *from = NULL, *to = NULL, *cc = NULL, *bcc = NULL;
+ gchar *tmp = NULL, *old_tmp = NULL;
if (header == NULL)
return NULL;
bcc = tny_header_dup_bcc (header);
recipients = NULL;
- if (from)
- recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (from));
- if (to)
- recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (to));
- if (cc)
- recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (cc));
- if (bcc)
- recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (bcc));
-
- g_free (from);
- g_free (to);
- g_free (cc);
- g_free (bcc);
+ if (from) {
+ tmp = g_strdup (from);
+ old_tmp = tmp;
+ g_free (from);
+ }
+ if (to) {
+ tmp = g_strjoin ("; ", old_tmp, to, NULL);
+ g_free (old_tmp);
+ old_tmp = tmp;
+ g_free (to);
+ }
+ if (cc) {
+ tmp = g_strjoin ("; ", old_tmp, cc, NULL);
+ g_free (old_tmp);
+ old_tmp = tmp;
+ g_free (cc);
+ }
+ if (bcc) {
+ tmp = g_strjoin ("; ", old_tmp, bcc, NULL);
+ g_free (old_tmp);
+ old_tmp = tmp;
+ g_free (bcc);
+ }
+
+ old_tmp = modest_text_utils_remove_duplicate_addresses (tmp);
+ recipients = modest_text_utils_split_addresses_list (old_tmp);
+ g_free (tmp);
return recipients;
}