[evolution] [text/plain parser] Use original part when nothing found inline



commit 5ce8bf667d7151dee9a93c8421730c28877be9a5
Author: Milan Crha <mcrha redhat com>
Date:   Thu Sep 13 08:37:38 2012 +0200

    [text/plain parser] Use original part when nothing found inline
    
    This way the view corresponds to the original part properties,
    not those stripped by the inline filter. Also initialize
    EMailInlineFilter::filename on creation of the structure, thus
    the value is actually used on the subparts, if needed.

 em-format/e-mail-inline-filter.c     |    7 ++++++-
 em-format/e-mail-inline-filter.h     |    3 ++-
 em-format/e-mail-parser-text-plain.c |   15 ++++++++++++++-
 3 files changed, 22 insertions(+), 3 deletions(-)
---
diff --git a/em-format/e-mail-inline-filter.c b/em-format/e-mail-inline-filter.c
index 0c2e6b8..242ac59 100644
--- a/em-format/e-mail-inline-filter.c
+++ b/em-format/e-mail-inline-filter.c
@@ -415,6 +415,7 @@ e_mail_inline_filter_init (EMailInlineFilter *emif)
  * raw data being processed.
  * @base_type: The base content-type of the raw data, should always be
  * text/plain.
+ * @filename: Filename of the part, or NULL
  *
  * Create a filter which will scan a (text) stream for
  * embedded parts.  You can then retrieve the contents
@@ -424,7 +425,8 @@ e_mail_inline_filter_init (EMailInlineFilter *emif)
  **/
 EMailInlineFilter *
 e_mail_inline_filter_new (CamelTransferEncoding base_encoding,
-                          CamelContentType *base_type)
+                          CamelContentType *base_type,
+			  const gchar *filename)
 {
 	EMailInlineFilter *emif;
 
@@ -435,6 +437,9 @@ e_mail_inline_filter_new (CamelTransferEncoding base_encoding,
 		camel_content_type_ref (emif->base_type);
 	}
 
+	if (filename && *filename)
+		emif->filename = g_strdup (filename);
+
 	return emif;
 }
 
diff --git a/em-format/e-mail-inline-filter.h b/em-format/e-mail-inline-filter.h
index ff8248c..979ac46 100644
--- a/em-format/e-mail-inline-filter.h
+++ b/em-format/e-mail-inline-filter.h
@@ -72,7 +72,8 @@ struct _EMailInlineFilterClass {
 GType		e_mail_inline_filter_get_type	(void);
 EMailInlineFilter *
 		e_mail_inline_filter_new	(CamelTransferEncoding base_encoding,
-						 CamelContentType *type);
+						 CamelContentType *type,
+						 const gchar *filename);
 CamelMultipart *e_mail_inline_filter_get_multipart
 						(EMailInlineFilter *emif);
 gboolean	e_mail_inline_filter_found_any	(EMailInlineFilter *emif);
diff --git a/em-format/e-mail-parser-text-plain.c b/em-format/e-mail-parser-text-plain.c
index bc527e4..3503be5 100644
--- a/em-format/e-mail-parser-text-plain.c
+++ b/em-format/e-mail-parser-text-plain.c
@@ -186,7 +186,11 @@ empe_text_plain_parse (EMailParserExtension *extension,
 	null = camel_stream_null_new ();
 	filtered_stream = camel_stream_filter_new (null);
 	g_object_unref (null);
-	inline_filter = e_mail_inline_filter_new (camel_mime_part_get_encoding (part), type);
+	inline_filter = e_mail_inline_filter_new (
+		camel_mime_part_get_encoding (part),
+		type,
+		camel_mime_part_get_filename (part));
+
 	camel_stream_filter_add (
 		CAMEL_STREAM_FILTER (filtered_stream),
 		CAMEL_MIME_FILTER (inline_filter));
@@ -195,6 +199,15 @@ empe_text_plain_parse (EMailParserExtension *extension,
 	camel_stream_close ((CamelStream *) filtered_stream, cancellable, NULL);
 	g_object_unref (filtered_stream);
 
+	if (!e_mail_inline_filter_found_any (inline_filter)) {
+		g_object_unref (inline_filter);
+		camel_content_type_unref (type);
+
+		return process_part (parser, part_id, 0,
+				     part, e_mail_part_is_attachment (part),
+				     cancellable);
+	}
+
 	mp = e_mail_inline_filter_get_multipart (inline_filter);
 
 	if (charset_added) {



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