[Xfce4-commits] <postler:master> Split MIME type and content type more carefully

Christian Dywan noreply at xfce.org
Mon May 31 20:00:01 CEST 2010


Updating branch refs/heads/master
         to 734c3ae2262499d2cfc44ec6be9b77233005326b (commit)
       from 31b22e071e18d11f05070463ef78b14bd509fec8 (commit)

commit 734c3ae2262499d2cfc44ec6be9b77233005326b
Author: Christian Dywan <christian at twotoasts.de>
Date:   Mon May 31 19:29:07 2010 +0200

    Split MIME type and content type more carefully
    
    We also want to clearly show an error message if the body of
    the message can't be displayed.

 postler/postler-content.vala |   31 +++++++++++++++++++++++++++----
 1 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/postler/postler-content.vala b/postler/postler-content.vala
index ebdb40a..f36560c 100644
--- a/postler/postler-content.vala
+++ b/postler/postler-content.vala
@@ -247,10 +247,23 @@ public class Postler.Content : WebKit.WebView {
                 reply = linkify_address (reply, arguments);
 
             if (content_type != null) {
-                parts = content_type.split ("; charset=");
-                if (parts != null && parts[0] != null && parts[1] != null) {
-                    mime_type = parts[0];
-                    charset = parts[1].replace ("\"", " ").strip ();
+                parts = content_type.split_set ("; ");
+                string filename = null;
+                foreach (var part in parts) {
+                    if (part.has_prefix ("charset="))
+                        charset = part.substring (8, part.length - 8);
+                    else if (part.has_prefix ("name="))
+                        filename = part.substring (5, part.length - 5);
+                    else if (part != "" && !part.contains ("="))
+                        mime_type = part.down ();
+                }
+
+                if (mime_type == "application/octet-stream" && filename != null) {
+                    filename = filename.replace ("\"", " ").strip ();
+                    uchar[] data = {};
+                    bool uncertain;
+                    mime_type = g_content_type_guess (filename,
+                        data, out uncertain);
                 }
             }
 
@@ -264,6 +277,16 @@ public class Postler.Content : WebKit.WebView {
             /* Message body starts here */
             body = new GLib.StringBuilder ();
             while ((line = stream.read_line (null, null)) != null) {
+                if (!mime_type.has_prefix ("text/")) {
+                    body.append ("<h1>%s</h1><p>%s".printf (
+                        _("Error"),
+                        _("This message of type \"%s\" can't be displayed.").
+                            printf (mime_type)
+                        ));
+                    mime_type = "text/html";
+                    break;
+                }
+
                 if (content_encoding == "quoted-printable")
                     line = quoted_printable_decode (line);
                 else if (content_encoding == "base64")



More information about the Xfce4-commits mailing list