gboolean has_content_disp_name = FALSE;
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) || tny_mime_part_is_purged (part))
+
+ /* purged attachments were attachments in the past, so they're
+ * still attachments */
+ if (tny_mime_part_is_purged (part))
return TRUE;
+
+ /* if tinymail thinks it's an attachment, it is. One exception: if it's
+ * a multipart and it's not a message/rfc822 it cannot be an attahcment */
+ if (tny_mime_part_is_attachment (part)) {
+ if (!TNY_IS_MSG (part)) {
+ const gchar *content_type;
+ gchar *down_content_type;
+ gboolean is_attachment;
+
+ content_type = tny_mime_part_get_content_type (part);
+ down_content_type = g_ascii_strdown (content_type, -1);
+
+ is_attachment = !g_str_has_prefix (down_content_type, "multipart/");
+ g_free (down_content_type);
+ return is_attachment;
+ } else {
+ return TRUE;
+ }
+ }
/* if the mime part is a message itself (ie. embedded), it's an attachment */
if (TNY_IS_MSG (part))
modest_tny_mime_part_is_msg (TnyMimePart *part)
{
const gchar *content_type;
+ gchar *down_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/"))) {
+ down_content_type = g_ascii_strdown (content_type, -1);
+ if ((g_str_has_prefix (down_content_type, "message/rfc822") ||
+ g_str_has_prefix (down_content_type, "multipart/") ||
+ g_str_has_prefix (down_content_type, "text/plain") ||
+ g_str_has_prefix (down_content_type, "text/html"))) {
+ g_free (down_content_type);
return TRUE;
} else {
+ g_free (down_content_type);
return FALSE;
}
}
modest_tny_mime_part_get_headers_content_type (TnyMimePart *part)
{
gchar *header_content_type;
- gchar *header_content_type_lower;
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");
+
+ /* See RFC2045 sec 5.2 */
+ if (!header_content_type)
+ return g_strdup ("text/plain; charset=us-ascii");
+
header_content_type = g_strstrip (header_content_type);
/* remove the ; suffix */
suffix = index (header_content_type, ';');
- suffix[0] = '\0';
+ if (suffix)
+ suffix[0] = '\0';
- header_content_type_lower = (header_content_type ) ?
- g_ascii_strdown (header_content_type, -1) : NULL;
- return header_content_type_lower;
+ return g_ascii_strdown (header_content_type, -1);
}
gchar *