void e_mail_formatter_format_security_header (EMailFormatter *formatter, EMailFormatterContext *context, GString *buffer, EMailPart *part, guint32 flags) { const gchar* part_id; gchar* part_id_prefix; GString* tmp; GQueue queue = G_QUEUE_INIT; GList *head, *link; g_return_if_fail (E_IS_MAIL_PART_HEADERS (part)); /* Get prefix of this PURI */ part_id = e_mail_part_get_id (part); part_id_prefix = g_strndup (part_id, g_strrstr (part_id, ".") - part_id); /* Add encryption/signature header */ tmp = g_string_new (""); e_mail_part_list_queue_parts (context->part_list, NULL, &queue); head = g_queue_peek_head_link (&queue); /* Find first secured part. */ for (link = head; link != NULL; link = g_list_next(link)) { EMailPart *mail_part = link->data; if (!e_mail_part_has_validity (mail_part)) continue; if (!e_mail_part_id_has_prefix (mail_part, part_id_prefix)) continue; if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_SIGNED)) { g_string_append (tmp, _("GPG signed")); } if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_ENCRYPTED)) { if (tmp->len > 0) g_string_append (tmp, ", "); g_string_append (tmp, _("GPG encrypted")); } if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_SIGNED)) { if (tmp->len > 0) g_string_append (tmp, ", "); g_string_append (tmp, _("S/MIME signed")); } if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_ENCRYPTED)) { if (tmp->len > 0) g_string_append (tmp, ", "); g_string_append (tmp, _("S/MIME encrypted")); } break; } if (tmp->len > 0) { e_mail_formatter_format_header ( formatter, buffer, _("Security"), tmp->str, flags, "UTF-8"); } while (!g_queue_is_empty (&queue)) g_object_unref (g_queue_pop_head (&queue)); g_string_free (tmp, TRUE); g_free (part_id_prefix); }
static gboolean emfpe_headers_format (EMailFormatterExtension *extension, EMailFormatter *formatter, EMailFormatterContext *context, EMailPart *part, GOutputStream *stream, GCancellable *cancellable) { EMailPartHeaders *headers_part; GtkTreeModel *tree_model; GtkTreeIter iter; gboolean iter_valid; GString *str, *tmp; gchar *subject; const gchar *buf; gint attachments_count; gchar *part_id_prefix; CamelMimePart *mime_part; GQueue queue = G_QUEUE_INIT; GList *head, *link; const gchar *part_id; g_return_val_if_fail (E_IS_MAIL_PART_HEADERS (part), FALSE); mime_part = e_mail_part_ref_mime_part (part); buf = camel_medium_get_header (CAMEL_MEDIUM (mime_part), "subject"); subject = camel_header_decode_string (buf, "UTF-8"); str = g_string_new (""); g_string_append_printf (str, "<h1>%s</h1>\n", subject); g_free (subject); g_string_append ( str, "<table border=\"0\" cellspacing=\"5\" " "cellpadding=\"0\" class=\"printing-header\">\n"); headers_part = E_MAIL_PART_HEADERS (part); tree_model = e_mail_part_headers_ref_print_model (headers_part); iter_valid = gtk_tree_model_get_iter_first (tree_model, &iter); while (iter_valid) { gchar *header_name = NULL; gchar *header_value = NULL; gboolean include = FALSE; gtk_tree_model_get ( tree_model, &iter, E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_INCLUDE, &include, E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_HEADER_NAME, &header_name, E_MAIL_PART_HEADERS_PRINT_MODEL_COLUMN_HEADER_VALUE, &header_value, -1); if (include) e_mail_formatter_format_header ( formatter, str, header_name, header_value, E_MAIL_FORMATTER_HEADER_FLAG_NOLINKS, "UTF-8"); g_free (header_name); g_free (header_value); iter_valid = gtk_tree_model_iter_next (tree_model, &iter); } g_object_unref (tree_model); /* Get prefix of this PURI */ part_id = e_mail_part_get_id (part); part_id_prefix = g_strndup (part_id, g_strrstr (part_id, ".") - part_id); /* Add encryption/signature header */ tmp = g_string_new (""); e_mail_part_list_queue_parts (context->part_list, NULL, &queue); head = g_queue_peek_head_link (&queue); /* Find first secured part. */ for (link = head; link != NULL; link = g_list_next (link)) { EMailPart *mail_part = link->data; if (!e_mail_part_has_validity (mail_part)) continue; if (!e_mail_part_id_has_prefix (mail_part, part_id_prefix)) continue; if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_SIGNED)) { g_string_append (tmp, _("GPG signed")); } if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_ENCRYPTED)) { if (tmp->len > 0) g_string_append (tmp, ", "); g_string_append (tmp, _("GPG encrpyted")); } if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_SIGNED)) { if (tmp->len > 0) g_string_append (tmp, ", "); g_string_append (tmp, _("S/MIME signed")); } if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_ENCRYPTED)) { if (tmp->len > 0) g_string_append (tmp, ", "); g_string_append (tmp, _("S/MIME encrpyted")); } break; } if (tmp->len > 0) { e_mail_formatter_format_header ( formatter, str, _("Security"), tmp->str, E_MAIL_FORMATTER_HEADER_FLAG_BOLD | E_MAIL_FORMATTER_HEADER_FLAG_NOLINKS, "UTF-8"); } g_string_free (tmp, TRUE); /* Count attachments and display the number as a header */ attachments_count = 0; for (link = head; link != NULL; link = g_list_next (link)) { EMailPart *mail_part = E_MAIL_PART (link->data); if (!e_mail_part_id_has_prefix (mail_part, part_id_prefix)) continue; if (!e_mail_part_get_is_attachment (mail_part)) continue; if (mail_part->is_hidden) continue; if (e_mail_part_get_cid (mail_part) != NULL) continue; attachments_count++; } if (attachments_count > 0) { gchar *header_value; header_value = g_strdup_printf ("%d", attachments_count); e_mail_formatter_format_header ( formatter, str, _("Attachments"), header_value, E_MAIL_FORMATTER_HEADER_FLAG_BOLD | E_MAIL_FORMATTER_HEADER_FLAG_NOLINKS, "UTF-8"); g_free (header_value); } while (!g_queue_is_empty (&queue)) g_object_unref (g_queue_pop_head (&queue)); g_string_append (str, "</table>"); g_output_stream_write_all ( stream, str->str, str->len, NULL, cancellable, NULL); g_string_free (str, TRUE); g_free (part_id_prefix); g_object_unref (mime_part); return TRUE; }