X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-mime-part.c;h=766a1c6788bf654d09b6b8be764c3d9ed4641ee1;hp=15001207bf5a4dff7fb406382679428bc1361b29;hb=4d39841513a3a7f7aa9d38ab97cb9fcc9171e80b;hpb=4e501493efaac0d9331e924a2ea569497abff1bf diff --git a/src/modest-tny-mime-part.c b/src/modest-tny-mime-part.c index 1500120..766a1c6 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); } @@ -194,3 +207,45 @@ modest_tny_mime_part_to_string (TnyMimePart *part, gint indent) g_string_free (indent_prefix, TRUE); } +gchar * +modest_tny_mime_part_get_headers_content_type (TnyMimePart *part) +{ + gchar *header_content_type; + gchar *suffix; + + g_return_val_if_fail (TNY_IS_MIME_PART (part), NULL); + + header_content_type = modest_tny_mime_part_get_header_value (part, "Content-Type"); + + if (!header_content_type) + return NULL; + + header_content_type = g_strstrip (header_content_type); + + /* remove the ; suffix */ + suffix = index (header_content_type, ';'); + if (suffix) + suffix[0] = '\0'; + + return g_ascii_strdown (header_content_type, -1); +} + +gchar * +modest_tny_mime_part_get_content_type (TnyMimePart *part) +{ + const gchar *content_type; + gchar *retval = NULL; + + g_return_val_if_fail (TNY_IS_MIME_PART (part), NULL); + content_type = tny_mime_part_get_content_type (part); + + if (g_str_has_prefix (content_type, "message/rfc822")) { + retval = modest_tny_mime_part_get_headers_content_type (part); + } + + if (retval == NULL) { + retval = g_ascii_strdown (content_type, -1); + } + + return retval; +}