[evolution/webkit] Bug #637402 - No quoted mail when replying to html email



commit 2ba4ad6c97f59c09f6b02c7a37e8fee7e7348cef
Author: Milan Crha <mcrha redhat com>
Date:   Fri Jun 24 16:24:19 2011 +0200

    Bug #637402 - No quoted mail when replying to html email

 em-format/em-format.c |   87 +++++++++++++++++++++++++++++++++---------------
 1 files changed, 60 insertions(+), 27 deletions(-)
---
diff --git a/em-format/em-format.c b/em-format/em-format.c
index be3e935..1f9634d 100644
--- a/em-format/em-format.c
+++ b/em-format/em-format.c
@@ -1655,6 +1655,8 @@ emf_multipart_mixed (EMFormat *emf,
 	}
 }
 
+static gboolean related_display_part_is_attachment (EMFormat *emf, CamelMimePart *part);
+
 /* RFC 1740 */
 static void
 emf_multipart_alternative (EMFormat *emf,
@@ -1712,6 +1714,8 @@ emf_multipart_alternative (EMFormat *emf,
 		  return part;*/
 
 		if (!em_format_is_attachment (emf, part) &&
+		    (!camel_content_type_is (type, "multipart", "related") ||
+		    !related_display_part_is_attachment (emf, part)) &&
 		    (em_format_find_handler (emf, mime_type)
 		    || (best == NULL && em_format_fallback_handler (emf, mime_type)))) {
 			best = part;
@@ -1819,6 +1823,60 @@ emf_multipart_encrypted (EMFormat *emf,
 	g_object_unref (context);
 }
 
+static CamelMimePart *
+get_related_display_part (CamelMimePart *part, gint *out_displayid)
+{
+	CamelMultipart *mp;
+	CamelMimePart *body_part, *display_part = NULL;
+	CamelContentType *content_type;
+	const gchar *start;
+	gint i, nparts, displayid = 0;
+
+	mp = (CamelMultipart *) camel_medium_get_content ((CamelMedium *) part);
+
+	if (!CAMEL_IS_MULTIPART (mp))
+		return NULL;
+
+	nparts = camel_multipart_get_number (mp);
+	content_type = camel_mime_part_get_content_type (part);
+	start = camel_content_type_param (content_type, "start");
+	if (start && strlen (start) > 2) {
+		gint len;
+		const gchar *cid;
+
+		/* strip <>'s */
+		len = strlen (start) - 2;
+		start++;
+
+		for (i = 0; i < nparts; i++) {
+			body_part = camel_multipart_get_part (mp, i);
+			cid = camel_mime_part_get_content_id (body_part);
+
+			if (cid && !strncmp (cid, start, len) && strlen (cid) == len) {
+				display_part = body_part;
+				displayid = i;
+				break;
+			}
+		}
+	} else {
+		display_part = camel_multipart_get_part (mp, 0);
+	}
+
+	if (out_displayid)
+		*out_displayid = displayid;
+
+	return display_part;
+}
+
+static gboolean
+related_display_part_is_attachment (EMFormat *emf, CamelMimePart *part)
+{
+	CamelMimePart *display_part;
+
+	display_part = get_related_display_part (part, NULL);
+	return display_part && em_format_is_attachment (emf, display_part);
+}
+
 static void
 emf_write_related (EMFormat *emf,
                    CamelStream *stream,
@@ -1840,8 +1898,6 @@ emf_multipart_related (EMFormat *emf,
 {
 	CamelMultipart *mp;
 	CamelMimePart *body_part, *display_part = NULL;
-	CamelContentType *content_type;
-	const gchar *start;
 	gint i, nparts, partidlen, displayid = 0;
 	gchar *oldpartid;
 	GList *link;
@@ -1853,31 +1909,7 @@ emf_multipart_related (EMFormat *emf,
 		return;
 	}
 
-	/* FIXME: put this stuff in a shared function */
-	nparts = camel_multipart_get_number (mp);
-	content_type = camel_mime_part_get_content_type (part);
-	start = camel_content_type_param (content_type, "start");
-	if (start && strlen (start)>2) {
-		gint len;
-		const gchar *cid;
-
-		/* strip <>'s */
-		len = strlen (start) - 2;
-		start++;
-
-		for (i=0; i<nparts; i++) {
-			body_part = camel_multipart_get_part (mp, i);
-			cid = camel_mime_part_get_content_id (body_part);
-
-			if (cid && !strncmp (cid, start, len) && strlen (cid) == len) {
-				display_part = body_part;
-				displayid = i;
-				break;
-			}
-		}
-	} else {
-		display_part = camel_multipart_get_part (mp, 0);
-	}
+	display_part = get_related_display_part (part, &displayid);
 
 	if (display_part == NULL) {
 		emf_multipart_mixed (
@@ -1891,6 +1923,7 @@ emf_multipart_related (EMFormat *emf,
 	partidlen = emf->part_id->len;
 
 	/* queue up the parts for possible inclusion */
+	nparts = camel_multipart_get_number (mp);
 	for (i = 0; i < nparts; i++) {
 		body_part = camel_multipart_get_part (mp, i);
 		if (body_part != display_part) {



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