[claws-mail-cvs-commit] compose.c

Colin Leroy <[email protected]> Fri, 21 Aug 2009 15:56:31 +0000
Newsgroups gmane.mail.sylpheed.claws.cvs
Message-ID <[email protected]>
Update of /srv/cvs/claws-mail/claws/src
In directory ran:/tmp/cvs-serv18343/src

Modified Files:
      Tag: gtk2
	compose.c prefs_common.c prefs_common.h 
	prefs_compose_writing.c 
Log Message:
2009-08-21 [colin]	3.7.2cvs22

	* src/compose.c
	* src/prefs_common.c
	* src/prefs_common.h
	* src/prefs_compose_writing.c
	* src/common/utils.c
		Fix bug 1986, "New feature: warn user when inserting 
		a large file in the message body". Patch by Didier
		Barvaux

Index: compose.c
===================================================================
RCS file: /srv/cvs/claws-mail/claws/src/compose.c,v
retrieving revision 1.382.2.520
retrieving revision 1.382.2.521
diff -u -d -r1.382.2.520 -r1.382.2.521
--- compose.c	20 Aug 2009 22:04:58 -0000	1.382.2.520
+++ compose.c	21 Aug 2009 15:56:28 -0000	1.382.2.521
@@ -9379,15 +9379,60 @@
 			gchar *file = (gchar *) tmp->data;
 			gchar *filedup = g_strdup(file);
 			gchar *shortfile = g_path_get_basename(filedup);
+			struct stat file_stat;
+			gboolean do_insert;
 			ComposeInsertResult res;
+			int ret;
 
-			res = compose_insert_file(compose, file);
-			if (res == COMPOSE_INSERT_READ_ERROR) {
-				alertpanel_error(_("File '%s' could not be read."), shortfile);
-			} else if (res == COMPOSE_INSERT_INVALID_CHARACTER) {
-				alertpanel_error(_("File '%s' contained invalid characters\n"
-						   "for the current encoding, insertion may be incorrect."), shortfile);
+			do_insert = TRUE;
+
+			/* get the size of the file we are about to insert */
+			ret = g_stat(file, &file_stat);
+			if (ret != 0) {
+				alertpanel_error(_("Could not get size of file '%s'."), shortfile);
+				do_insert = FALSE;
+			} else if (prefs_common.warn_large_insert == TRUE) {
+
+				/* ask user for confirmation if the file is large */
+				if (prefs_common.warn_large_insert_size < 0 ||
+				    file_stat.st_size > (prefs_common.warn_large_insert_size * 1024)) {
+					AlertValue aval;
+					gchar *msg;
+					
+					msg = g_strdup_printf(_("You are about to insert a file of %s "
+								"in the message body. Are your sure to do that?"),
+								to_human_readable(file_stat.st_size));
+					aval = alertpanel_full(_("Are you sure?"), msg, GTK_STOCK_CANCEL,
+							_("+_Insert"), NULL, TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT);
+					g_free(msg);
+
+					/* do we ask for confirmation next time? */
+					if (aval & G_ALERTDISABLE) {
+						/* no confirmation next time, disable feature in preferences */
+						aval &= ~G_ALERTDISABLE;
+						prefs_common.warn_large_insert = FALSE;
+					}
+
+					/* abort file insertion if user canceled action */
+					if (aval != G_ALERTALTERNATE) {
+						do_insert = FALSE;
+					}
+				}
 			}
+
+			/* insert the file if the file is short or if the user confirmed that
+			   he/she wants to insert the large file */
+			if (do_insert) {
+				res = compose_insert_file(compose, file);
+				if (res == COMPOSE_INSERT_READ_ERROR) {
+					alertpanel_error(_("File '%s' could not be read."), shortfile);
+				} else if (res == COMPOSE_INSERT_INVALID_CHARACTER) {
+					alertpanel_error(_("File '%s' contained invalid characters\n"
+								"for the current encoding, insertion may be incorrect."),
+								shortfile);
+				}
+			}
+
 			g_free(shortfile);
 			g_free(filedup);
 			g_free(file);

Index: prefs_compose_writing.c
===================================================================
RCS file: /srv/cvs/claws-mail/claws/src/Attic/prefs_compose_writing.c,v
retrieving revision 1.1.2.26
retrieving revision 1.1.2.27
diff -u -d -r1.1.2.26 -r1.1.2.27
--- prefs_compose_writing.c	31 Jan 2009 07:58:58 -0000	1.1.2.26
+++ prefs_compose_writing.c	21 Aug 2009 15:56:29 -0000	1.1.2.27
@@ -60,9 +60,10 @@
 	GtkWidget *checkbtn_default_reply_list;
 	GtkWidget *checkbtn_forward_as_attachment;
 	GtkWidget *checkbtn_redirect_keep_from;
-	GtkWidget *hbox_autosave;
 	GtkWidget *checkbtn_autosave;
 	GtkWidget *spinbtn_autosave_length;
+	GtkWidget *checkbtn_warn_large_insert;
+	GtkWidget *spinbtn_warn_large_insert_size;
 	GtkWidget *optmenu_dnd_insert_or_attach;
 } WritingPage;
 
