static GtkWidget * mail_printer_create_custom_widget_cb (GtkPrintOperation *operation, AsyncContext *async_context) { EMailDisplay *display; EMailPartList *part_list; EMailPart *part; GtkWidget *widget; gtk_print_operation_set_custom_tab_label (operation, _("Headers")); display = E_MAIL_DISPLAY (async_context->web_view); part_list = e_mail_display_get_part_list (display); /* FIXME Hard-coding the part ID works for now but could easily * break silently. Need a less brittle way of extracting * specific parts by either MIME type or GType. */ part = e_mail_part_list_ref_part (part_list, ".message.headers"); widget = e_mail_print_config_headers_new (E_MAIL_PART_HEADERS (part)); g_object_unref (part); return widget; }
static gboolean emqfe_headers_format (EMailFormatterExtension *extension, EMailFormatter *formatter, EMailFormatterContext *context, EMailPart *part, GOutputStream *stream, GCancellable *cancellable) { CamelContentType *ct; CamelMimePart *mime_part; const gchar *charset; GString *buffer; gchar **default_headers; guint ii, length = 0; g_return_val_if_fail (E_IS_MAIL_PART_HEADERS (part), FALSE); mime_part = e_mail_part_ref_mime_part (part); ct = camel_mime_part_get_content_type (mime_part); charset = camel_content_type_param (ct, "charset"); charset = camel_iconv_charset_name (charset); buffer = g_string_new (""); /* dump selected headers */ default_headers = e_mail_part_headers_dup_default_headers ( E_MAIL_PART_HEADERS (part)); if (default_headers != NULL) length = g_strv_length (default_headers); for (ii = 0; ii < length; ii++) emfqe_format_header ( formatter, context, buffer, part, default_headers[ii], charset); g_strfreev (default_headers); g_string_append (buffer, HEADER_PREFIX); g_string_append (buffer, "<br>"); g_string_append (buffer, HEADER_SUFFIX); g_output_stream_write_all ( stream, buffer->str, buffer->len, NULL, cancellable, NULL); g_string_free (buffer, TRUE); g_object_unref (mime_part); return TRUE; }
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; }