aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/prefer-plain/prefer-plain.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2007-10-30 17:06:26 +0800
committerMilan Crha <mcrha@src.gnome.org>2007-10-30 17:06:26 +0800
commit21ec67eb25834ee0b37d72bafd464cb8b395efe5 (patch)
treed9f791a536290bc4183725a0c7528726406be30c /plugins/prefer-plain/prefer-plain.c
parent69c8f40f0919bf60dc39ea5d0e905e446a619870 (diff)
downloadgsoc2013-evolution-21ec67eb25834ee0b37d72bafd464cb8b395efe5.tar.gz
gsoc2013-evolution-21ec67eb25834ee0b37d72bafd464cb8b395efe5.tar.zst
gsoc2013-evolution-21ec67eb25834ee0b37d72bafd464cb8b395efe5.zip
** Fix for bug #487922 (Sometimes evolution does not recognize
2007-10-30 Milan Crha <mcrha@redhat.com> ** Fix for bug #487922 (Sometimes evolution does not recognize attachments) * prefer-plain.c: (export_as_attachments): New helper function to export message parts as attachments. This will traverse whole hierarchy of message's parts in multipart message. * prefer-plain.c: (org_gnome_prefer_plain_multipart_alternative): Use this function to export other parts as attachments. svn path=/trunk/; revision=34452
Diffstat (limited to 'plugins/prefer-plain/prefer-plain.c')
-rw-r--r--plugins/prefer-plain/prefer-plain.c54
1 files changed, 44 insertions, 10 deletions
diff --git a/plugins/prefer-plain/prefer-plain.c b/plugins/prefer-plain/prefer-plain.c
index b21b69b53f..56d4bd3458 100644
--- a/plugins/prefer-plain/prefer-plain.c
+++ b/plugins/prefer-plain/prefer-plain.c
@@ -48,6 +48,49 @@ org_gnome_prefer_plain_text_html(void *ep, EMFormatHookTarget *t)
em_format_part_as(t->format, t->stream, t->part, NULL);
}
+static void
+export_as_attachments (CamelMultipart *mp, EMFormat *format, CamelStream *stream, CamelMimePart *except)
+{
+ int i, nparts, partidlen;
+ CamelMimePart *part;
+
+ if (!mp || !CAMEL_IS_MULTIPART (mp))
+ return;
+
+ partidlen = format->part_id->len;
+
+ nparts = camel_multipart_get_number(mp);
+ for (i = 0; i < nparts; i++) {
+ part = camel_multipart_get_part (mp, i);
+
+ if (part != except) {
+ CamelMultipart *multipart = (CamelMultipart *)camel_medium_get_content_object((CamelMedium *)part);
+
+ if (CAMEL_IS_MULTIPART (multipart)) {
+ export_as_attachments (multipart, format, stream, except);
+ } else {
+ g_string_append_printf (format->part_id, ".alternative.%d", i);
+
+ if (camel_content_type_is (camel_mime_part_get_content_type (part), "text", "html")) {
+ /* always show HTML as attachments and not inline */
+ camel_mime_part_set_disposition (part, "attachment");
+
+ if (!camel_mime_part_get_filename (part)) {
+ char *str = g_strdup_printf ("%s.html", _("attachment"));
+ camel_mime_part_set_filename (part, str);
+ g_free (str);
+ }
+
+ em_format_part_as (format, stream, part, "application/octet-stream");
+ } else
+ em_format_part (format, stream, part);
+
+ g_string_truncate (format->part_id, partidlen);
+ }
+ }
+ }
+}
+
void
org_gnome_prefer_plain_multipart_alternative(void *ep, EMFormatHookTarget *t)
{
@@ -84,16 +127,7 @@ org_gnome_prefer_plain_multipart_alternative(void *ep, EMFormatHookTarget *t)
}
/* all other parts are attachments */
- for (i=0;i<nparts; i++) {
- part = camel_multipart_get_part(mp, i);
- if (part != display_part) {
- g_string_append_printf(t->format->part_id, ".alternative.%d", i);
-
- em_format_part_as(t->format, t->stream, t->part, NULL);
-
- g_string_truncate(t->format->part_id, partidlen);
- }
- }
+ export_as_attachments (mp, t->format, t->stream, display_part);
g_string_truncate(t->format->part_id, partidlen);
}