New class that wraps writing to a GtkHTML stream so that we don't have to
2001-10-22 Jeffrey Stedfast <fejj@ximian.com> * mail-stream-gtkhtml.c (mail_stream_gtkhtml_new): New class that wraps writing to a GtkHTML stream so that we don't have to write to an intermediate GByteArray. * 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! svn path=/trunk/; revision=13911
This commit is contained in:
committed by
Jeffrey Stedfast
parent
dcc5cbe678
commit
4807a4d7e7
@ -1,3 +1,13 @@
|
||||
2001-10-22 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* mail-stream-gtkhtml.c (mail_stream_gtkhtml_new): New class that
|
||||
wraps writing to a GtkHTML stream so that we don't have to write
|
||||
to an intermediate GByteArray.
|
||||
|
||||
* 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!
|
||||
|
||||
2001-10-22 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* mail-mt.c (do_op_status): Don't free `clientid' as it's
|
||||
|
||||
@ -95,6 +95,8 @@ evolution_mail_SOURCES = \
|
||||
mail-send-recv.h \
|
||||
mail-session.c \
|
||||
mail-session.h \
|
||||
mail-stream-gtkhtml.c \
|
||||
mail-stream-gtkhtml.h \
|
||||
mail-tools.c \
|
||||
mail-tools.h \
|
||||
mail-types.h \
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
|
||||
#include "e-searching-tokenizer.h"
|
||||
#include "folder-browser-factory.h"
|
||||
#include "mail-stream-gtkhtml.h"
|
||||
#include "mail-display.h"
|
||||
#include "mail-config.h"
|
||||
#include "mail-ops.h"
|
||||
@ -1043,7 +1044,6 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle,
|
||||
if (medium) {
|
||||
CamelContentType *content_type;
|
||||
CamelDataWrapper *data;
|
||||
CamelStream *stream_mem;
|
||||
|
||||
g_return_if_fail (CAMEL_IS_MEDIUM (medium));
|
||||
|
||||
@ -1055,18 +1055,17 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle,
|
||||
|
||||
if (header_content_type_is (content_type, "text", "*")) {
|
||||
ba = mail_format_get_data_wrapper_text (data, md);
|
||||
if (ba) {
|
||||
gtk_html_write (html, handle, ba->data, ba->len);
|
||||
|
||||
g_byte_array_free (ba, TRUE);
|
||||
}
|
||||
} else {
|
||||
ba = g_byte_array_new ();
|
||||
stream_mem = camel_stream_mem_new ();
|
||||
camel_stream_mem_set_byte_array (CAMEL_STREAM_MEM (stream_mem), ba);
|
||||
camel_data_wrapper_write_to_stream (data, stream_mem);
|
||||
camel_object_unref (CAMEL_OBJECT (stream_mem));
|
||||
}
|
||||
|
||||
if (ba) {
|
||||
gtk_html_write (html, handle, ba->data, ba->len);
|
||||
CamelStream *html_stream;
|
||||
|
||||
g_byte_array_free (ba, TRUE);
|
||||
html_stream = mail_stream_gtkhtml_new (html, handle);
|
||||
camel_data_wrapper_write_to_stream (data, html_stream);
|
||||
camel_object_unref (CAMEL_OBJECT (html_stream));
|
||||
}
|
||||
|
||||
gtk_html_end (html, handle, GTK_HTML_STREAM_OK);
|
||||
@ -1075,7 +1074,7 @@ on_url_requested (GtkHTML *html, const char *url, GtkHTMLStream *handle,
|
||||
|
||||
urls = g_datalist_get_data (md->data, "data_urls");
|
||||
g_return_if_fail (urls != NULL);
|
||||
|
||||
|
||||
/* See if it's some piece of cached data */
|
||||
ba = g_hash_table_lookup (urls, url);
|
||||
if (ba) {
|
||||
|
||||
99
mail/mail-stream-gtkhtml.c
Normal file
99
mail/mail-stream-gtkhtml.c
Normal file
@ -0,0 +1,99 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
/*
|
||||
* Authors: Jeffrey Stedfast <fejj@ximian.com>
|
||||
*
|
||||
* Copyright 2001 Ximain, Inc. (www.ximian.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "mail-stream-gtkhtml.h"
|
||||
|
||||
static CamelStreamClass *parent_class = NULL;
|
||||
|
||||
static ssize_t stream_write (CamelStream *stream, const char *buffer, size_t n);
|
||||
|
||||
static void
|
||||
mail_stream_gtkhtml_class_init (MailStreamGtkHTMLClass *mail_stream_gtkhtml_class)
|
||||
{
|
||||
CamelStreamClass *camel_stream_class =
|
||||
CAMEL_STREAM_CLASS (mail_stream_gtkhtml_class);
|
||||
|
||||
parent_class = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (CAMEL_STREAM_TYPE));
|
||||
|
||||
/* virtual method overload */
|
||||
camel_stream_class->write = stream_write;
|
||||
}
|
||||
|
||||
static void
|
||||
mail_stream_gtkhtml_init (CamelObject *object)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
static void
|
||||
mail_stream_gtkhtml_finalize (CamelObject *object)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
CamelType
|
||||
mail_stream_gtkhtml_get_type (void)
|
||||
{
|
||||
static CamelType type = CAMEL_INVALID_TYPE;
|
||||
|
||||
if (type == CAMEL_INVALID_TYPE) {
|
||||
type = camel_type_register (CAMEL_STREAM_TYPE,
|
||||
"MailStreamGtkHTML",
|
||||
sizeof (MailStreamGtkHTML),
|
||||
sizeof (MailStreamGtkHTMLClass),
|
||||
(CamelObjectClassInitFunc) mail_stream_gtkhtml_class_init,
|
||||
NULL,
|
||||
(CamelObjectInitFunc) mail_stream_gtkhtml_init,
|
||||
(CamelObjectFinalizeFunc) mail_stream_gtkhtml_finalize);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
CamelStream *
|
||||
mail_stream_gtkhtml_new (GtkHTML *html, GtkHTMLStream *html_stream)
|
||||
{
|
||||
MailStreamGtkHTML *stream_gtkhtml;
|
||||
|
||||
stream_gtkhtml = MAIL_STREAM_GTKHTML (camel_object_new (MAIL_STREAM_GTKHTML_TYPE));
|
||||
stream_gtkhtml->html = html;
|
||||
stream_gtkhtml->html_stream = html_stream;
|
||||
|
||||
return CAMEL_STREAM (stream_gtkhtml);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
stream_write (CamelStream *stream, const char *buffer, size_t n)
|
||||
{
|
||||
MailStreamGtkHTML *stream_gtkhtml = MAIL_STREAM_GTKHTML (stream);
|
||||
|
||||
gtk_html_write (stream_gtkhtml->html, stream_gtkhtml->html_stream,
|
||||
buffer, n);
|
||||
|
||||
return n;
|
||||
}
|
||||
62
mail/mail-stream-gtkhtml.h
Normal file
62
mail/mail-stream-gtkhtml.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
/*
|
||||
* Authors: Jeffrey Stedfast <fejj@ximian.com>
|
||||
*
|
||||
* Copyright 2001 Ximain, Inc. (www.ximian.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef MAIL_STREAM_GTKHTML_H
|
||||
#define MAIL_STREAM_GTKHTML_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#pragma }
|
||||
#endif /* __cplusplus } */
|
||||
|
||||
#include <camel/camel-stream.h>
|
||||
#include <gtkhtml/gtkhtml.h>
|
||||
|
||||
#define MAIL_STREAM_GTKHTML_TYPE (mail_stream_gtkhtml_get_type ())
|
||||
#define MAIL_STREAM_GTKHTML(obj) (CAMEL_CHECK_CAST((obj), MAIL_STREAM_GTKHTML_TYPE, MailStreamGtkHTML))
|
||||
#define MAIL_STREAM_GTKHTML_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), MAIL_STREAM_GTKHTML_TYPE, MailStreamGtkhTMLClass))
|
||||
#define MAIL_IS_STREAM_GTKHTML(o) (CAMEL_CHECK_TYPE((o), MAIL_STREAM_GTKHTML_TYPE))
|
||||
|
||||
typedef struct _MailStreamGtkHTML {
|
||||
CamelStream parent_stream;
|
||||
|
||||
GtkHTML *html;
|
||||
GtkHTMLStream *html_stream;
|
||||
} MailStreamGtkHTML;
|
||||
|
||||
typedef struct {
|
||||
CamelStreamClass parent_class;
|
||||
|
||||
} MailStreamGtkHTMLClass;
|
||||
|
||||
|
||||
CamelType mail_stream_gtkhtml_get_type (void);
|
||||
|
||||
/* Note: stream does not ref these objects! */
|
||||
CamelStream *mail_stream_gtkhtml_new (GtkHTML *html, GtkHTMLStream *html_stream);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* MAIL_STREAM_GTKHTML_H */
|
||||
Reference in New Issue
Block a user