aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2012-09-13 14:37:38 +0800
committerMilan Crha <mcrha@redhat.com>2012-09-13 14:41:27 +0800
commit5ce8bf667d7151dee9a93c8421730c28877be9a5 (patch)
treeae5b5bf6abc47048ce88246933ec8f6b9a7cb7ef
parent656ae89d53cf4c2553d4997d17f5c89888c493b1 (diff)
downloadgsoc2013-evolution-5ce8bf667d7151dee9a93c8421730c28877be9a5.tar
gsoc2013-evolution-5ce8bf667d7151dee9a93c8421730c28877be9a5.tar.gz
gsoc2013-evolution-5ce8bf667d7151dee9a93c8421730c28877be9a5.tar.bz2
gsoc2013-evolution-5ce8bf667d7151dee9a93c8421730c28877be9a5.tar.lz
gsoc2013-evolution-5ce8bf667d7151dee9a93c8421730c28877be9a5.tar.xz
gsoc2013-evolution-5ce8bf667d7151dee9a93c8421730c28877be9a5.tar.zst
gsoc2013-evolution-5ce8bf667d7151dee9a93c8421730c28877be9a5.zip
[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.
-rw-r--r--em-format/e-mail-inline-filter.c7
-rw-r--r--em-format/e-mail-inline-filter.h3
-rw-r--r--em-format/e-mail-parser-text-plain.c15
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 0c2e6b835e..242ac5959a 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 ff8248c681..979ac46a12 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 bc527e4fe4..3503be5979 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) {