X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-formatter.c;h=0328be8f8f85ffe5376a5c3c62eb2d5b019923e0;hp=90f45cfc539cce75e79b5fb6373364f3f05baaf1;hb=07fc421041196cb6911a4e61298891f0b42f8cd6;hpb=09e53d37e464661c23605685a1e2a4b4baf12ec4 diff --git a/src/modest-formatter.c b/src/modest-formatter.c index 90f45cf..0328be8 100644 --- a/src/modest-formatter.c +++ b/src/modest-formatter.c @@ -33,11 +33,11 @@ #include #include #include -#include #include "modest-formatter.h" #include "modest-text-utils.h" #include "modest-tny-platform-factory.h" -#include +#include "modest-runtime.h" +#include "modest-stream-html-to-text.h" #define LINE_WRAP 78 #define MAX_BODY_LINES 1024 @@ -68,22 +68,6 @@ static gchar* modest_formatter_wrapper_inline (ModestFormatter *self, const gch static TnyMimePart *find_body_parent (TnyMimePart *part); -static guint -count_end_tag_lines (const gchar *haystack, const gchar *needle) -{ - gchar *tmp; - guint lines = 0; - - tmp = g_strstr_len (haystack, g_utf8_strlen (haystack, -1), ">\n"); - while (tmp && (tmp <= needle)) { - lines++; - tmp += 2; - tmp = g_strstr_len (tmp, g_utf8_strlen (tmp, -1), ">\n"); - } - - return lines; -} - static gchar * extract_text (ModestFormatter *self, TnyMimePart *body) { @@ -104,7 +88,7 @@ extract_text (ModestFormatter *self, TnyMimePart *body) is_html = (g_strcmp0 (tny_mime_part_get_content_type (body), "text/html") == 0); if (is_html) { - input_stream = tny_camel_html_to_text_stream_new (mp_stream); + input_stream = modest_stream_html_to_text_new (mp_stream); } else { input_stream = g_object_ref (mp_stream); } @@ -114,82 +98,6 @@ extract_text (ModestFormatter *self, TnyMimePart *body) line_chars = 0; lines = 0; - /* For pure HTML emails tny_camel_html_to_text_stream inserts - a \n for every ">\n" found in the email including the HTML - headers (, ...). For that reason we need to - remove them from the resulting text as it is artificially - added by the stream */ - if (is_html) { - const guint BUFFER_SIZE = 1024; - TnyStream *is; - gboolean look_for_end_tag, found; - gchar buffer [BUFFER_SIZE + 1]; - gchar *needle; - - is = g_object_ref (mp_stream); - look_for_end_tag = FALSE; - found = FALSE; - - /* This algorithm does not work if the body tag is - spread along 2 different stream reads. But there - are not a lot of changes for this to happen as the - buffer size is big enough in most situations. In - the worst case, when it's not found we just accept - the original translation with the extra "\n" */ - while (!tny_stream_is_eos (is) && !found) { - gint n_read; - - needle = NULL; - memset (buffer, 0, BUFFER_SIZE); - n_read = tny_stream_read (is, buffer, BUFFER_SIZE); - - if (G_UNLIKELY (n_read < 0)) - break; - - buffer[n_read] = '\0'; - - /* If we found body,then look for the end of the tag */ - if (look_for_end_tag) { - needle = strchr (buffer, '>'); - - if (needle) { - found = TRUE; - lines += count_end_tag_lines (buffer, needle); - break; - } - } else { - gchar *closing; - - /* Try to find the tag. There - is no other HTML tag starting by - "bo", and we can detect more cases - were tag falls into two - different stream reads */ - needle = g_strstr_len (buffer, n_read, "'); - if (closing) { - if (*(closing + 1) == '\n') - lines++; - found = TRUE; - break; - } - } - } - if (!found) - lines = 0; - tny_stream_reset (is); - - g_object_unref (is); - } - first_time = TRUE; while (!tny_stream_is_eos (input_stream)) { gchar buffer [128]; @@ -225,22 +133,9 @@ extract_text (ModestFormatter *self, TnyMimePart *body) if (offset - buffer > 0) { gint n_write = 0, to_write = 0; - gchar *buffer_ptr; - - /* Discard lines artificially inserted by - Camel when translating from HTML to - text. Do it only for the first read */ - buffer_ptr = buffer; - if (G_UNLIKELY (first_time) && lines) { - int i; - for (i=0; i < lines; i++) { - buffer_ptr = strchr (buffer_ptr, '\n'); - buffer_ptr++; - } - first_time = FALSE; - } - to_write = offset - buffer_ptr; - n_write = tny_stream_write (stream, buffer_ptr, to_write); + + to_write = offset - buffer; + n_write = tny_stream_write (stream, buffer, to_write); total += n_write; } else if (n_read == -1) { break;