diff options
author | Dan Vrátil <dvratil@redhat.com> | 2012-04-16 20:10:59 +0800 |
---|---|---|
committer | Dan Vrátil <dvratil@redhat.com> | 2012-04-16 20:10:59 +0800 |
commit | 681fef448f143a3702c9ea127ae0a3f889e01472 (patch) | |
tree | 673e75428989fc052b14c793e679cf015081d2c5 | |
parent | bdc9e28f725b0cacb4eb00e09a903f602a299d04 (diff) | |
download | gsoc2013-evolution-681fef448f143a3702c9ea127ae0a3f889e01472.tar.gz gsoc2013-evolution-681fef448f143a3702c9ea127ae0a3f889e01472.tar.zst gsoc2013-evolution-681fef448f143a3702c9ea127ae0a3f889e01472.zip |
Bug #674176 - Sender's photo not shown properly
-rw-r--r-- | mail/em-format-html.c | 86 |
1 files changed, 45 insertions, 41 deletions
diff --git a/mail/em-format-html.c b/mail/em-format-html.c index cb98aa2b9e..03db82f850 100644 --- a/mail/em-format-html.c +++ b/mail/em-format-html.c @@ -2600,6 +2600,37 @@ efh_format_short_headers (EMFormatHTML *efh, } static void +write_contact_picture (CamelMimePart *part, gint size, GString *buffer) +{ + gchar *b64, *content_type; + CamelDataWrapper *dw; + CamelContentType *ct; + GByteArray *ba; + + dw = camel_medium_get_content (CAMEL_MEDIUM (part)); + ba = camel_data_wrapper_get_byte_array (dw); + + b64 = g_base64_encode (ba->data, ba->len); + ct = camel_mime_part_get_content_type (part); + content_type = camel_content_type_simple (ct); + + if (size >= 0) { + g_string_append_printf ( + buffer, + "<img width=\"%d\" src=\"data:%s;base64,%s\">", + size, content_type, b64); + } else { + g_string_append_printf ( + buffer, + "<img src=\"data:%s;base64,%s\">", + content_type, b64); + } + + g_free (b64); + g_free (content_type); +} + +static void efh_format_full_headers (EMFormatHTML *efh, GString *buffer, CamelMedium *part, @@ -2707,7 +2738,7 @@ efh_format_full_headers (EMFormatHTML *efh, g_free (header_sender); g_free (header_from); - g_string_append (buffer, "<tr><td><table border=0 cellpadding=\"0\">\n"); + g_string_append (buffer, "<tr><td width=\"100%%\"><table border=0 cellpadding=\"0\">\n"); g_free (evolution_imagesdir); @@ -2800,7 +2831,6 @@ efh_format_full_headers (EMFormatHTML *efh, g_string_append (buffer, "</table></td>"); if (photo_name) { - const gchar *classid; CamelMimePart *photopart; gboolean only_local_photo; @@ -2810,44 +2840,26 @@ efh_format_full_headers (EMFormatHTML *efh, photopart = em_utils_contact_photo (cia, only_local_photo); if (photopart) { - EMFormatPURI *puri; - contact_has_photo = TRUE; - classid = "icon:///em-format-html/headers/photo"; - g_string_append_printf ( - buffer, - "<td align=\"right\" valign=\"top\">" - "<img width=64 src=\"%s\"></td>", - classid); - puri = em_format_puri_new ( - emf, sizeof (EMFormatPURI), photopart, classid); - puri->write_func = efh_write_image; - em_format_add_puri (emf, puri); + g_string_append (buffer, "<td align=\"right\" valign=\"top\">"); + write_contact_picture (photopart, -1, buffer); + g_string_append (buffer, "</td>"); g_object_unref (photopart); } g_object_unref (cia); } if (!contact_has_photo && face_decoded) { - const gchar *classid; CamelMimePart *part; - EMFormatPURI *puri; part = camel_mime_part_new (); camel_mime_part_set_content ( (CamelMimePart *) part, (const gchar *) face_header_value, face_header_len, "image/png"); - classid = "icon:///em-format-html/headers/face/photo"; - g_string_append_printf ( - buffer, - "<td align=\"right\" valign=\"top\">" - "<img width=48 src=\"%s\"></td>", - classid); - puri = em_format_puri_new ( - emf, sizeof (EMFormatPURI), part, classid); - puri->write_func = efh_write_image; - em_format_add_puri (emf, puri); + g_string_append (buffer, "<td align=\"right\" valign=\"top\">"); + write_contact_picture (part, 48, buffer); + g_string_append (buffer, "</td>"); g_object_unref (part); g_free (face_header_value); @@ -2855,19 +2867,11 @@ efh_format_full_headers (EMFormatHTML *efh, if (have_icon && efh->show_icon) { GtkIconInfo *icon_info; - const gchar *classid; CamelMimePart *iconpart = NULL; - EMFormatPURI *puri; - classid = "icon:///em-format-html/header/icon"; - g_string_append_printf ( - buffer, - "<td align=\"right\" valign=\"top\">" - "<img width=16 height=16 src=\"%s\"></td>", - classid); - icon_info = gtk_icon_theme_lookup_icon ( - gtk_icon_theme_get_default (), - "evolution", 16, GTK_ICON_LOOKUP_NO_SVG); + icon_info = gtk_icon_theme_lookup_icon ( + gtk_icon_theme_get_default (), + "evolution", 16, GTK_ICON_LOOKUP_NO_SVG); if (icon_info != NULL) { iconpart = em_format_html_file_part ( (EMFormatHTML *) emf, "image/png", @@ -2876,10 +2880,10 @@ efh_format_full_headers (EMFormatHTML *efh, gtk_icon_info_free (icon_info); } if (iconpart) { - puri = em_format_puri_new ( - emf, sizeof (EMFormatPURI), iconpart, classid); - puri->write_func = efh_write_image; - em_format_add_puri (emf, puri); + g_string_append (buffer, "<td align=\"right\" valign=\"top\">"); + write_contact_picture (iconpart, 16, buffer); + g_string_append (buffer, "</td>"); + g_object_unref (iconpart); } } |