@@ -87,6 +88,12 @@
 	GtkObject *spinbtn_undolevel_adj;
 	GtkWidget *spinbtn_undolevel;
 
+	GtkWidget *hbox_warn_large_insert;
+	GtkWidget *checkbtn_warn_large_insert;
+	GtkObject *spinbtn_warn_large_insert_adj;
+	GtkWidget *spinbtn_warn_large_insert_size;
+	GtkWidget *label_warn_large_insert_size;
+
 	GtkWidget *checkbtn_reply_with_quote;
 	GtkWidget *checkbtn_default_reply_list;
 
@@ -124,11 +131,14 @@
 	PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
 			   _("when re-editing"));
 
+	/* Editing */
 	vbox2 = gtkut_get_options_frame(vbox1, &frame, _("Editing"));
 
+	/* Editing: automatically start the text editor */
 	PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
 			   _("Automatically launch the external editor"));
 
+	/* Editing: automatically save draft */
 	hbox_autosave = gtk_hbox_new (FALSE, 8);
 	gtk_widget_show (hbox_autosave);
 	gtk_box_pack_start (GTK_BOX (vbox2), hbox_autosave, FALSE, FALSE, 0);
@@ -148,6 +158,7 @@
 	gtk_widget_show (label_autosave_length);
 	gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
 	
+	/* Editing: undo level */
 	hbox_undolevel = gtk_hbox_new (FALSE, 8);
 	gtk_widget_show (hbox_undolevel);
 	gtk_box_pack_start (GTK_BOX (vbox2), hbox_undolevel, FALSE, FALSE, 0);
@@ -163,7 +174,31 @@
 	gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
 	gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
 	gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
