diff options
author | Milan Crha <mcrha@redhat.com> | 2012-09-13 14:37:38 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2012-09-13 14:41:27 +0800 |
commit | 5ce8bf667d7151dee9a93c8421730c28877be9a5 (patch) | |
tree | ae5b5bf6abc47048ce88246933ec8f6b9a7cb7ef /em-format | |
parent | 656ae89d53cf4c2553d4997d17f5c89888c493b1 (diff) | |
download | gsoc2013-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.
Diffstat (limited to 'em-format')
-rw-r--r-- | em-format/e-mail-inline-filter.c | 7 | ||||
-rw-r--r-- | em-format/e-mail-inline-filter.h | 3 | ||||
-rw-r--r-- | 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 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) { |