aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog14
-rw-r--r--mail/mail-display.c7
-rw-r--r--mail/mail-format.c115
3 files changed, 100 insertions, 36 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index c30573b8f6..a3b5431668 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,17 @@
+2001-05-16 Dan Winship <danw@ximian.com>
+
+ * mail-display.c (mail_display_redisplay): Deal with full-header
+ mode in addition to source mode
+
+ * mail-format.c (write_field_row_begin): Add WRITE_NOCOLUMNS flag
+ to write the header in a single table cell rather than two. Output
+ the second columns's "<td>" when not in NOCOLUMNS mode. Don't
+ include the ":" in the passed-in header name.
+ (write_date, write_address): Update for write_field_row_begin
+ changes.
+ (write_text_field): Genericified and updated from write_subject.
+ (write_headers): Deal with both normal and full-header mode.
+
2001-05-15 Dan Winship <danw@ximian.com>
* mail-display.c (on_url_requested): Load http images if the user
diff --git a/mail/mail-display.c b/mail/mail-display.c
index d1433622cb..87ca5fd1dd 100644
--- a/mail/mail-display.c
+++ b/mail/mail-display.c
@@ -1115,10 +1115,13 @@ mail_display_redisplay (MailDisplay *md, gboolean unscroll)
mail_html_write (md->html, md->stream, "%s%s", HTML_HEADER, "<BODY>\n");
if (md->current_message) {
- if (mail_config_get_message_display_style () == MAIL_CONFIG_DISPLAY_SOURCE)
+ MailConfigDisplayStyle style = mail_config_get_message_display_style ();
+ if (style == MAIL_CONFIG_DISPLAY_SOURCE)
mail_format_raw_message (md->current_message, md);
- else
+ else {
+ g_datalist_set_data (md->data, "full_headers", GINT_TO_POINTER (style == MAIL_CONFIG_DISPLAY_FULL_HEADERS));
mail_format_mime_message (md->current_message, md);
+ }
}
mail_html_write (md->html, md->stream, "</BODY></HTML>\n");
diff --git a/mail/mail-format.c b/mail/mail-format.c
index 848dab7bbd..d0c70faeca 100644
--- a/mail/mail-format.c
+++ b/mail/mail-format.c
@@ -606,20 +606,28 @@ format_mime_part (CamelMimePart *part, MailDisplay *md)
/* flags for write_field_to_stream */
enum {
WRITE_BOLD=1,
+ WRITE_NOCOLUMNS=2,
};
static void
-write_field_row_begin (const char *description, gint flags, GtkHTML *html, GtkHTMLStream *stream)
+write_field_row_begin (const char *name, gint flags, GtkHTML *html, GtkHTMLStream *stream)
{
- char *encoded_desc;
- int bold = (flags & WRITE_BOLD) == WRITE_BOLD;
+ char *encoded_name;
+ gboolean bold = (flags & WRITE_BOLD);
+ gboolean nocolumns = (flags & WRITE_NOCOLUMNS);
- encoded_desc = e_utf8_from_gtk_string (GTK_WIDGET (html), description);
+ encoded_name = e_utf8_from_gtk_string (GTK_WIDGET (html), name);
- mail_html_write (html, stream, "<tr><%s align=\"right\" valign=\"top\">%s</%s>",
- bold ? "th" : "td", encoded_desc, bold ? "th" : "td");
+ if (nocolumns) {
+ mail_html_write (html, stream, "<tr><td>%s%s:%s ",
+ bold ? "<b>" : "", encoded_name,
+ bold ? "</b>" : "");
+ } else {
+ mail_html_write (html, stream, "<tr><%s align=\"right\" valign=\"top\">%s:</%s><td>",
+ bold ? "th" : "td", encoded_name, bold ? "th" : "td");
+ }
- g_free (encoded_desc);
+ g_free (encoded_name);
}
static void
@@ -629,32 +637,32 @@ write_date (CamelMimeMessage *message, int flags, GtkHTML *html, GtkHTMLStream *
time_t date;
int offset;
- write_field_row_begin (_("Date:"), flags, html, stream);
+ write_field_row_begin (_("Date"), flags, html, stream);
date = camel_mime_message_get_date (message, &offset);
datestr = header_format_date (date, offset);
- mail_html_write (html, stream, "<td>%s</td> </tr>", datestr);
+ mail_html_write (html, stream, "%s</td> </tr>", datestr);
g_free (datestr);
}
static void
-write_subject (const char *subject, int flags, GtkHTML *html, GtkHTMLStream *stream)
+write_text_header (const char *name, const char *value, int flags, GtkHTML *html, GtkHTMLStream *stream)
{
- char *encoded_subj;
+ char *encoded;
- if (subject)
- encoded_subj = e_text_to_html (subject, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS);
+ if (value && *value)
+ encoded = e_text_to_html (value, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS);
else
- encoded_subj = "";
+ encoded = "";
- write_field_row_begin (_("Subject:"), flags, html, stream);
+ write_field_row_begin (name, flags, html, stream);
- mail_html_write (html, stream, "<td>%s</td> </tr>", encoded_subj);
+ mail_html_write (html, stream, "%s</td> </tr>", encoded);
- if (subject)
- g_free (encoded_subj);
+ if (value)
+ g_free (encoded);
}
static gchar *
@@ -703,7 +711,8 @@ write_address(MailDisplay *md, const CamelInternetAddress *addr, const char *fie
email_disp = e_text_to_html (email, 0);
}
- mail_html_write (md->html, md->stream, i ? ", " : "<td>");
+ if (i)
+ mail_html_write (md->html, md->stream, ", ");
if (have_email || have_name) {
@@ -735,33 +744,71 @@ write_address(MailDisplay *md, const CamelInternetAddress *addr, const char *fie
++i;
}
- mail_html_write (md->html, md->stream, "</td></tr>"); /* Finish up the table row */
+ mail_html_write (md->html, md->stream, "</td></tr>");
}
static void
+write_header (CamelMimeMessage *message, MailDisplay *md,
+ const char *name, const char *value, int flags)
+{
+ if (!g_strcasecmp (name, "From")) {
+ write_address (md, camel_mime_message_get_from (message),
+ _("From"), flags | WRITE_BOLD);
+ } else if (!g_strcasecmp (name, "Reply-To")) {
+ write_address (md, camel_mime_message_get_reply_to (message),
+ _("Reply-To"), flags);
+ } else if (!g_strcasecmp (name, "To")) {
+ write_address (md, camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO),
+ _("To"), flags | WRITE_BOLD);
+ } else if (!g_strcasecmp (name, "Cc")) {
+ write_address (md, camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC),
+ _("Cc"), flags | WRITE_BOLD);
+ } else if (!g_strcasecmp (name, "Subject")) {
+ write_text_header (_("Subject"), camel_mime_message_get_subject (message), flags | WRITE_BOLD, md->html, md->stream);
+ } else if (!g_strcasecmp (name, "Date")) {
+ write_date (message, flags | WRITE_BOLD, md->html, md->stream);
+ } else
+ write_text_header (name, value, flags, md->html, md->stream);
+}
+
+static void
write_headers (CamelMimeMessage *message, MailDisplay *md)
{
+ GArray *gheaders;
+ CamelMediumHeader *headers, default_headers[] = {
+ { "From", NULL }, { "Reply-To", NULL },
+ { "To", NULL }, { "Cc" , NULL }, { "Subject", NULL },
+ { "Date", NULL }
+ };
+ int i, len, flags;
+ gboolean full = GPOINTER_TO_INT (g_datalist_get_data (md->data, "full_headers"));
+
mail_html_write (md->html, md->stream,
"<font color=\"#000000\">"
"<table bgcolor=\"#000000\" width=\"100%%\" "
"cellspacing=0 cellpadding=1><tr><td>"
"<table bgcolor=\"#EEEEEE\" width=\"100%%\" cellpadding=0 cellspacing=0>"
"<tr><td><table>\n");
-
- write_address(md, camel_mime_message_get_from(message),
- _("From:"), WRITE_BOLD);
- write_address(md, camel_mime_message_get_reply_to(message),
- _("Reply-To:"), 0);
- write_address(md, camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_TO),
- _("To:"), WRITE_BOLD);
- write_address(md, camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_CC),
- _("Cc:"), WRITE_BOLD);
-
- write_subject (camel_mime_message_get_subject (message), WRITE_BOLD, md->html, md->stream);
-
- write_date (message,WRITE_BOLD, md->html, md->stream);
-
+
+ if (full) {
+ gheaders = camel_medium_get_headers (CAMEL_MEDIUM (message));
+ headers = (CamelMediumHeader *)gheaders->data;
+ len = gheaders->len;
+ flags = WRITE_NOCOLUMNS;
+ } else {
+ gheaders = NULL;
+ headers = default_headers;
+ len = sizeof (default_headers) / sizeof (default_headers[0]);
+ flags = 0;
+ }
+
+ for (i = 0; i < len; i++)
+ write_header (message, md, headers[i].name, headers[i].value, flags);
+
+ if (gheaders)
+ camel_medium_free_headers (CAMEL_MEDIUM (message), gheaders);
+
mail_html_write (md->html, md->stream,
"</table></td></tr></table></td></tr></table></font>");
}