From a4def5c093033ffe2fd645624235afaea8720f91 Mon Sep 17 00:00:00 2001 From: "Matthew W. S. Bell" Date: Wed, 16 Dec 2009 20:19:58 +0100 Subject: Bug #553057 - Show signer's information in a message window/preview --- mail/em-format-html.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) (limited to 'mail/em-format-html.c') diff --git a/mail/em-format-html.c b/mail/em-format-html.c index 6fbc6079aa..86ad0a5701 100644 --- a/mail/em-format-html.c +++ b/mail/em-format-html.c @@ -1595,11 +1595,23 @@ efh_format_secure(EMFormat *emf, CamelStream *stream, CamelMimePart *part, Camel g_free(classid); if (valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE) { - camel_stream_printf(stream, "%s
", _(smime_sign_table[valid->sign.status].shortdesc)); + gchar *signers; + + camel_stream_printf (stream, "%s", _(smime_sign_table[valid->sign.status].shortdesc)); + + signers = em_format_html_format_cert_infos ((CamelCipherCertInfo *)valid->sign.signers.head); + if (signers && *signers) { + camel_stream_printf (stream, " (%s)", signers); + } + g_free (signers); } if (valid->encrypt.status != CAMEL_CIPHER_VALIDITY_ENCRYPT_NONE) { - camel_stream_printf(stream, "%s
", _(smime_encrypt_table[valid->encrypt.status].shortdesc)); + if (valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE) { + camel_stream_printf (stream, "
"); + } + + camel_stream_printf (stream, "%s", _(smime_encrypt_table[valid->encrypt.status].shortdesc)); } camel_stream_printf(stream, ""); @@ -2776,3 +2788,48 @@ efh_format_message(EMFormat *emf, CamelStream *stream, CamelMimePart *part, cons emf->valid = save; emf->valid_parent = save_parent; } + +gchar * +em_format_html_format_cert_infos (CamelCipherCertInfo *first_cinfo) +{ + GString *res = NULL; + CamelCipherCertInfo *cinfo; + + if (!first_cinfo) + return NULL; + + #define append(x) G_STMT_START { \ + if (!res) { \ + res = g_string_new (x); \ + } else { \ + g_string_append (res, x); \ + } \ + } G_STMT_END + + for (cinfo = first_cinfo; cinfo && cinfo->next; cinfo = cinfo->next) { + if (!cinfo->name && !cinfo->email) + continue; + + if (res) + append (", "); + + if (cinfo->name && *cinfo->name) { + append (cinfo->name); + + if (cinfo->email && *cinfo->email) { + append (" <"); + append (cinfo->email); + append (">"); + } + } else if (cinfo->email && *cinfo->email) { + append (cinfo->email); + } + } + + #undef append + + if (!res) + return NULL; + + return g_string_free (res, FALSE); +} -- cgit