Merged fix for bug 86199 from trunk
[modest] / src / widgets / modest-gtkhtml-mime-part-view.c
index 324b568..d541cec 100644 (file)
@@ -34,6 +34,7 @@
 #include <gtkhtml/gtkhtml-search.h>
 #include <tny-stream.h>
 #include <tny-mime-part-view.h>
+#include "modest-tny-mime-part.h"
 #include <modest-stream-text-to-html.h>
 #include <modest-text-utils.h>
 #include <modest-conf.h>
@@ -352,7 +353,7 @@ on_url_requested (GtkWidget *widget, const gchar *uri, GtkHTMLStream *stream,
        
        tny_stream = TNY_STREAM (modest_tny_stream_gtkhtml_new (stream));
        g_signal_emit_by_name (MODEST_MIME_PART_VIEW (self), "fetch-url", uri, tny_stream, &result);
-       gtk_html_stream_close (stream, result?GTK_HTML_STREAM_OK:GTK_HTML_STREAM_ERROR);
+       tny_stream_close (tny_stream);
        g_object_unref (tny_stream);
        return result;
 }
@@ -373,10 +374,9 @@ set_html_part (ModestGtkhtmlMimePartView *self, TnyMimePart *part)
        tny_stream     = TNY_STREAM(modest_tny_stream_gtkhtml_new (gtkhtml_stream));
        tny_stream_reset (tny_stream);
 
-       tny_mime_part_decode_to_stream ((TnyMimePart*)part, tny_stream);
+       tny_mime_part_decode_to_stream ((TnyMimePart*)part, tny_stream, NULL);
+       tny_stream_close (tny_stream);
        g_object_unref (G_OBJECT(tny_stream));
-       
-       gtk_html_stream_destroy (gtkhtml_stream);
 }
 
 static void
@@ -395,12 +395,14 @@ set_text_part (ModestGtkhtmlMimePartView *self, TnyMimePart *part)
        modest_stream_text_to_html_set_full_limit (MODEST_STREAM_TEXT_TO_HTML (text_to_html_stream), 640*1024);
        
        // FIXME: tinymail
-       tny_mime_part_decode_to_stream ((TnyMimePart*)part, text_to_html_stream);
+       tny_mime_part_decode_to_stream ((TnyMimePart*)part, text_to_html_stream, NULL);
+       tny_stream_write (text_to_html_stream, "\n", 1);
        tny_stream_reset (text_to_html_stream);         
+       tny_stream_close (text_to_html_stream);
        
        g_object_unref (G_OBJECT(text_to_html_stream));
        g_object_unref (G_OBJECT(tny_stream));
-       gtk_html_stream_destroy (gtkhtml_stream);
+       /* gtk_html_stream_destroy (gtkhtml_stream); */
 }
 
 static void
@@ -434,10 +436,30 @@ set_part (ModestGtkhtmlMimePartView *self, TnyMimePart *part)
                return;
        }
 
-       if (tny_mime_part_content_type_is (part, "text/html"))
+       if (tny_mime_part_content_type_is (part, "text/html")) {
                set_html_part (self, part);
-       else
-               set_text_part (self, part);
+       } else {
+               if (tny_mime_part_content_type_is (part, "message/rfc822")) {
+                       gchar *header_content_type, *header_content_type_lower;
+                       header_content_type = modest_tny_mime_part_get_header_value (part, "Content-Type");
+                       if (header_content_type) {
+                               header_content_type = g_strstrip (header_content_type);
+                               header_content_type_lower = g_ascii_strdown (header_content_type, -1);
+
+                               if (!g_ascii_strcasecmp (header_content_type_lower, "text/html"))
+                                       set_html_part (self, part);
+                               else 
+                                       set_text_part (self, part);
+
+                               g_free (header_content_type_lower);
+                               g_free (header_content_type);
+                       } else {
+                               set_text_part (self, part);
+                       }
+               } else {
+                       set_text_part (self, part);
+               }
+       }
 
 }
 
@@ -545,9 +567,9 @@ tny_mime_part_view_init (gpointer g, gpointer iface_data)
 {
        TnyMimePartViewIface *klass = (TnyMimePartViewIface *)g;
 
-       klass->get_part_func = modest_gtkhtml_mime_part_view_get_part;
-       klass->set_part_func = modest_gtkhtml_mime_part_view_set_part;
-       klass->clear_func = modest_gtkhtml_mime_part_view_clear;
+       klass->get_part = modest_gtkhtml_mime_part_view_get_part;
+       klass->set_part = modest_gtkhtml_mime_part_view_set_part;
+       klass->clear = modest_gtkhtml_mime_part_view_clear;
 
        return;
 }