Updating branch refs/heads/master to a88775195787209ff6187c1b32ae92d0a115161e (commit) from d45152a5a372c11f691d4edb137b3e5975eb37bb (commit)
commit a88775195787209ff6187c1b32ae92d0a115161e Author: Christian Dywan <christ...@twotoasts.de> Date: Sat Nov 27 02:02:40 2010 +0100 Offer opening of non-text attachments postler/postler-content.vala | 50 ++++++++++++++++++++++++++++++++++++++--- 1 files changed, 46 insertions(+), 4 deletions(-) diff --git a/postler/postler-content.vala b/postler/postler-content.vala index 7f6277b..41c7a17 100644 --- a/postler/postler-content.vala +++ b/postler/postler-content.vala @@ -685,7 +685,8 @@ public class Postler.Content : WebKit.WebView { if (content_encoding == "quoted-printable") line = quoted_printable_decode (line); - else if (content_encoding == "base64") + else if (content_encoding == "base64" + && mime_type_is_text (message_part.mime_type)) line = line != "" ? (string)GLib.Base64.decode (line) : ""; try { if (charset != null) @@ -774,13 +775,24 @@ public class Postler.Content : WebKit.WebView { string body_chunk; string mime_type = message_part.mime_type; bool plain_text = false; - if (mime_type == "text/plain") { + if (mime_type == "text/html") + body_chunk = message_part.body.str; + else if (mime_type_is_text (mime_type)) { mime_type = "text/html"; plain_text = true; body_chunk = "<span class=\"plain_text\">" + message_part.body.str + "</span>"; } - else - body_chunk = message_part.body.str; + else { + mime_type = "text/html"; + body_chunk = """ + <b>%s</b> + <p><a href="message-part:open:%d">%s</a> + """. + printf ( + message_part.filename ?? message_part.mime_type, + message_parts.position (message_parts.find (message_part)), + _("Open file")); + } try { /* Linkify */ @@ -870,6 +882,36 @@ public class Postler.Content : WebKit.WebView { return false; decision.ignore (); + if (uri.has_prefix ("message-part:")) { + int index; + if (uri.has_prefix ("message-part:open:")) + index = uri.substring (18, -1).to_int (); + else { + /* FIXME: Show error dialogue */ + GLib.message (_("Erroneous attachment: %s"), uri); + return false; + } + var message_part = message_parts.nth_data (index); + string filename; + if (uri.has_prefix ("message-part:open:")) { + filename = "/tmp/%sXXXXXX".printf (message_part.filename ?? ""); + if (FileUtils.mkstemp (filename) == -1) { + /* FIXME: Show error dialogue */ + GLib.message (_("Failed to create temporary file: %s"), filename); + return false; + } + } else + assert_not_reached (); + try { + FileUtils.set_data (filename, GLib.Base64.decode (message_part.body.str)); + uri = Filename.to_uri (filename, null); + } catch (GLib.Error error) { + /* FIXME: Show error dialogue */ + GLib.message (_("Failed to write file: %s"), filename); + return false; + } + } + return Postler.App.show_uri (get_screen (), uri); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits