talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit e03d6a381b112bcf6a77452dea3f70a33062a980
parent 5afb1c001ef1dcc080b49772c715c86f5e66f728
Author: Colin Leroy <colin@colino.net>
Date:   Thu, 20 Mar 2008 17:44:55 +0000

2008-03-20 [colin]	3.3.1cvs34

	* src/messageview.c
	* src/messageview.h
	* src/textview.c
		Show at max 1MB of text, add a noticeview to
		show everything optionally.

Diffstat:
MChangeLog | 8++++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/messageview.c | 35+++++++++++++++++++++++++++++++++--
Msrc/messageview.h | 5+++++
Msrc/textview.c | 21++++++++++++++++++---
6 files changed, 66 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,11 @@ +2008-03-20 [colin] 3.3.1cvs34 + + * src/messageview.c + * src/messageview.h + * src/textview.c + Show at max 1MB of text, add a noticeview to + show everything optionally. + 2008-03-20 [colin] 3.3.1cvs33 * src/stock_pixmap.c diff --git a/PATCHSETS b/PATCHSETS @@ -3268,3 +3268,4 @@ ( cvs diff -u -r 1.36.2.135 -r 1.36.2.136 src/common/utils.c; cvs diff -u -r 1.20.2.59 -r 1.20.2.60 src/common/utils.h; ) > 3.3.1cvs31.patchset ( cvs diff -u -r 1.47.2.46 -r 1.47.2.47 src/procheader.c; ) > 3.3.1cvs32.patchset ( cvs diff -u -r 1.25.2.52 -r 1.25.2.53 src/stock_pixmap.c; ) > 3.3.1cvs33.patchset +( cvs diff -u -r 1.94.2.173 -r 1.94.2.174 src/messageview.c; cvs diff -u -r 1.19.2.18 -r 1.19.2.19 src/messageview.h; cvs diff -u -r 1.96.2.197 -r 1.96.2.198 src/textview.c; ) > 3.3.1cvs34.patchset diff --git a/configure.ac b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=3 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=33 +EXTRA_VERSION=34 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/messageview.c b/src/messageview.c @@ -466,6 +466,8 @@ MessageView *messageview_create(MainWindow *mainwin) messageview->statusbar = NULL; messageview->statusbar_cid = 0; + messageview->show_full_text= FALSE; + messageview->msginfo_update_callback_id = hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, messageview_update_msg, (gpointer) messageview); @@ -1000,6 +1002,9 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo, gchar *subject = NULL; g_return_val_if_fail(msginfo != NULL, -1); + if (msginfo != messageview->msginfo) + messageview->show_full_text = FALSE; + if (messageview->mimeview->textview && messageview->mimeview->textview->loading) { messageview->mimeview->textview->stop_loading = TRUE; @@ -1124,14 +1129,16 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo, main_create_mailing_list_menu(messageview->mainwin, messageview->msginfo); if (messageview->msginfo && messageview->msginfo->extradata - && messageview->msginfo->extradata->partial_recv) + && messageview->msginfo->extradata->partial_recv + && !noticeview_is_visible(messageview->noticeview)) partial_recv_show(messageview->noticeview, messageview->msginfo); else if (messageview->msginfo && messageview->msginfo->extradata && (messageview->msginfo->extradata->dispositionnotificationto || messageview->msginfo->extradata->returnreceiptto) && !MSG_IS_RETRCPT_SENT(messageview->msginfo->flags) && - !prefs_common.never_send_retrcpt) + !prefs_common.never_send_retrcpt && + !noticeview_is_visible(messageview->noticeview)) return_receipt_show(messageview->noticeview, messageview->msginfo); @@ -1489,6 +1496,30 @@ static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, return FALSE; } #endif + +static void messageview_show_partial_display_cb(NoticeView *noticeview, MessageView *messageview) +{ + messageview->show_full_text = TRUE; + main_window_cursor_wait(mainwindow_get_mainwindow()); + GTK_EVENTS_FLUSH(); + messageview_show(messageview, messageview->msginfo, messageview->all_headers); + main_window_cursor_normal(mainwindow_get_mainwindow()); +} + +void messageview_show_partial_display(MessageView *messageview, MsgInfo *msginfo, + size_t length) +{ + gchar *msg = g_strdup_printf(_("Show all %s."), to_human_readable(length)); + noticeview_set_icon(messageview->noticeview, STOCK_PIXMAP_NOTICE_WARN); + noticeview_set_text(messageview->noticeview, _("Only the first megabyte of text is shown.")); + noticeview_set_button_text(messageview->noticeview, msg); + g_free(msg); + noticeview_set_button_press_callback(messageview->noticeview, + G_CALLBACK(messageview_show_partial_display_cb), + (gpointer) messageview); + noticeview_show(messageview->noticeview); +} + static void return_receipt_show(NoticeView *noticeview, MsgInfo *msginfo) { gchar *addr = NULL; diff --git a/src/messageview.h b/src/messageview.h @@ -74,6 +74,8 @@ struct _MessageView gint msginfo_update_callback_id; gboolean updating; gboolean deferred_destroy; + + gboolean show_full_text; }; MessageView *messageview_create (MainWindow *mainwin); @@ -119,4 +121,7 @@ void messageview_print (MsgInfo *msginfo, gint partnum); #endif void messageview_list_urls (MessageView *msgview); +void messageview_show_partial_display (MessageView *msgview, + MsgInfo *msginfo, + size_t length); #endif /* __MESSAGEVIEW_H__ */ diff --git a/src/textview.c b/src/textview.c @@ -928,7 +928,9 @@ static void textview_write_body(TextView *textview, MimeInfo *mimeinfo) CodeConverter *conv; const gchar *charset, *p, *cmd; GSList *cur; - + gboolean continue_write = TRUE; + size_t wrote = 0, i = 0; + if (textview->messageview->forced_charset) charset = textview->messageview->forced_charset; else @@ -1040,13 +1042,20 @@ textview_default: } fseek(tmpfp, mimeinfo->offset, SEEK_SET); debug_print("Viewing text content of type: %s (length: %d)\n", mimeinfo->subtype, mimeinfo->length); - while ((ftell(tmpfp) < mimeinfo->offset + mimeinfo->length) && - (fgets(buf, sizeof(buf), tmpfp) != NULL)) { + while (((i = ftell(tmpfp)) < mimeinfo->offset + mimeinfo->length) && + (fgets(buf, sizeof(buf), tmpfp) != NULL) + && continue_write) { textview_write_line(textview, buf, conv, TRUE); if (textview->stop_loading) { fclose(tmpfp); return; } + wrote += ftell(tmpfp)-i; + if (mimeinfo->length > 1024*1024 + && wrote > 1024*1024 + && !textview->messageview->show_full_text) { + continue_write = FALSE; + } } fclose(tmpfp); } @@ -1068,6 +1077,12 @@ textview_default: } } + if (continue_write == FALSE) { + messageview_show_partial_display( + textview->messageview, + textview->messageview->msginfo, + mimeinfo->length); + } GTK_EVENTS_FLUSH(); }