aboutsummaryrefslogtreecommitdiffstats
path: root/em-format
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2013-09-30 20:06:59 +0800
committerMilan Crha <mcrha@redhat.com>2013-09-30 20:09:45 +0800
commit6a65912679f4287dd7d45e11f5c5a7c893c43112 (patch)
tree796e3aa03c229840c73c2dc3fb79826f3fbd5720 /em-format
parentd56a65996f8075c43b97de01a338fd9298bbb2b3 (diff)
downloadgsoc2013-evolution-6a65912679f4287dd7d45e11f5c5a7c893c43112.tar
gsoc2013-evolution-6a65912679f4287dd7d45e11f5c5a7c893c43112.tar.gz
gsoc2013-evolution-6a65912679f4287dd7d45e11f5c5a7c893c43112.tar.bz2
gsoc2013-evolution-6a65912679f4287dd7d45e11f5c5a7c893c43112.tar.lz
gsoc2013-evolution-6a65912679f4287dd7d45e11f5c5a7c893c43112.tar.xz
gsoc2013-evolution-6a65912679f4287dd7d45e11f5c5a7c893c43112.tar.zst
gsoc2013-evolution-6a65912679f4287dd7d45e11f5c5a7c893c43112.zip
Bug #699997 - Show unreferenced images in multipart/related parser
Diffstat (limited to 'em-format')
-rw-r--r--em-format/e-mail-parser-multipart-related.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/em-format/e-mail-parser-multipart-related.c b/em-format/e-mail-parser-multipart-related.c
index 45a5d440f5..d73e665cd6 100644
--- a/em-format/e-mail-parser-multipart-related.c
+++ b/em-format/e-mail-parser-multipart-related.c
@@ -26,6 +26,7 @@
#include "e-mail-parser-extension.h"
#include "e-mail-part-utils.h"
+#include "e-mail-part-image.h"
typedef EMailParserExtension EMailParserMultipartRelated;
typedef EMailParserExtensionClass EMailParserMultipartRelatedClass;
@@ -51,7 +52,7 @@ empe_mp_related_parse (EMailParserExtension *extension,
GQueue *out_mail_parts)
{
CamelMultipart *mp;
- CamelMimePart *body_part, *display_part = NULL;
+ CamelMimePart *body_part, *display_part = NULL, *may_display_part;
CamelContentType *display_content_type;
gchar *html_body = NULL;
gint i, nparts, partidlen, displayid = 0;
@@ -71,12 +72,30 @@ empe_mp_related_parse (EMailParserExtension *extension,
parser, part, part_id, "multipart/mixed",
cancellable, out_mail_parts);
+ may_display_part = display_part;
+
display_content_type = camel_mime_part_get_content_type (display_part);
+ if (display_content_type && camel_content_type_is (display_content_type, "multipart", "alternative")) {
+ CamelMultipart *subparts = CAMEL_MULTIPART (camel_medium_get_content ((CamelMedium *) display_part));
+ if (subparts) {
+ nparts = camel_multipart_get_number (subparts);
+ for (i = 0; i < nparts; i++) {
+ body_part = camel_multipart_get_part (subparts, i);
+ display_content_type = camel_mime_part_get_content_type (body_part);
+ if (display_content_type && camel_content_type_is (display_content_type, "text", "html")) {
+ may_display_part = body_part;
+ break;
+ }
+ }
+ }
+ }
+
+ display_content_type = camel_mime_part_get_content_type (may_display_part);
if (display_content_type &&
camel_content_type_is (display_content_type, "text", "html")) {
CamelDataWrapper *dw;
- dw = camel_medium_get_content ((CamelMedium *) display_part);
+ dw = camel_medium_get_content ((CamelMedium *) may_display_part);
if (dw) {
CamelStream *mem = camel_stream_mem_new ();
GByteArray *bytes;
@@ -131,6 +150,13 @@ empe_mp_related_parse (EMailParserExtension *extension,
/* Don't render the part on its own! */
if (e_mail_part_utils_body_refers (html_body, cid))
mail_part->is_hidden = TRUE;
+ else if (cid && E_IS_MAIL_PART_IMAGE (mail_part) &&
+ e_mail_part_get_is_attachment (mail_part) &&
+ mail_part->is_hidden) {
+ mail_part->is_hidden = FALSE;
+
+ e_mail_parser_wrap_as_attachment (parser, body_part, part_id, &work_queue);
+ }
}
e_queue_transfer (&work_queue, out_mail_parts);