Set better modal windows in hildon2 window manager to avoid keyboard focus
[modest] / src / modest-tny-mime-part.c
index e438f34..3e9a473 100644 (file)
@@ -83,10 +83,30 @@ modest_tny_mime_part_is_attachment_for_modest (TnyMimePart *part)
        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))
@@ -142,16 +162,21 @@ gboolean
 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;
        }
 }
@@ -211,21 +236,24 @@ gchar *
 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 *