/* get a human-readable report about the signature */ static char* get_verdict_report (GMimeSignature *msig) { time_t t; const char *status, *created, *expires; gchar *certdata, *report; switch (g_mime_signature_get_status (msig)) { case GMIME_SIGNATURE_STATUS_GOOD: status = "good"; break; case GMIME_SIGNATURE_STATUS_ERROR: status = "error"; break; case GMIME_SIGNATURE_STATUS_BAD: status = "bad"; break; default: g_return_val_if_reached (NULL); } t = g_mime_signature_get_created (msig); created = (t == 0 || t == (time_t)-1) ? "?" : mu_date_str_s ("%x", t); t = g_mime_signature_get_expires (msig); expires = (t == 0 || t == (time_t)-1) ? "?" : mu_date_str_s ("%x", t); certdata = get_cert_data (g_mime_signature_get_certificate (msig)); report = g_strdup_printf ("%s; created:%s, expires:%s, %s", status, created, expires, certdata ? certdata : "?"); g_free (certdata); return report; }
const char* mu_date_display_s (time_t t) { time_t now; static const time_t SECS_IN_DAY = 24 * 60 * 60; now = time (NULL); if (ABS(now - t) > SECS_IN_DAY) return mu_date_str_s ("%x", t); else return mu_date_str_s ("%X", t); }
static const char* display_field (MuMsg *msg, MuMsgFieldId mfid) { gint64 val; switch (mu_msg_field_type(mfid)) { case MU_MSG_FIELD_TYPE_STRING: { const gchar *str; str = mu_msg_get_field_string (msg, mfid); return str ? str : ""; } case MU_MSG_FIELD_TYPE_INT: if (mfid == MU_MSG_FIELD_ID_PRIO) { val = mu_msg_get_field_numeric (msg, mfid); return mu_msg_prio_name ((MuMsgPrio)val); } else if (mfid == MU_MSG_FIELD_ID_FLAGS) { val = mu_msg_get_field_numeric (msg, mfid); return mu_str_flags_s ((MuFlags)val); } else /* as string */ return mu_msg_get_field_string (msg, mfid); case MU_MSG_FIELD_TYPE_TIME_T: val = mu_msg_get_field_numeric (msg, mfid); return mu_date_str_s ("%c", (time_t)val); case MU_MSG_FIELD_TYPE_BYTESIZE: val = mu_msg_get_field_numeric (msg, mfid); return mu_str_size_s ((unsigned)val); default: g_return_val_if_reached (NULL); } }
static GtkWidget* get_grid (MuMsg *msg) { GtkWidget *grid; int row; row = 0; grid = gtk_grid_new (); /* 5 2 */ gtk_grid_insert_column (GTK_GRID(grid), 0); gtk_grid_insert_column (GTK_GRID(grid), 1); if (add_row (grid, row, "From", mu_msg_get_from (msg), TRUE)) ++row; if (add_row (grid, row, "To", mu_msg_get_to (msg), FALSE)) ++row; if (add_row (grid, row, "Cc", mu_msg_get_cc (msg), FALSE)) ++row; if (add_row (grid, row, "Subject", mu_msg_get_subject (msg), TRUE)) ++row; if (add_row (grid, row, "Date", mu_date_str_s ("%c", mu_msg_get_date (msg)),TRUE)) ++row; return grid; }
/* we ignore fields for now */ static gboolean view_msg_plain (MuMsg *msg, const gchar *fields, gboolean summary, gboolean color) { gchar *attachs; time_t date; const GSList *lst; print_field ("From", mu_msg_get_from (msg), color); print_field ("To", mu_msg_get_to (msg), color); print_field ("Cc", mu_msg_get_cc (msg), color); print_field ("Bcc", mu_msg_get_bcc (msg), color); print_field ("Subject", mu_msg_get_subject (msg), color); if ((date = mu_msg_get_date (msg))) print_field ("Date", mu_date_str_s ("%c", date), color); if ((lst = mu_msg_get_tags (msg))) { gchar *tags; tags = mu_str_from_list (lst,','); print_field ("Tags", tags, color); g_free (tags); } if ((attachs = get_attach_str (msg))) { print_field ("Attachments", attachs, color); g_free (attachs); } body_or_summary (msg, summary, color); return TRUE; }
GtkWidget * get_table (MuMsg *msg) { GtkWidget *table; int row; row = 0; table = gtk_table_new (5, 2, FALSE); if (add_row (table, row, "From", mu_msg_get_from (msg), TRUE)) ++row; if (add_row (table, row, "To", mu_msg_get_to (msg), FALSE)) ++row; if (add_row (table, row, "Cc", mu_msg_get_cc (msg), FALSE)) ++row; if (add_row (table, row, "Subject", mu_msg_get_subject (msg), TRUE)) ++row; if (add_row (table, row, "Date", mu_date_str_s ("%c", mu_msg_get_date (msg)),TRUE)) ++row; gtk_table_resize (GTK_TABLE(table), row, 2); return table; }
char* mu_msg_part_sig_info_to_string (MuMsgPartSigInfo *info) { GString *gstr; gchar *statuses; g_return_val_if_fail (info, NULL); gstr = g_string_sized_new (128); statuses = mu_msg_part_sig_statuses_to_string (info->status); g_string_append_printf (gstr, "status: %s", statuses); g_free (statuses); if (info->status & MU_MSG_PART_SIG_STATUS_ERROR || info->status & MU_MSG_PART_SIG_STATUS_FAIL) return g_string_free (gstr, FALSE); g_string_append_printf (gstr, "; algorithms (P/D) (%s, %s)", info->pubkey_algo, info->digest_algo); g_string_append_printf (gstr, "; created: %s, expires: %s", mu_date_str_s ("%c", info->created), mu_date_str_s ("%c", info->expires)); if (info->name || info->email) g_string_append_printf (gstr, "; who:%s %s", info->name ? info-> name : "", info->email ? info->email : ""); if (info->issuer_name && info->issuer_serial) g_string_append_printf (gstr, "; issuer: %s (%s)", info->issuer_name, info->issuer_serial); if (info->fingerprint) g_string_append_printf (gstr, "; fingerprint: %s", info->fingerprint); return g_string_free (gstr, FALSE); }
/* return the path to the output file, or NULL in case of error */ static gboolean convert_to_pdf (MuMsg *msg, GError **err) { GString *gstr; const char *body; gchar *data; gboolean rv; gstr = g_string_sized_new (4096); add_header (gstr, "From", mu_msg_get_from (msg)); add_header (gstr, "To", mu_msg_get_to (msg)); add_header (gstr, "Cc", mu_msg_get_cc (msg)); add_header (gstr, "Subject", mu_msg_get_subject (msg)); add_header (gstr, "Date", mu_date_str_s ("%c", mu_msg_get_date(msg))); gstr = g_string_append (gstr, "<hr>\n"); body = mu_msg_get_body_html (msg, MU_MSG_OPTION_NONE); if (body) g_string_append_printf (gstr, "%s", body); else { body = mu_msg_get_body_text (msg, MU_MSG_OPTION_NONE); if (body) { gchar *esc; esc = g_markup_escape_text (body, -1); g_string_append_printf (gstr, "<pre>\n%s\n</pre>", esc); g_free (esc); } else gstr = g_string_append (gstr, "<i>No body</i>\n"); } data = g_string_free (gstr, FALSE); rv = generate_pdf (msg, data, err); g_free (data); return rv; }
char* mu_date_str (const char *frm, time_t t) { return g_strdup (mu_date_str_s(frm, t)); }