X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-mime-part.c;h=67cde71832474082bcde225798acf8c1db8f5656;hp=bfd0d629d0a3138efe3daf673156dfa50848d889;hb=bc2732ed442a8b5f1031a61d9ebddb3c3b7d4c23;hpb=12fe7988e34a4ba22a68f687db4993e12578a9b2 diff --git a/src/modest-tny-mime-part.c b/src/modest-tny-mime-part.c index bfd0d62..67cde71 100644 --- a/src/modest-tny-mime-part.c +++ b/src/modest-tny-mime-part.c @@ -85,7 +85,7 @@ modest_tny_mime_part_is_attachment_for_modest (TnyMimePart *part) g_return_val_if_fail (part && TNY_IS_MIME_PART(part), FALSE); /* if tinymail thinks it's an attachment, it definitely is */ - if (tny_mime_part_is_attachment (part)) + if (tny_mime_part_is_attachment (part) || tny_mime_part_is_purged (part)) return TRUE; /* if the mime part is a message itself (ie. embedded), it's an attachment */ @@ -94,9 +94,22 @@ modest_tny_mime_part_is_attachment_for_modest (TnyMimePart *part) tmp = modest_tny_mime_part_get_header_value (part, "Content-Disposition"); if (tmp) { + /* If the Content-Disposition header contains a "name" + * parameter, treat the mime part as an attachment */ gchar *content_disp = g_ascii_strdown(tmp, -1); + gint len = strlen (content_disp); + const gchar *substr = g_strstr_len (content_disp, len, "name"); + if (substr != NULL) { + gint substrlen = len - (substr - content_disp); + /* The parameter can appear in muliple + * ways. See RFC 2231 for details */ + has_content_disp_name = + g_strstr_len (substr, substrlen, "name=") != NULL || + g_strstr_len (substr, substrlen, "name*=") != NULL || + g_strstr_len (substr, substrlen, "name*0=") != NULL || + g_strstr_len (substr, substrlen, "name*0*=") != NULL; + } g_free (tmp); - has_content_disp_name = g_strstr_len (content_disp, strlen(content_disp), "name=") != NULL; g_free (content_disp); } @@ -125,4 +138,72 @@ modest_tny_mime_part_is_attachment_for_modest (TnyMimePart *part) return TRUE; } +gboolean +modest_tny_mime_part_is_msg (TnyMimePart *part) +{ + const gchar *content_type; + + if (!TNY_IS_MSG (part)) + return FALSE; + + content_type = tny_mime_part_get_content_type (part); + if ((g_str_has_prefix (content_type, "message/rfc822") || + g_str_has_prefix (content_type, "multipart/") || + g_str_has_prefix (content_type, "text/"))) { + return TRUE; + } else { + return FALSE; + } +} + +void +modest_tny_mime_part_to_string (TnyMimePart *part, gint indent) +{ + return; + gint i; + GString *indent_prefix; + TnyList *list, *pairs_list; + TnyIterator *iter, *pairs_iter; + + indent_prefix = g_string_new (""); + for (i = 0; i < indent; i++) { + indent_prefix = g_string_append_c (indent_prefix, ' '); + } + + if (TNY_IS_MSG (part)) { + TnyHeader *header; + + header = tny_msg_get_header (TNY_MSG (part)); + g_print ("(%s(MSG))\n", indent_prefix->str); + g_object_unref (header); + } + + list = tny_simple_list_new (); + tny_mime_part_get_parts (part, list); + pairs_list = tny_simple_list_new (); + tny_mime_part_get_header_pairs (part, pairs_list); + g_print ("%s(content=%s parts=%d location=%s)\n", indent_prefix->str, + tny_mime_part_get_content_type (part), + tny_list_get_length (list), + tny_mime_part_get_content_location (part)); + for (pairs_iter = tny_list_create_iterator (pairs_list); + !tny_iterator_is_done (pairs_iter); + tny_iterator_next (pairs_iter)) { + TnyPair *pair = TNY_PAIR (tny_iterator_get_current (pairs_iter)); + g_print ("%s(%s:%s)\n", indent_prefix->str, tny_pair_get_name (pair), tny_pair_get_value (pair)); + g_object_unref (pair); + } + for (iter = tny_list_create_iterator (list); + !tny_iterator_is_done (iter); + tny_iterator_next (iter)) { + TnyMimePart *child; + child = (TnyMimePart *) tny_iterator_get_current (iter); + modest_tny_mime_part_to_string (child, indent + 3); + g_object_unref (child); + } + g_object_unref (iter); + g_object_unref (list); + + g_string_free (indent_prefix, TRUE); +}