evolution r35554 - trunk/plugins/prefer-plain



Author: mcrha
Date: Tue May 27 12:38:24 2008
New Revision: 35554
URL: http://svn.gnome.org/viewvc/evolution?rev=35554&view=rev

Log:
2008-05-27  Milan Crha  <mcrha redhat com>

	** Fix for bug #532384

	* prefer-plain.c: (org_gnome_prefer_plain_multipart_alternative):
	Choose the text/html part in normal mode only if the alrenative
	multipart contains also a text/plain part.



Modified:
   trunk/plugins/prefer-plain/ChangeLog
   trunk/plugins/prefer-plain/prefer-plain.c

Modified: trunk/plugins/prefer-plain/prefer-plain.c
==============================================================================
--- trunk/plugins/prefer-plain/prefer-plain.c	(original)
+++ trunk/plugins/prefer-plain/prefer-plain.c	Tue May 27 12:38:24 2008
@@ -99,20 +99,41 @@
 	int i, nparts, partidlen, displayid = 0;
 
 	if (epp_mode == EPP_NORMAL) {
+		gboolean have_plain = FALSE;
+
 		/* Try to find text/html part even when not as last and force to show it.
 		   Old handler will show the last part of multipart/alternate, but if we
-		   can offer HTML, then offer it, regardless of position in multipart. */
+		   can offer HTML, then offer it, regardless of position in multipart.
+		   But do this only when have text/plain in a list, because otherwise it
+		   can be something else (like outlooks meeting invites with only text/html
+		   part and calendar part).
+		*/
 		nparts = camel_multipart_get_number (mp);
 		for (i = 0; i < nparts; i++) {
+			CamelContentType *content_type;
+
 			part = camel_multipart_get_part (mp, i);
-			if (part && camel_content_type_is (camel_mime_part_get_content_type (part), "text", "html")) {
+
+			if (!part)
+				continue;
+
+			content_type = camel_mime_part_get_content_type (part);
+
+			if (camel_content_type_is (content_type, "text", "html")) {
 				displayid = i;
 				display_part = part;
-				break;
+
+				if (have_plain)
+					break;
+			} else if (camel_content_type_is (content_type, "text", "plain")) {
+				have_plain = TRUE;
+
+				if (display_part)
+					break;
 			}
 		}
 
-		if (display_part) {
+		if (display_part && have_plain) {
 			g_string_append_printf (t->format->part_id, ".alternative.%d", displayid);
 			em_format_part_as (t->format, t->stream, display_part, "text/html");
 			g_string_truncate (t->format->part_id, partidlen);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]