-	
+
+	/* Editing: warn when inserting large files in message body */
+	hbox_warn_large_insert = gtk_hbox_new (FALSE, 8);
+	gtk_widget_show (hbox_warn_large_insert);
+	gtk_box_pack_start (GTK_BOX (vbox2), hbox_warn_large_insert, FALSE, FALSE, 0);
+
+	PACK_CHECK_BUTTON (hbox_warn_large_insert, checkbtn_warn_large_insert,
+			   _("Warn when inserting in message body a file larger than"));
+
+	spinbtn_warn_large_insert_adj = gtk_adjustment_new (50, 0, 1000, 1, 10, 0);
+	spinbtn_warn_large_insert_size = gtk_spin_button_new
+		(GTK_ADJUSTMENT (spinbtn_warn_large_insert_adj), 1, 0);
+	gtk_widget_set_size_request (spinbtn_warn_large_insert_size, 64, -1);	
+	gtk_widget_show (spinbtn_warn_large_insert_size);
+	gtk_box_pack_start (GTK_BOX (hbox_warn_large_insert),
+			spinbtn_warn_large_insert_size, FALSE, FALSE, 0);
+	gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_warn_large_insert_size),
+			TRUE);
+
+	label_warn_large_insert_size = gtk_label_new(_("KB"));
+	gtk_widget_show (label_warn_large_insert_size);
+	gtk_box_pack_start (GTK_BOX (hbox_warn_large_insert),
+			label_warn_large_insert_size, FALSE, FALSE, 0);
+
+	/* Replying */
 	vbox2 = gtkut_get_options_frame(vbox1, &frame, _("Replying"));
 
 	PACK_CHECK_BUTTON (vbox2, checkbtn_reply_with_quote,
@@ -205,6 +240,9 @@
 	SET_TOGGLE_SENSITIVITY (checkbtn_autosave, spinbtn_autosave_length);
 	SET_TOGGLE_SENSITIVITY (checkbtn_autosave, label_autosave_length);
 
+	SET_TOGGLE_SENSITIVITY (checkbtn_warn_large_insert, spinbtn_warn_large_insert_size);
+	SET_TOGGLE_SENSITIVITY (checkbtn_warn_large_insert, label_warn_large_insert_size);
+
 
 	prefs_writing->checkbtn_autoextedit = checkbtn_autoextedit;
 
@@ -216,6 +254,9 @@
 
 	prefs_writing->checkbtn_autosave     = checkbtn_autosave;
 	prefs_writing->spinbtn_autosave_length = spinbtn_autosave_length;
+
+	prefs_writing->checkbtn_warn_large_insert = checkbtn_warn_large_insert;
+	prefs_writing->spinbtn_warn_large_insert_size = spinbtn_warn_large_insert_size;
 	
 	prefs_writing->checkbtn_forward_as_attachment =
 		checkbtn_forward_as_attachment;
@@ -238,6 +279,10 @@
 		prefs_common.autosave_length);
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefs_writing->spinbtn_undolevel),
 		prefs_common.undolevels);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_writing->checkbtn_warn_large_insert),
+		prefs_common.warn_large_insert);
+	gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefs_writing->spinbtn_warn_large_insert_size),
+		prefs_common.warn_large_insert_size);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_writing->checkbtn_reply_account_autosel),
 		prefs_common.reply_account_autosel);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_writing->checkbtn_forward_account_autosel),
@@ -270,6 +315,10 @@
 		gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(page->spinbtn_autosave_length));
 	prefs_common.undolevels = 
 		gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(page->spinbtn_undolevel));
+	prefs_common.warn_large_insert = 
+		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_warn_large_insert));
+	prefs_common.warn_large_insert_size =
+		gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(page->spinbtn_warn_large_insert_size));
 		
 	prefs_common.reply_account_autosel =
 		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_reply_account_autosel));

Index: prefs_common.c
===================================================================
RCS file: /srv/cvs/claws-mail/claws/src/prefs_common.c,v
retrieving revision 1.204.2.191
retrieving revision 1.204.2.192
diff -u -d -r1.204.2.191 -r1.204.2.192
--- prefs_common.c	1 Jul 2009 15:51:02 -0000	1.204.2.191
+++ prefs_common.c	21 Aug 2009 15:56:29 -0000	1.204.2.192
@@ -243,6 +243,10 @@
 	 P_BOOL, NULL, NULL, NULL},
         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
 	 NULL, NULL, NULL},
+        {"warn_large_insert", "TRUE", &prefs_common.warn_large_insert,
+	 P_BOOL, NULL, NULL, NULL},
+        {"warn_large_insert_size", "500", &prefs_common.warn_large_insert_size,
+	 P_INT, NULL, NULL, NULL},
 
 	{"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
 	 NULL, NULL, NULL},

Index: prefs_common.h
===================================================================
RCS file: /srv/cvs/claws-mail/claws/src/prefs_common.h,v
retrieving revision 1.103.2.124
retrieving revision 1.103.2.125
diff -u -d -r1.103.2.124 -r1.103.2.125
--- prefs_common.h	19 Apr 2009 07:24:41 -0000	1.103.2.124
+++ prefs_common.h	21 Aug 2009 15:56:29 -0000	1.103.2.125
@@ -150,6 +150,8 @@
 	gboolean show_ruler;
 	gboolean autosave;
 	gint autosave_length;
+	gboolean warn_large_insert;
+	gint warn_large_insert_size;
 	gboolean compose_no_markup;
 	ComposeDndInsertOrAttach compose_dnd_mode;
 	gboolean compose_with_format;