New fun macro.
2001-10-22 Jeffrey Stedfast <fejj@ximian.com> * mail-display.h (mail_html_write_string): New fun macro. * mail-format.c (write_one_text_plain_chunk): Use gtk_html_write instead of mail_html_write so we avoid strdup'ing the text. (handle_text_plain_flowed): Use the mail_html_write_string macro. (handle_message_rfc822): Here too. (mail_format_raw_message): We can do it here also... (attachment_header): We can do it a little bit here... (write_address): A microscopic bit here... (write_hr): same. svn path=/trunk/; revision=13925
This commit is contained in:
committed by
Jeffrey Stedfast
parent
d012fd43ca
commit
113bb17ac1
@ -1,3 +1,16 @@
|
||||
2001-10-22 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* mail-display.h (mail_html_write_string): New fun macro.
|
||||
|
||||
* mail-format.c (write_one_text_plain_chunk): Use gtk_html_write
|
||||
instead of mail_html_write so we avoid strdup'ing the text.
|
||||
(handle_text_plain_flowed): Use the mail_html_write_string macro.
|
||||
(handle_message_rfc822): Here too.
|
||||
(mail_format_raw_message): We can do it here also...
|
||||
(attachment_header): We can do it a little bit here...
|
||||
(write_address): A microscopic bit here...
|
||||
(write_hr): same.
|
||||
|
||||
2001-10-22 Anna Marie Dirks <anna@ximian.com>
|
||||
|
||||
* mail-config.glade: Added several new accelerators to the edit account
|
||||
@ -20,6 +33,7 @@
|
||||
* mail-display.c (on_url_requested): Use the new Camel->GtkHTML
|
||||
stream - this means we don't have to chew up nearly as much
|
||||
memory...yay!
|
||||
(try_part_urls): Here too.
|
||||
|
||||
2001-10-22 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
|
||||
@ -1145,7 +1145,6 @@ try_part_urls (struct _load_content_msg *m)
|
||||
{
|
||||
GHashTable *urls;
|
||||
CamelMedium *medium;
|
||||
GByteArray *ba;
|
||||
|
||||
urls = g_datalist_get_data (m->display->data, "part_urls");
|
||||
g_return_val_if_fail (urls != NULL, FALSE);
|
||||
@ -1154,24 +1153,19 @@ try_part_urls (struct _load_content_msg *m)
|
||||
medium = g_hash_table_lookup (urls, m->url);
|
||||
if (medium) {
|
||||
CamelDataWrapper *data;
|
||||
CamelStream *stream_mem;
|
||||
|
||||
CamelStream *html_stream;
|
||||
|
||||
g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), FALSE);
|
||||
|
||||
|
||||
data = camel_medium_get_content_object (medium);
|
||||
if (!mail_content_loaded (data, m->display, FALSE, m->url, m->handle)) {
|
||||
g_warning ("This code should not be reached\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ba = g_byte_array_new ();
|
||||
stream_mem = camel_stream_mem_new_with_byte_array (ba);
|
||||
camel_data_wrapper_write_to_stream (data, stream_mem);
|
||||
/* printf ("-- begin --\n");
|
||||
printf (ba->data);
|
||||
printf ("-- end --\n"); */
|
||||
gtk_html_write (m->display->html, m->handle, ba->data, ba->len);
|
||||
camel_object_unref (CAMEL_OBJECT (stream_mem));
|
||||
|
||||
html_stream = mail_stream_gtkhtml_new (m->display->html, m->handle);
|
||||
camel_data_wrapper_write_to_stream (data, html_stream);
|
||||
camel_object_unref (CAMEL_OBJECT (html_stream));
|
||||
|
||||
gtk_html_end (m->display->html, m->handle, GTK_HTML_STREAM_OK);
|
||||
return TRUE;
|
||||
@ -1301,7 +1295,7 @@ mail_html_write (GtkHTML *html, GtkHTMLStream *stream,
|
||||
{
|
||||
char *buf;
|
||||
va_list ap;
|
||||
|
||||
|
||||
va_start (ap, format);
|
||||
buf = g_strdup_vprintf (format, ap);
|
||||
va_end (ap);
|
||||
@ -1316,24 +1310,24 @@ mail_text_write (GtkHTML *html, GtkHTMLStream *stream,
|
||||
{
|
||||
char *buf, *htmltext;
|
||||
va_list ap;
|
||||
|
||||
|
||||
va_start (ap, format);
|
||||
buf = g_strdup_vprintf (format, ap);
|
||||
va_end (ap);
|
||||
|
||||
htmltext = e_text_to_html_full (buf,
|
||||
E_TEXT_TO_HTML_CONVERT_URLS |
|
||||
|
||||
htmltext = e_text_to_html_full (buf, E_TEXT_TO_HTML_CONVERT_URLS |
|
||||
E_TEXT_TO_HTML_CONVERT_ADDRESSES |
|
||||
E_TEXT_TO_HTML_CONVERT_NL |
|
||||
E_TEXT_TO_HTML_CONVERT_SPACES |
|
||||
(mail_config_get_citation_highlight () ? E_TEXT_TO_HTML_MARK_CITATION : 0),
|
||||
mail_config_get_citation_color ());
|
||||
|
||||
|
||||
g_free (buf);
|
||||
|
||||
gtk_html_write (html, stream, "<tt>", 4);
|
||||
gtk_html_write (html, stream, htmltext, strlen (htmltext));
|
||||
gtk_html_write (html, stream, "</tt>", 5);
|
||||
g_free (htmltext);
|
||||
g_free (buf);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1342,18 +1336,18 @@ mail_error_write (GtkHTML *html, GtkHTMLStream *stream,
|
||||
{
|
||||
char *buf, *htmltext;
|
||||
va_list ap;
|
||||
|
||||
|
||||
va_start (ap, format);
|
||||
buf = g_strdup_vprintf (format, ap);
|
||||
va_end (ap);
|
||||
|
||||
|
||||
htmltext = e_text_to_html (buf, E_TEXT_TO_HTML_CONVERT_NL | E_TEXT_TO_HTML_CONVERT_URLS);
|
||||
g_free (buf);
|
||||
|
||||
|
||||
gtk_html_stream_printf (stream, "<em><font color=red>");
|
||||
gtk_html_stream_write (stream, htmltext, strlen (htmltext));
|
||||
gtk_html_stream_printf (stream, "</font></em>");
|
||||
|
||||
|
||||
g_free (htmltext);
|
||||
}
|
||||
|
||||
|
||||
@ -74,6 +74,8 @@ void mail_display_set_charset (MailDisplay *mail_display,
|
||||
void mail_display_load_images (MailDisplay *mail_display);
|
||||
|
||||
|
||||
#define mail_html_write_string(html, stream, string) gtk_html_write (html, stream, string, strlen (string))
|
||||
|
||||
void mail_html_write (GtkHTML *html,
|
||||
GtkHTMLStream *stream,
|
||||
const char *format, ...);
|
||||
|
||||
@ -210,8 +210,8 @@ mail_format_raw_message (CamelMimeMessage *mime_message, MailDisplay *md)
|
||||
TRUE, NULL, NULL))
|
||||
return;
|
||||
|
||||
mail_html_write (md->html, md->stream,
|
||||
"<table cellspacing=0 cellpadding=10 width=\"100%%\"><tr><td><tt>\n");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td><tt>\n");
|
||||
|
||||
bytes = mail_format_get_data_wrapper_text (CAMEL_DATA_WRAPPER (mime_message), md);
|
||||
if (bytes) {
|
||||
@ -220,11 +220,11 @@ mail_format_raw_message (CamelMimeMessage *mime_message, MailDisplay *md)
|
||||
E_TEXT_TO_HTML_CONVERT_SPACES | E_TEXT_TO_HTML_ESCAPE_8BIT);
|
||||
g_byte_array_free (bytes, TRUE);
|
||||
|
||||
gtk_html_write (md->html, md->stream, html, strlen (html));
|
||||
mail_html_write_string (md->html, md->stream, html);
|
||||
g_free (html);
|
||||
}
|
||||
|
||||
mail_html_write (md->html, md->stream, "</tt></td></tr></table>");
|
||||
mail_html_write_string (md->html, md->stream, "</tt></td></tr></table>");
|
||||
}
|
||||
|
||||
static const char *
|
||||
@ -649,9 +649,9 @@ attachment_header (CamelMimePart *part, const char *mime_type, MailDisplay *md)
|
||||
g_free (htmlinfo);
|
||||
}
|
||||
|
||||
mail_html_write (md->html, md->stream,
|
||||
"</font></td></tr><tr><td height=10><table height=10 cellspacing=0 cellpadding=0>"
|
||||
"<tr><td></td></tr></table></td></tr></table>\n");
|
||||
mail_html_write_string (md->html, md->stream, "</font></td></tr><tr>"
|
||||
"<td height=10><table height=10 cellspacing=0 cellpadding=0>"
|
||||
"<tr><td></td></tr></table></td></tr></table>\n");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -838,7 +838,7 @@ write_address (MailDisplay *md, const CamelInternetAddress *addr, const char *fi
|
||||
}
|
||||
|
||||
if (i)
|
||||
mail_html_write (md->html, md->stream, ", ");
|
||||
mail_html_write_string (md->html, md->stream, ", ");
|
||||
|
||||
if (have_email || have_name) {
|
||||
if (!have_email) {
|
||||
@ -873,7 +873,8 @@ write_address (MailDisplay *md, const CamelInternetAddress *addr, const char *fi
|
||||
|
||||
i++;
|
||||
}
|
||||
mail_html_write (md->html, md->stream, "</td></tr>");
|
||||
|
||||
mail_html_write_string (md->html, md->stream, "</td></tr>");
|
||||
}
|
||||
|
||||
/* order of these must match write_header code */
|
||||
@ -1008,10 +1009,10 @@ write_headers (CamelMimeMessage *message, MailDisplay *md)
|
||||
write_default_header(message, md, i, 0);
|
||||
}
|
||||
|
||||
mail_html_write (md->html, md->stream,
|
||||
"</table></td></tr></table></td></tr></table></font></td>"
|
||||
"<td><table width=10 cellpadding=0 cellspacing=0><tr><td></td></tr></table></td></tr>"
|
||||
"</table>\n");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"</table></td></tr></table></td></tr></table></font></td>"
|
||||
"<td><table width=10 cellpadding=0 cellspacing=0><tr><td>"
|
||||
"</td></tr></table></td></tr></table>\n");
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1095,9 +1096,9 @@ mail_format_get_data_wrapper_text (CamelDataWrapper *wrapper, MailDisplay *mail_
|
||||
static void
|
||||
write_hr (MailDisplay *md)
|
||||
{
|
||||
mail_html_write (md->html, md->stream,
|
||||
"<table cellspacing=0 cellpadding=10 width=\"100%%\"><tr><td width=\"100%%\">"
|
||||
"<hr noshadow size=1></td></tr></table>\n");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td width=\"100%\">"
|
||||
"<hr noshadow size=1></td></tr></table>\n");
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------*
|
||||
@ -1119,10 +1120,11 @@ struct {
|
||||
static void
|
||||
write_one_text_plain_chunk (const char *text, int len, MailDisplay *md)
|
||||
{
|
||||
mail_html_write (md->html, md->stream, "<table cellspacing=0 cellpadding=10 width=\"100%%\"><tr><td>\n");
|
||||
mail_text_write (md->html, md->stream, "%.*s", len, text);
|
||||
mail_html_write (md->html, md->stream, "</td></tr></table>\n");
|
||||
}
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td>\n");
|
||||
gtk_html_write (md->html, md->stream, text, len);
|
||||
mail_html_write_string (md->html, md->stream, "</td></tr></table>\n");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
handle_text_plain (CamelMimePart *part, const char *mime_type,
|
||||
@ -1204,11 +1206,11 @@ handle_text_plain_flowed (char *buf, MailDisplay *md)
|
||||
char *text, *line, *eol, *p;
|
||||
int prevquoting = 0, quoting, len, br_pending = 0;
|
||||
guint32 citation_color = mail_config_get_citation_color ();
|
||||
|
||||
mail_html_write (md->html, md->stream,
|
||||
"\n<!-- text/plain, flowed -->\n"
|
||||
"<table cellspacing=0 cellpadding=10 width=\"100%%\"><tr><td>\n<tt>\n");
|
||||
|
||||
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"\n<!-- text/plain, flowed -->\n"
|
||||
"<table cellspacing=0 cellpadding=10 width=\"100%\"><tr><td>\n<tt>\n");
|
||||
|
||||
for (line = buf; *line; line = eol + 1) {
|
||||
/* Process next line */
|
||||
eol = strchr (line, '\n');
|
||||
@ -1227,23 +1229,23 @@ handle_text_plain_flowed (char *buf, MailDisplay *md)
|
||||
br_pending--;
|
||||
}
|
||||
while (quoting > prevquoting) {
|
||||
mail_html_write (md->html, md->stream,
|
||||
"<blockquote>");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"<blockquote>");
|
||||
prevquoting++;
|
||||
}
|
||||
while (quoting < prevquoting) {
|
||||
mail_html_write (md->html, md->stream,
|
||||
"</blockquote>");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"</blockquote>");
|
||||
prevquoting--;
|
||||
}
|
||||
if (quoting == 0) {
|
||||
mail_html_write (md->html, md->stream,
|
||||
"</font>\n");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"</font>\n");
|
||||
if (br_pending)
|
||||
br_pending--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (*p == ' ')
|
||||
p++;
|
||||
len = strlen (p);
|
||||
@ -1251,28 +1253,28 @@ handle_text_plain_flowed (char *buf, MailDisplay *md)
|
||||
br_pending++;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
while (br_pending) {
|
||||
mail_html_write (md->html, md->stream, "<br>\n");
|
||||
mail_html_write_string (md->html, md->stream, "<br>\n");
|
||||
br_pending--;
|
||||
}
|
||||
|
||||
|
||||
/* replace '<' with '<', etc. */
|
||||
text = e_text_to_html (p, E_TEXT_TO_HTML_CONVERT_SPACES |
|
||||
E_TEXT_TO_HTML_CONVERT_URLS);
|
||||
if (text && *text)
|
||||
mail_html_write (md->html, md->stream, "%s", text);
|
||||
mail_html_write_string (md->html, md->stream, text);
|
||||
g_free (text);
|
||||
|
||||
|
||||
if (p[len - 1] != ' ' || !strcmp (p, "-- "))
|
||||
br_pending++;
|
||||
|
||||
|
||||
if (!eol)
|
||||
break;
|
||||
}
|
||||
g_free (buf);
|
||||
|
||||
mail_html_write (md->html, md->stream, "</tt>\n</td></tr></table>\n");
|
||||
mail_html_write_string (md->html, md->stream, "</tt>\n</td></tr></table>\n");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -1549,12 +1551,12 @@ handle_text_enriched (CamelMimePart *part, const char *mime_type,
|
||||
|
||||
if (!g_strcasecmp (mime_type, "text/richtext")) {
|
||||
enriched = FALSE;
|
||||
mail_html_write (md->html, md->stream,
|
||||
"\n<!-- text/richtext -->\n");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"\n<!-- text/richtext -->\n");
|
||||
} else {
|
||||
enriched = TRUE;
|
||||
mail_html_write (md->html, md->stream,
|
||||
"\n<!-- text/enriched -->\n");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"\n<!-- text/enriched -->\n");
|
||||
}
|
||||
|
||||
/* This is not great code, but I don't feel like fixing it right
|
||||
@ -1661,7 +1663,7 @@ handle_text_html (CamelMimePart *part, const char *mime_type,
|
||||
{
|
||||
const char *location;
|
||||
|
||||
mail_html_write (md->html, md->stream, "\n<!-- text/html -->\n");
|
||||
mail_html_write_string (md->html, md->stream, "\n<!-- text/html -->\n");
|
||||
|
||||
/* FIXME: deal with relative URLs */
|
||||
location = get_location (part, md);
|
||||
@ -1793,13 +1795,13 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type,
|
||||
"<td><table width=3 cellspacing=0 cellpadding=0><tr><td></td></tr></table></td>"
|
||||
"<td><font size=-1>", url);
|
||||
|
||||
mail_html_write (md->html, md->stream, "%s",
|
||||
U_("This message is digitally signed. "
|
||||
"Click the lock icon for more information."));
|
||||
|
||||
mail_html_write (md->html, md->stream,
|
||||
"</font></td></tr><tr><td height=10><table height=10 cellspacing=0 cellpadding=0>"
|
||||
"<tr><td></td></tr></table></td></tr></table>\n");
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
U_("This message is digitally signed. "
|
||||
"Click the lock icon for more information."));
|
||||
|
||||
mail_html_write_string (md->html, md->stream,
|
||||
"</font></td></tr><tr><td height=10><table height=10 cellspacing=0 cellpadding=0>"
|
||||
"<tr><td></td></tr></table></td></tr></table>\n");
|
||||
} else {
|
||||
CamelCipherValidity *valid = NULL;
|
||||
CamelException ex;
|
||||
@ -1838,14 +1840,13 @@ handle_multipart_signed (CamelMimePart *part, const char *mime_type,
|
||||
}
|
||||
|
||||
if (message) {
|
||||
mail_html_write (md->html, md->stream,
|
||||
"<font size=-1 %s>",
|
||||
mail_html_write (md->html, md->stream, "<font size=-1 %s>",
|
||||
good ? "" : "color=red");
|
||||
mail_text_write (md->html, md->stream, "%s", message);
|
||||
mail_html_write (md->html, md->stream, "</font>");
|
||||
mail_html_write_string (md->html, md->stream, "</font>");
|
||||
}
|
||||
|
||||
mail_html_write (md->html, md->stream, "</td></tr></table>");
|
||||
mail_html_write_string (md->html, md->stream, "</td></tr></table>");
|
||||
camel_exception_clear (&ex);
|
||||
camel_cipher_validity_free (valid);
|
||||
}
|
||||
@ -1993,10 +1994,10 @@ handle_message_rfc822 (CamelMimePart *part, const char *mime_type,
|
||||
|
||||
g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (wrapper), FALSE);
|
||||
|
||||
mail_html_write (md->html, md->stream, "<blockquote>");
|
||||
mail_html_write_string (md->html, md->stream, "<blockquote>");
|
||||
mail_format_mime_message (CAMEL_MIME_MESSAGE (wrapper), md);
|
||||
mail_html_write (md->html, md->stream, "</blockquote>");
|
||||
|
||||
mail_html_write_string (md->html, md->stream, "</blockquote>");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user