From: Jose Dapena Paz Date: Wed, 24 Jun 2009 13:38:25 +0000 (+0200) Subject: Limit reply size with number of lines, not only number of chars. X-Git-Tag: 3.0.17-rc20~14 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=3013a1c7e1739de8758a9ffa8c58c927262c2d0a Limit reply size with number of lines, not only number of chars. --- diff --git a/src/hildon2/modest-msg-edit-window.c b/src/hildon2/modest-msg-edit-window.c index f68901d..fb0b072 100644 --- a/src/hildon2/modest-msg-edit-window.c +++ b/src/hildon2/modest-msg-edit-window.c @@ -93,7 +93,8 @@ #define DEFAULT_FONT_SCALE 1.5 #define ATTACHMENT_BUTTON_WIDTH 118 #define MAX_FROM_VALUE 36 -#define MAX_BODY_LENGTH 4096 +#define MAX_BODY_LENGTH 128*1024 +#define MAX_BODY_LINES 2048 static gboolean is_wp_text_buffer_started = FALSE; @@ -3570,17 +3571,34 @@ body_insert_text (GtkTextBuffer *buffer, GtkTextIter end_iter; gint offset; glong utf8_len; + gint line; + gchar *text_offset; + gint text_lines; ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window); gtk_text_buffer_get_end_iter (GTK_TEXT_BUFFER (buffer), &end_iter); offset = gtk_text_iter_get_offset (&end_iter); + line = gtk_text_iter_get_line (&end_iter); + + text_offset = text; + text_lines = 0; + while (text_offset < text + len) { + if (*text_offset == '\n') + text_lines++; + if (text_lines + line >= MAX_BODY_LINES) { + len = text_offset - text; + break; + } + text_offset++; + } + utf8_len = g_utf8_strlen (text, len); - if (offset + utf8_len > MAX_BODY_LENGTH) { + if (line > MAX_BODY_LINES || offset + utf8_len > MAX_BODY_LENGTH) { g_signal_stop_emission_by_name (G_OBJECT (buffer), "insert-text"); - if (offset < MAX_BODY_LENGTH) + if (line <= MAX_BODY_LINES && offset < MAX_BODY_LENGTH) { gchar *result; gchar *utf8_end; @@ -3597,7 +3615,7 @@ body_insert_text (GtkTextBuffer *buffer, } } - if (offset + utf8_len > MAX_BODY_LENGTH) { + if (line > MAX_BODY_LINES || offset + utf8_len > MAX_BODY_LENGTH) { if (priv->max_chars_banner == NULL) { priv->max_chars_banner = hildon_banner_show_information (GTK_WIDGET (window), NULL, _CS("ckdg_ib_maximum_characters_reached")); diff --git a/src/modest-formatter.c b/src/modest-formatter.c index 4c12532..a503ed7 100644 --- a/src/modest-formatter.c +++ b/src/modest-formatter.c @@ -39,7 +39,9 @@ #include "modest-tny-platform-factory.h" #include -#define MAX_BODY_LENGTH 4096 +#define LINE_WRAP 78 +#define MAX_BODY_LINES 1024 +#define MAX_BODY_LENGTH 1024*128 typedef struct _ModestFormatterPrivate ModestFormatterPrivate; struct _ModestFormatterPrivate { @@ -76,7 +78,7 @@ extract_text (ModestFormatter *self, TnyMimePart *body) GtkTextIter start, end; gchar *text; ModestFormatterPrivate *priv; - gint total; + gint total, total_lines, line_chars; buf = gtk_text_buffer_new (NULL); stream = TNY_STREAM (tny_gtk_text_buffer_stream_new (buf)); @@ -90,9 +92,12 @@ extract_text (ModestFormatter *self, TnyMimePart *body) } total = 0; + total_lines = 0; + line_chars = 0; while (!tny_stream_is_eos (input_stream)) { gchar buffer [128]; + gchar *offset; gint n_read; gint next_read; @@ -100,13 +105,37 @@ extract_text (ModestFormatter *self, TnyMimePart *body) if (next_read == 0) break; n_read = tny_stream_read (input_stream, buffer, next_read); - if (n_read > 0) { + + offset = buffer; + while (offset < buffer + n_read) { + + if (*offset == '\n') { + total_lines ++; + line_chars = 0; + } else { + line_chars ++; + if (line_chars >= LINE_WRAP) { + total_lines ++; + line_chars = 0; + } + } + if (total_lines >= MAX_BODY_LINES) + break; + offset++; + } + + + + if (offset - buffer > 0) { gint n_write; - n_write = tny_stream_write (stream, buffer, n_read); + n_write = tny_stream_write (stream, buffer, offset - buffer); total += n_write; } else if (n_read == -1) { break; } + + if (total_lines >= MAX_BODY_LINES) + break; } tny_stream_reset (stream);