[evolution-rss] add parser/formatter modules to handle feed articles



commit 14ea083c2e44de95f9cd044de9b2910bc78ea07b
Author: Lucian Langa <lucilanga gnome org>
Date:   Fri Aug 31 23:06:38 2012 +0200

    add parser/formatter modules to handle feed articles

 configure.ac                         |    3 +
 src/Makefile.am                      |   60 +-
 src/e-mail-formatter-evolution-rss.c |  200 ++++
 src/e-mail-formatter-evolution-rss.h |   32 +
 src/e-mail-parser-evolution-rss.c    |  133 +++
 src/e-mail-parser-evolution-rss.h    |   32 +
 src/evolution-module-rss.c           |   55 ++
 src/parser.c                         |   25 -
 src/rss-formater.c                   |  113 +++
 src/rss-formater.h                   |   28 +
 src/rss-icon-factory.c               |    6 +-
 src/rss-icon-factory.h               |    2 +-
 src/rss-image.c                      |   31 +-
 src/rss-image.h                      |    8 +-
 src/rss.c                            | 1695 +---------------------------------
 src/rss.h                            |    2 +
 16 files changed, 708 insertions(+), 1717 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index cbde76c..77b2839 100644
--- a/configure.ac
+++ b/configure.ac
@@ -380,6 +380,9 @@ AC_SUBST(uidir)
 privlibdir='${libdir}'/evolution/$EVOLUTION_EXEC_VERSION
 AC_SUBST(privlibdir)
 
+moduledir="$privlibdir/modules"
+AC_SUBST(moduledir)
+
 dnl Win32
 AC_MSG_CHECKING([for Win32])
 case "$host" in
diff --git a/src/Makefile.am b/src/Makefile.am
index 88d3a1b..d44592e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -92,17 +92,47 @@ endif
 liborg_gnome_evolution_rss_la_SOURCES = $(SOURCES)
 liborg_gnome_evolution_rss_la_LIBADD = $(WEBKIT_LIBS) $(DATASERVER_LIBS) $(GECKO_LIBS) $(LIBSOUP_LIBS) $(GTKHTML_EDITOR_LIBS) $(DBUS_LIBS) $(NO_UNDEFINED_LIBS)
 liborg_gnome_evolution_rss_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
-#$(GECKO_RPATH)
 
 evolution_import_rss_SOURCES = evolution-import-rss.c
 evolution_import_rss_LDFLAGS = $(EVOLUTION_RSS_EPLUGIN_LIBS)
 
+module_LTLIBRARIES = evolution-module-rss.la
+
+evolution_module_rss_la_SOURCES =		\
+	rss.c					\
+	fetch.c					\
+	file-gio.c				\
+	network-soup.c				\
+	misc.c					\
+	notification.c				\
+	parser.c				\
+	rss-config.c				\
+	rss-config-factory.c			\
+	rss-cache.c				\
+	rss-evo-common.c			\
+	rss-image.c				\
+	rss-formater.c				\
+	rss-status-icon.c			\
+	rss-icon-factory.c			\
+	dbus.c					\
+	e-mail-parser-evolution-rss.c		\
+	e-mail-parser-evolution-rss.h		\
+	e-mail-formatter-evolution-rss.c	\
+	e-mail-formatter-evolution-rss.h	\
+	evolution-module-rss.c
+
+
+
+evolution_module_rss_la_CPPFLAGS =			\
+        $(AM_CPPFLAGS)					\
+        -I$(top_srcdir)					\
+        -DEVOLUTION_PRIVDATADIR=\""$(privdatadir)"\"	\
+        -DG_LOG_DOMAIN=\"evolution-module-rss\"		\
+        $(EVOLUTION_RSS_EPLUGIN_LIBS)
+
+evolution_module_rss_la_LDFLAGS =		\
+        -avoid-version -module $(NO_UNDEFINED)
 
-#schemadir	= $(GCONF_SCHEMA_FILE_DIR)
-#schema_in_files = evolution-rss.schemas.in.in
-#schema_DATA	= $(schema_in_files:.schemas.in.in=.schemas)
-#%.schemas.in: %.schemas.in.in
-#	sed -e "s#\ bindir\@# bindir@#g" $< > $@
 
 @EVO_SERVER_RULE@
 
@@ -119,22 +149,24 @@ convertdir = $(datadir)/GConf/gsettings
 convert_DATA = evolution-rss.convert
 
 
-DISTCLEANFILES = $(schema_DATA)
+DISTCLEANFILES = $(schema_DATA)			\
+	evolution-rss.desktop.in		\
+	$(gsettings_SCHEMAS:.xml=.xml.in)
 
-ui_DATA =                    \
+ui_DATA =			\
 	rss-main.ui		\
 	rss-html-rendering.ui
 
-#BUILT_SOURCES	= $(server_DATA)
 CLEANFILES	= $(BUILT_SOURCES)	\
 	org-gnome-evolution-rss.eplug	\
 	org-gnome-evolution-rss.error   \
-	$(gsettings_SCHEMAS)
+	$(gsettings_SCHEMAS)		\
+	$(gsettings_SCHEMAS:.xml=.xml.in)
 
 EXTRA_DIST =					\
 	$(ui_DATA)				\
 	$(convert_DATA)                         \
-	$(gsettings_SCHEMAS:.xml=.xml.in)    \
+	$(gsettings_SCHEMAS:.xml=.xml.in)	\
 	rss.h network.h				\
 	network-soup.c				\
 	network-soup.h				\
@@ -143,6 +175,10 @@ EXTRA_DIST =					\
 	debug.h					\
 	dbus.c					\
 	dbus.h					\
+	e-mail-formatter-parser-rss.c		\
+	e-mail-formatter-parser-rss.h		\
+	e-mail-formatter-evolution-rss.c	\
+	e-mail-formatter-evolution-rss.h	\
 	fetch.c					\
 	fetch.h					\
 	file-gio.c				\
@@ -159,6 +195,8 @@ EXTRA_DIST =					\
 	rss-config-factory.h			\
 	rss-evo-common.c			\
 	rss-evo-common.h			\
+	rss-formatter.c				\
+	rss-formatter.h				\
 	rss-icon-factory.c			\
 	rss-icon-factory.h			\
 	rss-status-icon.c			\
diff --git a/src/e-mail-formatter-evolution-rss.c b/src/e-mail-formatter-evolution-rss.c
new file mode 100644
index 0000000..b1c886d
--- /dev/null
+++ b/src/e-mail-formatter-evolution-rss.c
@@ -0,0 +1,200 @@
+/*  Evoution RSS Reader Plugin
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301 USA
+ */
+
+#include "e-mail-formatter-evolution-rss.h"
+
+#include <em-format/e-mail-formatter-extension.h>
+#include <em-format/e-mail-formatter.h>
+#include <em-format/e-mail-part-utils.h>
+#include <e-util/e-util.h>
+
+#include <shell/e-shell-settings.h>
+#include <shell/e-shell.h>
+
+#include <libebackend/libebackend.h>
+#include <libedataserver/libedataserver.h>
+
+#include <glib/gi18n-lib.h>
+#include <X11/Xlib.h>
+#include <camel/camel.h>
+
+#include "rss-formater.h"
+
+
+typedef struct _EMailFormatterRSS EMailFormatterRSS;
+typedef struct _EMailFormatterRSSClass EMailFormatterRSSClass;
+
+struct _EMailFormatterRSS {
+	EExtension parent;
+};
+
+struct _EMailFormatterRSSClass {
+	EExtensionClass parent_class;
+};
+
+GType e_mail_formatter_evolution_rss_get_type (void);
+static void e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface);
+static void e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+	EMailFormatterRSS,
+	e_mail_formatter_evolution_rss,
+	E_TYPE_EXTENSION,
+	0,
+	G_IMPLEMENT_INTERFACE_DYNAMIC (
+		E_TYPE_MAIL_EXTENSION,
+		e_mail_formatter_mail_extension_interface_init)
+	G_IMPLEMENT_INTERFACE_DYNAMIC (
+		E_TYPE_MAIL_FORMATTER_EXTENSION,
+		e_mail_formatter_formatter_extension_interface_init));
+
+static const gchar* formatter_mime_types[] = { "application/vnd.evolution.attachment" , NULL };
+
+static gboolean
+emfe_evolution_rss_format (EMailFormatterExtension *extension,
+				EMailFormatter *formatter,
+				EMailFormatterContext *context,
+				EMailPart *part,
+				CamelStream *stream,
+				GCancellable *cancellable)
+{
+	CamelStream *decoded_stream;
+	CamelDataWrapper *dw;
+	gchar *str;
+	GByteArray *ba;
+	gchar *src;
+
+	CamelContentType *ct = camel_mime_part_get_content_type (part->part);
+	if (ct) {
+		if (!camel_content_type_is (ct, "x-evolution", "evolution-rss-feed"))
+			return FALSE;
+	}
+
+	dw = camel_medium_get_content (CAMEL_MEDIUM (part->part));
+	if (!dw) {
+		return FALSE;
+	}
+
+	str = g_strdup_printf (
+		"<div class=\"part-container\" style=\"border-color: #%06x; "
+		"background-color: #%06x; color: #%06x;\">"
+		"<div class=\"part-container-inner-margin\">\n",
+		e_color_to_value ((GdkColor *)
+			e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
+		e_color_to_value ((GdkColor *)
+			e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_CONTENT)),
+		e_color_to_value ((GdkColor *)
+			e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
+
+	camel_stream_write_string (
+		stream, str, cancellable, NULL);
+
+	decoded_stream = camel_stream_mem_new ();
+
+	e_mail_formatter_format_text (
+		formatter, part, decoded_stream, cancellable);
+
+	g_seekable_seek (G_SEEKABLE (decoded_stream), 0, G_SEEK_SET, cancellable, NULL);
+
+	ba = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (decoded_stream));
+	src = rss_process_feed((gchar *)ba->data, ba->len);
+
+	camel_stream_write_string(stream, src, cancellable, NULL);
+	g_free(src);
+	g_object_unref (decoded_stream);
+
+	camel_stream_write_string (
+		stream, "</div></div>", cancellable, NULL);
+
+	return TRUE;
+}
+
+static const gchar *
+emfe_evolution_rss_get_display_name (EMailFormatterExtension *extension)
+{
+	return _("Tet Highlght");
+}
+
+static const gchar *
+emfe_evolution_rss_get_description (EMailFormatterExtension *extension)
+{
+	return _("Syntx hihlighting of mail parts");
+}
+
+static const gchar **
+emfe_evolution_rss_mime_types (EMailExtension *extension)
+{
+	return formatter_mime_types;
+}
+
+static void
+e_mail_formatter_evolution_rss_init (EMailFormatterRSS *object)
+{
+}
+
+static void
+e_mail_formatter_evolution_rss_constructed (GObject *object)
+{
+	EExtensible *extensible;
+	EMailExtensionRegistry *reg;
+
+	extensible = e_extension_get_extensible (E_EXTENSION (object));
+	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
+
+	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+}
+
+static void
+e_mail_formatter_evolution_rss_class_init (EMailFormatterRSSClass *class)
+{
+	GObjectClass *object_class;
+	EExtensionClass *extension_class;
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->constructed = e_mail_formatter_evolution_rss_constructed;
+
+	extension_class = E_EXTENSION_CLASS (class);
+	extension_class->extensible_type = E_TYPE_MAIL_FORMATTER_EXTENSION_REGISTRY;
+}
+
+static void
+e_mail_formatter_evolution_rss_class_finalize (EMailFormatterRSSClass *class)
+{
+}
+
+void
+e_mail_formatter_evolution_rss_type_register (GTypeModule *type_module)
+{
+	e_mail_formatter_evolution_rss_register_type (type_module);
+}
+
+static void
+e_mail_formatter_formatter_extension_interface_init (EMailFormatterExtensionInterface *iface)
+{
+	iface->format = emfe_evolution_rss_format;
+	iface->get_display_name = emfe_evolution_rss_get_display_name;
+	iface->get_description = emfe_evolution_rss_get_description;
+}
+
+static void
+e_mail_formatter_mail_extension_interface_init (EMailExtensionInterface *iface)
+{
+	iface->mime_types = emfe_evolution_rss_mime_types;
+}
+
diff --git a/src/e-mail-formatter-evolution-rss.h b/src/e-mail-formatter-evolution-rss.h
new file mode 100644
index 0000000..639edec
--- /dev/null
+++ b/src/e-mail-formatter-evolution-rss.h
@@ -0,0 +1,32 @@
+/*  Evoution RSS Reader Plugin
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301 USA
+ */
+
+#ifndef EM_FORMATTER_EVOLUTION_RSS_H
+#define EM_FORMATTER_EVOLUTION_RSS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+void    e_mail_formatter_evolution_rss_type_register (GTypeModule *type_module);
+
+G_END_DECLS
+
+#endif /* EM_FORMATTER_EVOLUTION_RSS_H */
+
diff --git a/src/e-mail-parser-evolution-rss.c b/src/e-mail-parser-evolution-rss.c
new file mode 100644
index 0000000..820a077
--- /dev/null
+++ b/src/e-mail-parser-evolution-rss.c
@@ -0,0 +1,133 @@
+/*  Evoution RSS Reader Plugin
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301 USA
+ */
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <camel/camel.h>
+
+#include "e-mail-parser-evolution-rss.h"
+
+#include <em-format/e-mail-extension-registry.h>
+#include <em-format/e-mail-parser-extension.h>
+#include <em-format/e-mail-part.h>
+#include <em-format/e-mail-part-utils.h>
+
+#include <libebackend/libebackend.h>
+
+
+typedef struct _EMailParserRSS {
+	EExtension parent;
+} EMailParserRSS;
+
+typedef struct _EMailParserRSSClass {
+	EExtensionClass parent_class;
+} EMailParserRSSClass;
+
+GType e_mail_parser_evolution_rss_get_type (void);
+static void e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface);
+static void e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (
+	EMailParserRSS,
+	e_mail_parser_evolution_rss,
+	E_TYPE_EXTENSION,
+	0,
+	G_IMPLEMENT_INTERFACE_DYNAMIC (
+		E_TYPE_MAIL_EXTENSION,
+		e_mail_parser_mail_extension_interface_init)
+	G_IMPLEMENT_INTERFACE_DYNAMIC (
+		E_TYPE_MAIL_PARSER_EXTENSION,
+		e_mail_parser_parser_extension_interface_init));
+
+static const gchar* pser_mime_types[] = { "x-evolution/evolution-rss-feed", NULL };
+
+static GSList *
+empe_evolution_rss_parse (EMailParserExtension *extension,
+				EMailParser *parser,
+				CamelMimePart *part,
+				GString *part_id,
+				GCancellable *cancellable)
+{
+	GSList *parts = e_mail_parser_parse_part_as (
+			parser, part, part_id, "application/vnd.evolution.attachment", cancellable);
+
+	return parts;
+}
+
+static const gchar **
+empe_rss_mime_types (EMailExtension *extension)
+{
+	return pser_mime_types;
+}
+
+void
+e_mail_parser_evolution_rss_type_register (GTypeModule *type_module)
+{
+	e_mail_parser_evolution_rss_register_type (type_module);
+}
+
+static void
+e_mail_parser_mail_extension_interface_init (EMailExtensionInterface *iface)
+{
+	iface->mime_types = empe_rss_mime_types;
+}
+
+static void
+e_mail_parser_parser_extension_interface_init (EMailParserExtensionInterface *iface)
+{
+	iface->parse = empe_evolution_rss_parse;
+}
+
+static void
+e_mail_parser_evolution_rss_constructed (GObject *object)
+{
+	EExtensible *extensible;
+	EMailExtensionRegistry *reg;
+
+	extensible = e_extension_get_extensible (E_EXTENSION (object));
+	reg = E_MAIL_EXTENSION_REGISTRY (extensible);
+
+	e_mail_extension_registry_add_extension (reg, E_MAIL_EXTENSION (object));
+}
+
+static void
+e_mail_parser_evolution_rss_class_init (EMailParserRSSClass *class)
+{
+	GObjectClass *object_class;
+	EExtensionClass *extension_class;
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->constructed = e_mail_parser_evolution_rss_constructed;
+
+	extension_class = E_EXTENSION_CLASS (class);
+	extension_class->extensible_type = E_TYPE_MAIL_PARSER_EXTENSION_REGISTRY;
+}
+
+void
+e_mail_parser_evolution_rss_class_finalize (EMailParserRSSClass *class)
+{
+}
+
+static void
+e_mail_parser_evolution_rss_init (EMailParserRSS *parser)
+{
+
+}
+
diff --git a/src/e-mail-parser-evolution-rss.h b/src/e-mail-parser-evolution-rss.h
new file mode 100644
index 0000000..d252471
--- /dev/null
+++ b/src/e-mail-parser-evolution-rss.h
@@ -0,0 +1,32 @@
+/*  Evoution RSS Reader Plugin
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301 USA
+ */
+
+#ifndef E_MAIL_PARSER_EVOLUTION_RSS_H
+#define E_MAIL_PARSER_EVOLUTION_RSS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+void e_mail_parser_evolution_rss_type_register (GTypeModule *type_module);
+
+G_END_DECLS
+
+#endif /* E_MAIL_PARSER_EVOLUTION_RSS_H */
+
diff --git a/src/evolution-module-rss.c b/src/evolution-module-rss.c
new file mode 100644
index 0000000..fb03946
--- /dev/null
+++ b/src/evolution-module-rss.c
@@ -0,0 +1,55 @@
+/*  Evoution RSS Reader Plugin
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301 USA
+ */
+
+
+#include "e-mail-parser-evolution-rss.h"
+#include "e-mail-formatter-evolution-rss.h"
+
+#include <gmodule.h>
+
+void e_module_load (GTypeModule *type_module);
+void e_module_unload (GTypeModule *type_module);
+const gchar * g_module_check_init (GModule *module);
+
+G_MODULE_EXPORT void
+e_module_load (GTypeModule *type_module)
+{
+	/* Register dynamically loaded types. */
+	e_mail_parser_evolution_rss_type_register (type_module);
+	e_mail_formatter_evolution_rss_type_register (type_module);
+}
+
+G_MODULE_EXPORT void
+e_module_unload (GTypeModule *type_module)
+{
+}
+
+G_MODULE_EXPORT const gchar *
+g_module_check_init (GModule *module)
+{
+	/* FIXME Until mail is split into a module library and a
+	 *       reusable shared library, prevent the module from
+	 *       being unloaded.  Unloading the module resets all
+	 *       static variables, which screws up foo_get_type()
+	 *       functions among other things. */
+	g_module_make_resident (module);
+
+	return NULL;
+}
+
diff --git a/src/parser.c b/src/parser.c
index f071f86..e04cf13 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -1258,31 +1258,6 @@ parse_channel_line(xmlNode *top, gchar *feed_name, RDF *r, gchar **article_uid)
 
 }
 
-extern EShellView *rss_shell_view;
-void
-refresh_mail_folder(CamelFolder *mail_folder);
-
-void
-refresh_mail_folder(CamelFolder *mail_folder)
-{
-#if EVOLUTION_VERSION < 30505
-	mail_refresh_folder(mail_folder, NULL, NULL);
-#else
-	EShellContent *shell_content;
-	EMailReader *reader;
-	shell_content = e_shell_view_get_shell_content (rss_shell_view);
-	reader = E_MAIL_READER (shell_content);
-	e_mail_reader_refresh_folder(reader, mail_folder);
-#endif
-#if (DATASERVER_VERSION >= 2033001)
-		camel_folder_synchronize (mail_folder, FALSE, G_PRIORITY_DEFAULT,
-			NULL, NULL, NULL);
-#else
-	camel_folder_sync(mail_folder, FALSE, NULL);
-#endif
-	camel_folder_thaw(mail_folder);
-}
-
 GQueue *
 display_channel_items_sync(AsyncData *asyncr)
 {
diff --git a/src/rss-formater.c b/src/rss-formater.c
new file mode 100644
index 0000000..c6df160
--- /dev/null
+++ b/src/rss-formater.c
@@ -0,0 +1,113 @@
+/*  Evoution RSS Reader Plugin
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301 USA
+ */
+
+#include <glib.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+#include <libxml/HTMLparser.h>
+
+#include <mail/e-mail-reader-utils.h>
+
+#include "rss.h"
+#include "parser.h"
+#include "rss-image.h"
+
+#include "rss-formater.h"
+
+extern int rss_verbose_debug;
+extern EShellView *rss_shell_view;
+
+gchar *
+rss_process_feed(gchar *feed, guint len)
+{
+	xmlChar *buff = NULL;
+	xmlDoc *src;
+	xmlChar *wid;
+	GdkPixbuf *pix;
+	guint width;
+	gchar *wids;
+	int size;
+	gchar *result;
+	EMailReader *reader;
+	EShellContent *shell_content;
+	EMailDisplay *display;
+	GtkAllocation alloc;
+
+	shell_content = e_shell_view_get_shell_content (rss_shell_view);
+	reader = E_MAIL_READER (shell_content);
+	display = e_mail_reader_get_mail_display (reader);
+	gtk_widget_get_allocation((GtkWidget *)display, &alloc);
+	width = alloc.width - 56;
+	wids = g_strdup_printf("%d", width);
+	src = (xmlDoc *)parse_html_sux(feed, len);
+	if (src) {
+		xmlNode *doc = (xmlNode *)src;
+		while ((doc = html_find(doc, (gchar *)"img"))) {
+			int real_width = 0;
+			GSettings *settings;
+			xmlChar *url = xmlGetProp(doc, (xmlChar *)"src");
+			gchar *real_image = verify_image(
+						(gchar *)url,
+						display);
+			if (real_image) {
+				xmlSetProp(
+					doc,
+					(xmlChar *)"src",
+					(xmlChar *)real_image);
+			}
+			settings = g_settings_new(RSS_CONF_SCHEMA);
+			if (g_settings_get_boolean (settings,
+				CONF_IMAGE_RESIZE) && real_image) {
+				pix = gdk_pixbuf_new_from_file(
+					(const char *)real_image+7, //skip scheme part
+					(GError **)NULL);
+				if (pix)
+					real_width = gdk_pixbuf_get_width(pix);
+
+				d("real_image:%s\n", real_image);
+				d("width:%d\n", width);
+				d("real_width:%d\n", real_width);
+
+				wid = xmlGetProp(
+					doc,
+					(xmlChar *)"width");
+				if (wid) {
+					if (atof((const char *)wid) > width)
+						xmlSetProp(doc,
+							(xmlChar *)"width",
+							(xmlChar *)wids);
+					g_free(wid);
+					goto pixdone;
+				} else if (real_width > width) {
+					xmlSetProp(doc,
+						(xmlChar *)"width",
+						(xmlChar *)wids);
+				}
+pixdone:                        g_free(real_image);
+			}
+		}
+		xmlDocDumpMemory(src, &buff, (int*)&size);
+		xmlFree(src);
+	}
+	g_free(wids);
+	result = g_strdup((gchar *)buff);
+	xmlFree(buff);
+	return result;
+}
+
diff --git a/src/rss-formater.h b/src/rss-formater.h
new file mode 100644
index 0000000..78ae6f0
--- /dev/null
+++ b/src/rss-formater.h
@@ -0,0 +1,28 @@
+/*  Evoution RSS Reader Plugin
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301 USA
+ */
+
+#ifndef __RSS_FORMATTER_H_
+#define __RSS_FORMATTER_H_
+
+#include "debug.h"
+
+gchar *rss_process_feed(gchar *feed, guint len);
+
+#endif /*__RSS_FORMATTER_H_*/
+
diff --git a/src/rss-icon-factory.c b/src/rss-icon-factory.c
index b626e87..038a9aa 100644
--- a/src/rss-icon-factory.c
+++ b/src/rss-icon-factory.c
@@ -22,6 +22,8 @@
 
 #include <rss.h>
 
+extern GHashTable *icons;
+
 typedef struct {
 	const char *stock_id;
 	const char *icon;
@@ -90,6 +92,8 @@ rss_build_stock_images(void)
 }
 
 void
-init_rss_builtin_images(void)
+rss_append_folder_icons(gchar *key)
 {
+	g_hash_table_insert(icons,
+		key, GINT_TO_POINTER(1));
 }
diff --git a/src/rss-icon-factory.h b/src/rss-icon-factory.h
index 21cc841..8ceb28c 100644
--- a/src/rss-icon-factory.h
+++ b/src/rss-icon-factory.h
@@ -31,5 +31,5 @@
 GdkPixbuf *rss_build_icon(const gchar *icon_name,
 			GtkIconSize icon_size);
 void rss_build_stock_images(void);
-void init_rss_builtin_images(void);
+void rss_append_folder_icons(gchar *key);
 
diff --git a/src/rss-image.c b/src/rss-image.c
index 71c69b1..f2854cc 100644
--- a/src/rss-image.c
+++ b/src/rss-image.c
@@ -55,12 +55,10 @@ extern rssfeed *rf;
 gchar *pixfile;
 char *pixfilebuf;
 gsize pixfilelen;
-extern GHashTable *icons;
 GHashTable *missing;
 
 #if (EVOLUTION_VERSION >= 30400)
 #include <mail/e-mail-reader.h>
-extern EShellView *rss_shell_view;
 #endif
 
 void
@@ -306,6 +304,7 @@ finish_image_feedback (SoupSession *soup_sess, SoupMessage *msg, FEED_IMAGE *use
 {
 	CamelStream *stream = NULL;
 	gchar *mime_type;
+	d("finish_image_feedback()");
 	stream = rss_cache_add(user_data->url);
 	finish_image(soup_sess, msg, stream);
 	if (!missing)
@@ -330,27 +329,7 @@ finish_image_feedback (SoupSession *soup_sess, SoupMessage *msg, FEED_IMAGE *use
 				GINT_TO_POINTER(1));
 		}
 	g_free(mime_type);
-
-	if (user_data->data == current_pobject) {
-		EShellContent *shell_content;
-		EMailReader *reader;
-		EMailDisplay *display;
-
-		g_print("rEdraw\n");
-		g_print("p:%p\n", rss_shell_view);
-		shell_content = e_shell_view_get_shell_content (rss_shell_view);
-		reader = E_MAIL_READER (shell_content);
-		display = e_mail_reader_get_mail_display (reader);
-		//e_mail_display_reload (display);
-		e_mail_display_load_images(display);
-//		em_format_redraw(display);
-//		e_web_view_reload (E_WEB_VIEW(display));
-	}
-#if EVOLUTION_VERSION >= 23190
-		//em_format_queue_redraw((EMFormat *)user_data->data);
-#else
-		//em_format_redraw((EMFormat *)user_data->data);
-#endif
+	e_mail_display_load_images(user_data->data);
 	g_free(user_data->url);
 	g_free(user_data);
 }
@@ -504,8 +483,7 @@ display_folder_icon(GtkTreeStore *tree_store, gchar *key)
 		}
 		icon = rss_build_icon (img_file, GTK_ICON_SIZE_MENU);
 		d("icon:%p\n", icon);
-		g_hash_table_insert(icons,
-			g_strdup(key), GINT_TO_POINTER(1));
+		rss_append_folder_icons(g_strdup(key));
 		sizes = gtk_icon_theme_get_icon_sizes(
 				gtk_icon_theme_get_default(),
 				"mail-read"); //will mail-read always be there?
@@ -606,8 +584,7 @@ file_is_image(gchar *image, gboolean cleanup)
  * because we could end up with wrong file as image
  */
 gchar *
-//verify_image(gchar *uri, EMFormatHTML *format)
-verify_image(gchar *uri, EMailFormatter *format)
+verify_image(gchar *uri, EMailDisplay *format)
 {
 	gchar *nurl, *turl;
 	gchar *feed_dir, *name;
diff --git a/src/rss-image.h b/src/rss-image.h
index e418d79..739c413 100644
--- a/src/rss-image.h
+++ b/src/rss-image.h
@@ -1,5 +1,5 @@
 /*  Evoution RSS Reader Plugin
- *  Copyright (C) 2007-2010 Lucian Langa <cooly gnome eu org>
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -17,6 +17,9 @@
  * 02110-1301 USA
  */
 
+
+#include <mail/e-mail-reader.h>
+
 typedef struct _FEED_IMAGE {
 	gchar *img_file;
 	CamelStream *feed_fs;
@@ -44,8 +47,7 @@ finish_create_icon_stream (SoupSession *soup_sess,
 	SoupMessage *msg, FEED_IMAGE *user_data);
 #endif
 
-//gchar *verify_image(gchar *uri, EMFormatHTML *format);
-gchar *verify_image(gchar *uri, EMailFormatter *format);
+gchar *verify_image(gchar *uri, EMailDisplay *format);
 
 void
 #if LIBSOUP_VERSION < 2003000
diff --git a/src/rss.c b/src/rss.c
index 3761df8..069d915 100644
--- a/src/rss.c
+++ b/src/rss.c
@@ -1,5 +1,5 @@
 /*  Evoution RSS Reader Plugin
- *  Copyright (C) 2007-2010 Lucian Langa <cooly gnome eu org>
+ *  Copyright (C) 2007-2012 Lucian Langa <cooly gnome eu org>
  *
  *  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
@@ -331,10 +331,6 @@ gchar *print_comments(gchar *url, gchar *stream, EMailFormatter *format);
 
 //static void refresh_cb (GtkWidget *button, EMFormatHTMLPObject *pobject);
 
-#ifdef HAVE_WEBKIT
-void webkit_set_history(gchar *base);
-void rss_webkit_load_string(gchar *str, gchar *base, gchar *encoding);
-#endif
 gboolean show_webkit(GtkWidget *webkit);
 void sync_folders(void);
 
@@ -478,21 +474,6 @@ update_progress_text(gchar *title)
 	}
 }
 
-#ifdef HAVE_WEBKIT
-void
-rss_webkit_load_string(gchar *str, gchar *base, gchar *encoding)
-{
-	webkit_web_view_load_string(
-		WEBKIT_WEB_VIEW(rf->mozembed),
-		str,
-		"text/html",
-		encoding,
-		base);
-	if (strncmp(base, "file:///fake", 12))
-		webkit_set_history(base);
-}
-#endif
-
 void
 update_progress_bar(guint current);
 
@@ -523,126 +504,6 @@ update_progress_bar(guint current)
 
 
 void
-browser_write(gchar *string, gint length, gchar *base)
-{
-	guint engine = fallback_engine();
-#if defined(HAVE_GECKO) || defined (HAVE_WEBKIT)
-	xmlDoc *src = (xmlDoc *)parse_html(base, string, length);
-	gchar *encoding =  (gchar *)htmlGetMetaEncoding(src);
-	gchar *str = string;
-#endif
-#ifdef HAVE_WEBKIT
-	WEBKITNET *wknet;
-#endif
-	switch (engine) {
-	case 2:
-#ifdef HAVE_GECKO
-	gtk_moz_embed_open_stream((GtkMozEmbed *)rf->mozembed,
-			base, "text/html");
-	while (length > 0) {
-		if (length > 4096) {
-			gtk_moz_embed_append_data(
-				(GtkMozEmbed *)rf->mozembed,
-				str, 4096);
-			str+=4096;
-		} else
-			gtk_moz_embed_append_data(
-				(GtkMozEmbed *)rf->mozembed,
-				str, length);
-	length-=4096;
-	}
-	gtk_moz_embed_close_stream((GtkMozEmbed *)rf->mozembed);
-#endif
-	break;
-	case 1:
-#ifdef HAVE_WEBKIT
-#if (DATASERVER_VERSION >= 2023001)
-
-		wknet = g_new0(WEBKITNET, 1);
-		wknet->base = base;
-		wknet->encoding = encoding;
-		wknet->str = str;
-		wknet->cb = rss_webkit_load_string;
-		proxify_webkit_session_async(proxy, wknet);
-#endif
-#endif
-		break;
-	}
-}
-
-void
-browser_stream_write(CamelStream *stream, gchar *base);
-
-void
-browser_stream_write(CamelStream *stream, gchar *base)
-{
-	GString *str = g_string_new(NULL);
-	gchar *line;
-#ifdef HAVE_WEBKIT
-	gchar *encoding;
-	xmlDoc *src;
-#endif
-
-	CamelStream *in = camel_stream_buffer_new(stream, CAMEL_STREAM_BUFFER_READ);
-#if (DATASERVER_VERSION >= 2033001)
-	while ((line = camel_stream_buffer_read_line((CamelStreamBuffer *)in, NULL,  NULL))) {
-#else
-	while ((line = camel_stream_buffer_read_line((CamelStreamBuffer *)in, NULL))) {
-#endif
-		gchar *tmp = line;
-		g_string_append(str, line);
-		g_free(tmp);
-		line = NULL;
-	}
-#ifdef HAVE_WEBKIT
-#if (WEBKIT_VERSION >= 1001001)
-	src = (xmlDoc *)parse_html(base, str->str, str->len);
-	encoding =  (gchar *)htmlGetMetaEncoding(src);
-	webkit_web_view_load_string(
-		WEBKIT_WEB_VIEW(rf->mozembed),
-		str->str,
-		"text/html",
-		encoding,
-		base);
-#else
-	webkit_web_view_load_html_string(
-		WEBKIT_WEB_VIEW(rf->mozembed),
-		str->str,
-		base);
-#endif
-#endif
-	g_string_free(str, 1);
-#if (DATASERVER_VERSION >= 2031001)
-	g_object_unref(in);
-#else
-	camel_object_unref(in);
-#endif
-#ifdef HAVE_WEBKIT
-	webkit_set_history(base);
-#endif
-}
-
-static void
-browsercb(NetStatusType status, gpointer statusdata, gpointer data)
-{
-	//NetStatusProgress *progress = (NetStatusProgress*)statusdata;
-	switch (status) {
-	case NET_STATUS_PROGRESS:
-#if 0
-//		g_print("chunk:%s\n", progress->chunk);
-		g_print("total:%d\n", progress->total);
-		g_print("curent:%d\n", progress->current);
-		g_print("-------------- chunk: %d =============\n", GPOINTER_TO_INT(progress->chunksize));
-		//browser_write(progress->chunk, progress->chunksize, data);
-//		browser_fill+=progress->chunksize;
-#endif
-	break;
-	default:
-		g_warning("unhandled network status %d\n", status);
-	}
-}
-
-void
 textcb(NetStatusType status, gpointer statusdata, gpointer data)
 {
 	NetStatusProgress *progress;
@@ -1018,7 +879,7 @@ receive_cancel(GtkButton *button, struct _send_info *info)
 				_("Cancelling..."));
 #else
 		if (info->progress_bar)
-			gtk_progress_bar_set_text (info->progress_bar,
+			gtk_progress_bar_set_text ((GtkProgressBar *)info->progress_bar,
 				_("Cancelling..."));
 #endif
 		info->state = SEND_CANCELLED;
@@ -1069,95 +930,6 @@ summary_cb (GtkWidget *button, EMFormatHTMLPObject *pobject)
 #endif
 }*/
 
-static void
-//summary_cb (GtkWidget *button, EMFormatPURI *puri)
-summary_cb (GtkWidget *button, EMailPart *puri)
-{
-	rf->cur_format = rf->cur_format^1;
-	rf->chg_format = 1;
-//#if EVOLUTION_VERSION >= 23190
-//	em_format_queue_redraw((EMFormat *)puri);
-//#else
-	//em_format_redraw((EMFormat *)puri);
-//#endif
-}
-
-
-#if 0
-static void
-back_cb (GtkWidget *button, EMFormatHTMLPObject *pobject)
-{
-#if defined(HAVE_GECKO) || defined(HAVE_WEBKIT)
-	guint engine = fallback_engine();
-#endif
-#ifdef	HAVE_GECKO
-	if (engine == 2)
-		gtk_moz_embed_go_back((GtkMozEmbed *)rf->mozembed);
-#endif
-#ifdef HAVE_WEBKIT
-	if (engine == 1) {
-		webkit_web_view_go_back (WEBKIT_WEB_VIEW(rf->mozembed));
-	}
-#endif
-}
-
-static void
-forward_cb (GtkWidget *button, EMFormatHTMLPObject *pobject)
-{
-#if defined(HAVE_GECKO) || defined(HAVE_WEBKIT)
-	guint engine = fallback_engine();
-#endif
-#ifdef	HAVE_GECKO
-	if (engine == 2)
-		gtk_moz_embed_go_forward((GtkMozEmbed *)rf->mozembed);
-#endif
-#ifdef HAVE_WEBKIT
-	if (engine == 1)
-		webkit_web_view_go_forward(WEBKIT_WEB_VIEW(rf->mozembed));
-#endif
-}
-
-void stop_cb (GtkWidget *button, EMFormatHTMLPObject *pobject);
-
-void
-stop_cb (GtkWidget *button, EMFormatHTMLPObject *pobject)
-{
-#if defined(HAVE_GECKO) || defined(HAVE_WEBKIT)
-	guint engine = fallback_engine();
-#endif
-#ifdef	HAVE_GECKO
-	if (engine == 2)
-		gtk_moz_embed_stop_load((GtkMozEmbed *)rf->mozembed);
-#endif
-#ifdef HAVE_WEBKIT
-	if (engine == 1)
-		webkit_web_view_stop_loading(WEBKIT_WEB_VIEW(rf->mozembed));
-#endif
-}
-#endif
-
-void
-reload_cb (GtkWidget *button, gpointer data)
-{
-	guint engine = fallback_engine();
-	switch (engine) {
-		case 2:
-#ifdef	HAVE_GECKO
-	gtk_moz_embed_stop_load((GtkMozEmbed *)rf->mozembed);
-	gtk_moz_embed_load_url ((GtkMozEmbed *)rf->mozembed, data);
-#endif
-		break;
-		case 1:
-#ifdef	HAVE_WEBKIT
-#if (WEBKIT_VERSION >= 1000003)
-	webkit_web_view_reload_bypass_cache(WEBKIT_WEB_VIEW(rf->mozembed));
-#else
-	webkit_web_view_reload(WEBKIT_WEB_VIEW(rf->mozembed));
-#endif
-#endif
-		break;
-	}
-}
 
 typedef struct _UB {
 	CamelStream *stream;
@@ -1178,74 +950,6 @@ rss_browser_set_hsize (GtkAdjustment *adj, gpointer data)
 #endif
 }
 
-void rss_browser_update_content (
-	GtkWidget *widget, GtkAllocation *event, gpointer data);
-
-void
-rss_browser_update_content (
-	GtkWidget *widget, GtkAllocation *event, gpointer data)
-{
-#if 0
-	struct _org_gnome_rss_controls_pobject *po = data;
-	CamelStream *stream = NULL;
-	UB *fi;
-
-	if (GTK_IS_WIDGET(widget)) {
-		if (rf->mozembed)
-			if (
-#if GTK_CHECK_VERSION (2,19,7)
-			gtk_widget_get_realized(rf->mozembed)
-#else
-			GTK_WIDGET_REALIZED(rf->mozembed)
-#endif
-			) {
-				if (!browser_fetching) {
-					gchar *msg = g_strdup_printf(
-							"<h5>%s</h5>",
-							_("Formatting Message..."));
-//					browser_write(
-//						msg, strlen(msg),
-//						(gchar *)"file:///fakefile#index");
-					g_free(msg);
-					browser_fetching=1;
-					fi = g_new0(UB, 1);
-					stream = rss_cache_get(po->website);
-					if (!stream) {
-						d("HTTP cache miss\n");
-						stream = rss_cache_add(po->website);
-						fi->create = 1;
-					fi->stream = stream;
-					fi->url = g_strdup(po->website);
-					fetch_unblocking(
-						po->website,
-						browsercb,
-						po->website,
-						(gpointer)finish_website,
-						fi,
-						1,
-						NULL);
-					/*FIXME free fi*/
-					} else {
-						d("cache read\n");
-						fi->create = 0;
-						browser_stream_write(stream, po->website);
-#if (DATASERVER_VERSION >= 2033001)
-						camel_stream_close (stream, NULL, NULL);
-#else
-						camel_stream_close (stream, NULL);
-#endif
-#if (DATASERVER_VERSION >= 2031001)
-						g_object_unref(stream);
-#else
-						camel_object_unref(stream);
-#endif
-					}
-				}
-			}
-	}
-#endif
-}
-
 #ifdef HAVE_GECKO
 void
 rss_mozilla_init(void)
@@ -1258,6 +962,7 @@ rss_mozilla_init(void)
 }
 #endif
 
+#if 0
 void
 webkit_set_preferences(void)
 {
@@ -1340,6 +1045,7 @@ webkit_set_preferences(void)
 #endif
 #endif
 }
+#endif
 
 void
 gecko_set_preferences(void)
@@ -1393,889 +1099,122 @@ rss_popup_zoom_in(GtkWidget *widget, gpointer data)
 	gfloat zoom = gecko_get_zoom(rf->mozembed);
 	zoom*=1.2;
 	gecko_set_zoom(rf->mozembed, zoom);
-}
-
-static void
-#if EVOLUTION_VERSION < 22900
-rss_popup_zoom_out(EPopup *ep, EPopupItem *pitem, void *data)
-#else
-rss_popup_zoom_out(GtkWidget *widget, gpointer data)
-#endif
-{
-	gfloat zoom = gecko_get_zoom(rf->mozembed);
-	zoom/=1.2;
-	gecko_set_zoom(rf->mozembed, zoom);
-}
-
-static void
-#if EVOLUTION_VERSION < 22900
-rss_popup_zoom_orig(EPopup *ep, EPopupItem *pitem, void *data)
-#else
-rss_popup_zoom_orig(GtkWidget *widget, gpointer data)
-#endif
-{
-	gecko_set_zoom(rf->mozembed, 1);
-}
-
-static void
-#if EVOLUTION_VERSION < 22900
-rss_popup_link_copy(EPopup *ep, EPopupItem *pitem, void *data)
-#else
-rss_popup_link_copy(GtkWidget *widget, gpointer data)
-#endif
-{
-	gtk_clipboard_set_text (
-		gtk_clipboard_get (GDK_SELECTION_PRIMARY),
-		data, -1);
-	gtk_clipboard_set_text (
-		gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
-		data, -1);
-}
-
-static void
-#if EVOLUTION_VERSION < 22900
-rss_popup_link_open(EPopup *ep, EPopupItem *pitem, void *data)
-#else
-rss_popup_link_open(GtkWidget *widget, gpointer data)
-#endif
-{
-	e_show_uri (NULL, data);
-}
-
-void
-browser_copy_selection(GtkWidget *widget, gpointer data)
-{
-	gecko_copy_selection((GtkMozEmbed *)rf->mozembed);
-}
-
-void
-browser_select_all(GtkWidget *widget, gpointer data)
-{
-	gecko_select_all((GtkMozEmbed *)rf->mozembed);
-}
-
-#if EVOLUTION_VERSION >= 22900
-EPopupMenu rss_menu_items[] = {
-	E_POPUP_ITEM (N_("_Copy"),		G_CALLBACK(browser_copy_selection), 1),
-	E_POPUP_ITEM (N_("Select _All"),	G_CALLBACK(browser_select_all), 1),
-	E_POPUP_SEPARATOR,
-	E_POPUP_ITEM (N_("Zoom _In"),		G_CALLBACK(rss_popup_zoom_in), 2),
-	E_POPUP_ITEM (N_("Zoom _Out"),		G_CALLBACK(rss_popup_zoom_out), 2),
-	E_POPUP_ITEM (N_("_Normal Size"),	G_CALLBACK(rss_popup_zoom_orig), 2),
-	E_POPUP_SEPARATOR,
-	E_POPUP_ITEM (N_("_Open Link"),		G_CALLBACK(rss_popup_link_open), 4),
-	E_POPUP_ITEM (N_("_Copy Link Location"),G_CALLBACK(rss_popup_link_copy), 4),
-	E_POPUP_TERMINATOR
-};
-#else
-EPopupItem rss_menu_items[] = {
-	{ E_POPUP_BAR, "05.rss-browser.01", NULL, NULL, NULL, NULL },
-	{ E_POPUP_ITEM, "05.rss-browser.02", N_("Zoom _In"), rss_popup_zoom_in, NULL, "zoom-in", EM_POPUP_URI_HTTP },
-	{ E_POPUP_ITEM, "05.rss-browser.03", N_("Zoom _Out"), rss_popup_zoom_out, NULL, "zoom-out", EM_POPUP_URI_HTTP },
-	{ E_POPUP_ITEM, "05.rss-browser.04", N_("_Normal Size"), rss_popup_zoom_orig, NULL, "zoom-original", EM_POPUP_URI_HTTP },
-	{ E_POPUP_BAR, "05.rss-browser.05", NULL, NULL, NULL, NULL },
-	{ E_POPUP_ITEM, "05.rss-browser.06", N_("_Print..."), NULL, NULL, "document-print", EM_POPUP_SELECT_ONE },
-	{ E_POPUP_ITEM, "05.rss-browser.07", N_("Save _As"), NULL, NULL, "document-save-as", 0},
-	{ E_POPUP_BAR, "05.rss-browser.08", NULL, NULL, NULL, NULL },
-	{ E_POPUP_ITEM, "05.rss-browser.09", N_("_Open Link in Browser"), rss_popup_link_open, NULL, NULL, EM_POPUP_URI_HTTP },
-	{ E_POPUP_ITEM, "05.rss-browser.10", N_("_Copy Link Location"), rss_popup_link_copy, NULL, "edit-copy" },
-};
-
-void
-rss_menu_items_free(EPopup *ep, GSList *items, void *data);
-
-void
-rss_menu_items_free(EPopup *ep, GSList *items, void *data)
-{
-	g_slist_free(items);
-}
-#endif
-#endif
-
-#ifdef HAVE_WEBKIT
-#if (WEBKIT_VERSION >= 1001007)
-static void
-webkit_net_status (WebKitWebView *view,
-		GParamSpec *spec,
-		GtkWidget *data)
-{
-	GtkAllocation alloc;
-	GtkRequisition req;
-	gint width, w;
-	WebKitLoadStatus status = webkit_web_view_get_load_status (view);
-	switch (status) {
-		case WEBKIT_LOAD_FINISHED:
-			gtk_widget_set_sensitive(data, FALSE);
-			if (rf->mozembed) {
-				gtk_widget_get_allocation(rf->mozembed, &alloc);
-				width = alloc.width;
-				if (resize_pane_hsize+14 > width && width != 1) {
-					gtk_widget_set_size_request(rf->mozembed,
-						-1, -1);
-#if GTK_MAJOR_VERSION < 3
-					gtk_widget_size_request(rf->mozembed, &req);
-#else
-					gtk_widget_get_preferred_size(rf->mozembed, &req, NULL);
-#endif
-
-					if (req.width < resize_pane_hsize+14)
-						w = resize_pane_hsize-14;
-					else
-						w = req.width;
-
-					gtk_widget_set_size_request(rf->mozembed,
-						w, req.height);
-				}
-			}
-		break;
-		default:
-			gtk_widget_set_sensitive(data, TRUE);
-		break;
-	}
-}
-
-#endif
-
-
-void
-webkit_set_history(gchar *base)
-{
-	WebKitWebBackForwardList *back_forward_list =
-		webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW(rf->mozembed));
-	WebKitWebHistoryItem *item =
-		webkit_web_history_item_new_with_data(base, "Untitled");
-#if (WEBKIT_VERSION >= 1001001)
-	webkit_web_back_forward_list_add_item(back_forward_list, item);
-#endif
-}
-
-#if (WEBKIT_VERSION >= 1001007)
-static void
-webkit_history_status (WebKitWebView *view,
-		GParamSpec *spec,
-		GtkWidget *data)
-{
-#if 0
-	struct _org_gnome_rss_controls_pobject *po =
-			(struct _org_gnome_rss_controls_pobject *) data;
-	WebKitLoadStatus status = webkit_web_view_get_load_status (view);
-	switch (status) {
-		case WEBKIT_LOAD_COMMITTED:
-		default:
-			if (!webkit_web_view_can_go_forward(view))
-				gtk_widget_set_sensitive(po->forwbut, FALSE);
-			else
-				gtk_widget_set_sensitive(po->forwbut, TRUE);
-			if (!webkit_web_view_can_go_back(view))
-				gtk_widget_set_sensitive(po->backbut, FALSE);
-			else
-				gtk_widget_set_sensitive(po->backbut, TRUE);
-		break;
-	}
-#endif
-}
-#endif
-
-gboolean
-webkit_over_link(WebKitWebView *web_view,
-		gchar         *title,
-		gchar         *uri,
-		gpointer       user_data)
-{
-	if (uri) {
-		gchar *msg = g_strdup_printf("%s %s", _("Click to open"), uri);
-		taskbar_push_message(msg);
-		g_free(msg);
-	} else
-		taskbar_pop_message();
-	return TRUE;
-}
-
-static void
-embed_zoom_in_cb (GtkWidget *w,
-			gpointer *data)
-{
-	webkit_web_view_zoom_in((WebKitWebView*)rf->mozembed);
-}
-
-static void
-embed_zoom_out_cb (GtkWidget *w,
-			gpointer *data)
-{
-	webkit_web_view_zoom_out((WebKitWebView *)rf->mozembed);
-}
-
-static void
-embed_zoom_100_cb (GtkWidget *w,
-			gpointer *data)
-{
-	webkit_web_view_set_zoom_level((WebKitWebView *)rf->mozembed, 1);
-}
-
-gboolean
-webkit_click (GtkEntry *entry,
-		GtkMenu *menu,
-		gpointer user_data)
-{
-	GtkWidget *separator, *menuitem;
-	separator = gtk_separator_menu_item_new ();
-	gtk_widget_show (separator);
-	gtk_menu_shell_insert (GTK_MENU_SHELL (menu), separator, 2);
-	menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_IN, NULL);
-	g_signal_connect(menuitem, "activate",
-		(GCallback)embed_zoom_in_cb, NULL);
-	gtk_widget_set_sensitive (menuitem, TRUE);
-	gtk_widget_show (menuitem);
-	gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 3);
-	menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_OUT, NULL);
-	g_signal_connect(menuitem, "activate",
-		(GCallback)embed_zoom_out_cb, NULL);
-	gtk_widget_set_sensitive (menuitem, TRUE);
-	gtk_widget_show (menuitem);
-	gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 4);
-	menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_ZOOM_100, NULL);
-	g_signal_connect(menuitem, "activate",
-		(GCallback)embed_zoom_100_cb, NULL);
-	gtk_widget_set_sensitive (menuitem, TRUE);
-	gtk_widget_show (menuitem);
-	gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 5);
-	separator = gtk_separator_menu_item_new ();
-	gtk_widget_show (separator);
-	gtk_menu_shell_insert (GTK_MENU_SHELL (menu), separator, 6);
-	return TRUE;
-}
-
-#ifdef HAVE_WEBKIT
-void webkit_hook_actions(void);
-
-void
-webkit_hook_actions(void)
-{
-#if EVOLUTION_VERSION >= 22900
-	EShellWindow *shell_window;
-	GtkAction *action;
-	const char *action_name;
-
-	shell_window = e_shell_view_get_shell_window (rss_shell_view);
-
-	action_name = "mail-zoom-in";
-	action = e_shell_window_get_action (shell_window, action_name);
-	g_signal_connect (
-		action, "activate",
-		G_CALLBACK (embed_zoom_in_cb), NULL);
-	action_name = "mail-zoom-out";
-	action = e_shell_window_get_action (shell_window, action_name);
-	g_signal_connect (
-		action, "activate",
-		G_CALLBACK (embed_zoom_out_cb), NULL);
-	action_name = "mail-zoom-100";
-	action = e_shell_window_get_action (shell_window, action_name);
-	g_signal_connect (
-		action, "activate",
-		G_CALLBACK (embed_zoom_100_cb), NULL);
-#endif
-}
-#endif
-
-#if 0
-#if EVOLUTION_VERSION >= 22900
-#include <shell/e-shell-view.h>
-#include <shell/e-shell-searchbar.h>
-
-static void
-action_search_cb (EShellView *shell,
-			GtkWidget *sb)
-{
-//	g_signal_connect_swapped (
-//		search_bar, "changed",
-//		G_CALLBACK (em_format_redraw), priv->html_display);
-		g_print("my search\n");
-//	g_print("search:%s\n", e_shell_searchbar_get_search_text(sb));
-}
-
-void
-rss_search_bar_hook(void)
-{
-	EShellContent *shell_content;
-	EMailReader *reader;
-	GtkAction *action;
-	EShellSearchbar *search_bar;
-	gchar *action_name;
-	EShellView *shell_view;
-	EShellWindow *shell_window;
-
-	CamelFolder *folder;
-	EMFolderTree *folder_tree;
-	EShellSidebar *shell_sidebar = e_shell_view_get_shell_sidebar(
-					rss_shell_view);
-
-
-	shell_content = e_shell_view_get_shell_content (rss_shell_view);
-	reader = E_MAIL_READER (shell_content);
-
-//	action_name = "mail-find";
-//	action = e_mail_reader_get_action (reader, action_name);
-//	g_signal_connect_swapped (
-//		action, "activate",
-//		G_CALLBACK (action_search_cb), reader);
-	search_bar = e_shell_view_get_searchbar(rss_shell_view);
-	//search_bar = e_shell_content_get_searchbar(shell_content);
-	shell_view = e_shell_searchbar_get_shell_view (search_bar);
-//	g_signal_connect_after (
-//		"execute-search", "activate",
-//		G_CALLBACK (action_search_cb), search_bar);
-	shell_window = e_shell_view_get_shell_window (rss_shell_view);
-	g_signal_connect_after (
-			search_bar,
-			"expose-event",
-		G_CALLBACK (action_search_cb),
-		rss_shell_view);
-	e_shell_view_clear_search(shell_view);
-
-//	g_signal_connect (
-//		search_bar, "execute-search",
-//		G_CALLBACK (action_search_cb), search_bar);
-
-}
-#endif
-#endif
-
-#endif
-
-#ifdef HAVE_GECKO
-void gecko_net_start(GtkMozEmbed *mozembed, GtkWidget *data);
-
-void
-gecko_net_start(GtkMozEmbed *mozembed, GtkWidget *data)
-{
-	gtk_widget_set_sensitive(data, TRUE);
-}
-
-void gecko_net_stop(GtkMozEmbed *mozembed, GtkWidget *data);
-
-void
-gecko_net_stop(GtkMozEmbed *mozembed, GtkWidget *data)
-{
-	gtk_widget_set_sensitive(data, FALSE);
-}
-
-gboolean gecko_over_link(GtkMozEmbed *mozembed);
-
-gboolean
-gecko_over_link(GtkMozEmbed *mozembed)
-{
-	gchar *link = gtk_moz_embed_get_link_message(mozembed);
-	if (link && strlen(link)) {
-		gchar *msg = g_strdup_printf("%s %s", _("Click to open"), link);
-		g_free(link);
-		taskbar_push_message(msg);
-		g_free(msg);
-	} else
-		taskbar_pop_message();
-	return FALSE;
-}
-
-gboolean gecko_click(GtkMozEmbed *mozembed, gpointer dom_event, gpointer user_data);
-
-gboolean
-gecko_click(GtkMozEmbed *mozembed, gpointer dom_event, gpointer user_data)
-{
-	gint button;
-	GtkMenu *menu;
-	gchar *link = NULL;
-#if EVOLUTION_VERSION < 22900
-	EMPopup *emp = NULL;
-	GSList *menus = NULL;
-	gint i=0, menu_size;
-#endif
-
-	if (-1 == (button = gecko_get_mouse_event_button (dom_event))) {
-		g_warning ("Cannot determine mouse button!\n");
-		return FALSE;
-	}
-
-	link = gtk_moz_embed_get_link_message((GtkMozEmbed *)rf->mozembed);
-
-#if EVOLUTION_VERSION >= 22900
-	menu = e_popup_menu_create_with_domain (
-			rss_menu_items,
-			0,
-			(guint32)(strlen(link) ? 3:4),
-			link,
-			GETTEXT_PACKAGE);
-	if (button == 2)
-		gtk_menu_popup (
-			GTK_MENU (menu),
-			NULL, NULL,
-			gtk_status_icon_position_menu, user_data,
-			0, GDK_CURRENT_TIME);
-#else
-	emp = em_popup_new("org.gnome.evolution.mail.formathtmldisplay.popup");
-	menu_size=sizeof(rss_menu_items)/sizeof(rss_menu_items[0]);
-	if (strlen(link))
-		i+=9;
-	else
-		menu_size-=2;
-
-	for (; i<menu_size; i++)
-		menus = g_slist_prepend(menus, &rss_menu_items[i]);
-
-	e_popup_add_items((EPopup *)emp, menus, NULL, rss_menu_items_free, link);
-	menu = e_popup_create_menu_once((EPopup *)emp, NULL, 0);
-
-	if (button == 2)
-		gtk_menu_popup (
-			GTK_MENU (menu),
-			NULL, NULL,
-			gtk_status_icon_position_menu, user_data,
-			button,
-			gtk_get_current_event_time());
-#endif
-
-	/*normal click let event pass normally*/
-	if (button == 0)
-		gtk_moz_embed_load_url((GtkMozEmbed *)rf->mozembed, link);
-	return FALSE;
-}
-#endif
-
-gboolean
-show_webkit(GtkWidget *webkit)
-{
-	gtk_widget_show_all(webkit);
-	return FALSE;
-}
-
-#if EVOLUTION_VERSION >= 29101
-EMailSession*
-rss_get_mail_session(void);
-
-EMailSession*
-rss_get_mail_session(void)
-{
-	EMailBackend *backend;
-	EMailReader *reader;
-	EShellContent *shell_content;
-	shell_content = e_shell_view_get_shell_content (rss_shell_view);
-	reader = E_MAIL_READER (shell_content);
-	backend = e_mail_reader_get_backend (reader);
-	return e_mail_backend_get_session (backend);
-}
-#endif
-
-#if 0
-static GtkWidget *
-org_gnome_rss_browser (EMFormat *emf,
-					//EMFormatPURI *puri,
-					EMailPart *puri,
-					GCancellable *cancellable)
-{
-        GtkWidget *box;
-        EMFormatRSSControlsPURI *po = (EMFormatRSSControlsPURI *) puri;
-
-	GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1);
-	GtkWidget *hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-
-	GtkWidget *label3 = gtk_label_new ("");
-	GtkWidget *button, *button2, *button3, *button4, *button5;
-	gchar *mem = g_strdup_printf(" <b>%s: </b>", _("Feed view"));
-
-	RSS_BTN_STOP = gtk_button_new_from_stock (GTK_STOCK_STOP);
-	RSS_BTN_FORW = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD);
-	RSS_BTN_BACK = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
-	po->stopbut = RSS_BTN_STOP;
-	po->forwbut = RSS_BTN_FORW;
-	po->backbut = RSS_BTN_BACK;
-
-	gtk_label_set_markup_with_mnemonic(GTK_LABEL(label3), mem);
-	gtk_widget_show (label3);
-	gtk_box_pack_start (GTK_BOX (hbox2), label3, TRUE, TRUE, 0);
-
-	button = gtk_button_new_with_label(
-				rf->cur_format ? _("Show Summary") :
-						_("Show Full Text"));
-
-	gtk_button_set_image (
-		GTK_BUTTON (button),
-		gtk_image_new_from_icon_name (
-			rf->cur_format ? "text-x-generic" : "text-html",
-			GTK_ICON_SIZE_BUTTON));
-
-	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_HALF);
-	g_signal_connect (button, "clicked", G_CALLBACK(summary_cb), po);
-	gtk_box_pack_start (GTK_BOX (hbox2), button, TRUE, TRUE, 0);
-	gtk_widget_show_all (button);
-
-
-	gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 0);
-	gtk_widget_show_all (vbox);
-	return vbox;
-}
-#endif
-
-#ifdef HAVE_RENDERKIT
-#if 0
-static gboolean
-org_gnome_rss_browser (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject)
-{
-	struct _org_gnome_rss_controls_pobject *po =
-			(struct _org_gnome_rss_controls_pobject *) pobject;
-	EMFormat *myf = (EMFormat *)efh;
-	gint width, height;
-	GtkAdjustment *adj;
-	gboolean online;
-	guint engine = fallback_engine();
-
-	po->stopbut = RSS_BTN_STOP;
-	po->forwbut = RSS_BTN_FORW;
-	po->backbut = RSS_BTN_BACK;
-
-#ifdef HAVE_WEBKIT
-	if (engine == 1) {
-		rf->mozembed = (GtkWidget *)webkit_web_view_new();
-		webkit_set_preferences();
-		g_signal_connect (
-			rf->mozembed,
-			"populate-popup",
-			G_CALLBACK (webkit_click),
-			NULL);
-		g_signal_connect (
-			rf->mozembed,
-			"hovering-over-link",
-			G_CALLBACK (webkit_over_link),
-			NULL);
-
-//add zoom level
-#if (WEBKIT_VERSION >= 1001007)
-		g_signal_connect (
-			rf->mozembed,
-			"notify::load-status",
-			G_CALLBACK(webkit_net_status),
-			po->stopbut);
-#endif
-	}
-#if (WEBKIT_VERSION >= 1001007)
-		g_signal_connect (
-			rf->mozembed,
-			"notify::load-status",
-			G_CALLBACK(webkit_history_status),
-			po);
-#endif
-#endif
-
-#ifdef HAVE_GECKO
-	if (engine == 2) {
-		rss_mozilla_init();	//in case we fail this is a failover
-		rf->mozembed = gtk_moz_embed_new();
-		d("mozembed=%p at %s:%d\n", rf->mozembed, __FILE__, __LINE__);
-		gecko_set_preferences();
-
-		/* FIXME add all those profile shits */
-		gtk_scrolled_window_add_with_viewport(
-				GTK_SCROLLED_WINDOW(moz),
-				GTK_WIDGET(rf->mozembed));
-		gtk_scrolled_window_set_shadow_type (
-				GTK_SCROLLED_WINDOW(moz),
-				GTK_SHADOW_ETCHED_IN);
-		g_signal_connect (rf->mozembed,
-				"dom_mouse_click",
-				G_CALLBACK(gecko_click),
-				moz);
-		g_signal_connect (
-				rf->mozembed,
-				"link_message",
-				G_CALLBACK(gecko_over_link),
-				moz);
-		g_signal_connect (
-				rf->mozembed,
-				"net_start",
-				G_CALLBACK(gecko_net_start),
-				po->stopbut);
-		g_signal_connect (
-				rf->mozembed,
-				"net_stop",
-				G_CALLBACK(gecko_net_stop),
-				po->stopbut);
-	}
-#endif
-
-#if EVOLUTION_VERSION >= 29101
-	online =  camel_session_get_online (
-			CAMEL_SESSION(rss_get_mail_session()));
-#else
-#if (DATASERVER_VERSION >= 2031002)
-	online =  camel_session_get_online (session);
-#else
-	online =  camel_session_is_online (session);
-#endif
-#endif
-
-#ifdef HAVE_WEBKIT
-	if (engine == 1) {
-		d("Render engine Webkit\n");
-		if (!online)
-			webkit_web_view_open(
-				WEBKIT_WEB_VIEW(rf->mozembed),
-				"about:blank");
-	}
-#endif
-
-#ifdef HAVE_GECKO
-	if (engine == 2) {
-		d("Render engine Gecko\n");
-		if (!online) {
-			gtk_moz_embed_stop_load(
-				(GtkMozEmbed *)rf->mozembed);
-			gtk_moz_embed_load_url (
-				(GtkMozEmbed *)rf->mozembed, "about:blank");
-		}
-	}
-#endif
-
-
-	//aparently webkit will hang if its not run from the main thread when compiled
-	//with soup
-	//this is as ugly as can be
-	if (engine == 1)
-		g_idle_add((GSourceFunc)show_webkit, rf->mozembed);
-	if (engine == 2)
-		gtk_widget_show_all(rf->mozembed);
-
-	gtk_container_add ((GtkContainer *) eb, rf->mozembed);
-	//appears distroying webkit's parent window results in crash
-	g_object_ref(eb);
-	po->container = eb;
-	rf->headers_mode = myf->mode;
+}
 
-#if EVOLUTION_VERSION >= 23103
-	po->html = (GtkWidget *)em_format_html_get_web_view (efh);
+static void
+#if EVOLUTION_VERSION < 22900
+rss_popup_zoom_out(EPopup *ep, EPopupItem *pitem, void *data)
 #else
-	po->html = GTK_WIDGET(efh->html);
+rss_popup_zoom_out(GtkWidget *widget, gpointer data)
 #endif
+{
+	gfloat zoom = gecko_get_zoom(rf->mozembed);
+	zoom/=1.2;
+	gecko_set_zoom(rf->mozembed, zoom);
+}
 
-	adj = gtk_scrolled_window_get_vadjustment(
-		(GtkScrolledWindow *)gtk_widget_get_parent(po->html));
-#if GTK_CHECK_VERSION (2,14,0)
-	height = (int)gtk_adjustment_get_page_size(adj);
-#else
-	height = (int)(adj->page_size);
-#endif
-	adj = gtk_scrolled_window_get_hadjustment(
-		(GtkScrolledWindow *)gtk_widget_get_parent(po->html));
-#if GTK_CHECK_VERSION (2,14,0)
-	width = (int)gtk_adjustment_get_page_size(adj);
+static void
+#if EVOLUTION_VERSION < 22900
+rss_popup_zoom_orig(EPopup *ep, EPopupItem *pitem, void *data)
 #else
-	width = (int)(adj->page_size);
-#endif
-	gtk_widget_set_size_request(rf->mozembed, width-14, height);
-	po->sh_handler = g_signal_connect(adj,
-		"changed",
-		G_CALLBACK(rss_browser_set_hsize),
-		NULL);
-	po->chandler = g_signal_connect(rf->mozembed,//efh->html,
-		"size_allocate",
-		G_CALLBACK(rss_browser_update_content),
-		po);
-	return TRUE;
-}
+rss_popup_zoom_orig(GtkWidget *widget, gpointer data)
 #endif
-
-#if 0
-static gboolean
-org_gnome_rss_rfrcomm (EMFormatHTML *efh, void *eb,
-			EMFormatHTMLPObject *pobject)
 {
-	struct _org_gnome_rss_controls_pobject *po =
-			(struct _org_gnome_rss_controls_pobject *) pobject;
-#if GTK_MAJOR_VERSION < 3
-	GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
-#else
-	GtkWidget *hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-#endif
-	GtkWidget *button;
-
-	gchar *mem = g_strdup_printf("%s(%d):",  _("Comments"), po->counter);
-	GtkWidget *label = gtk_link_button_new_with_label(po->website, mem);
-	gtk_widget_show (label);
-	g_free(mem);
-	gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
-	button = gtk_button_new_with_label(_("Refresh"));
-	gtk_widget_show (button);
-	gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
-	gtk_widget_show(hbox);
-	g_signal_connect (button, "clicked", G_CALLBACK(refresh_cb), efh);
-	if (GTK_IS_WIDGET(eb))
-		gtk_container_add ((GtkContainer *) eb, hbox);
-	return TRUE;
+	gecko_set_zoom(rf->mozembed, 1);
 }
-#endif
 
-#if 0
-static GtkWidget *
-org_gnome_rss_controls (EMFormat *emf,
-			//EMFormatPURI *puri,
-			EMailPart *puri,
-			GCancellable *cancellable)
-{
-	GtkWidget *box;
-	EMFormatRSSControlsPURI *po = (EMFormatRSSControlsPURI *) puri;
-#if GTK_MAJOR_VERSION < 3
-	GtkWidget *vbox = gtk_vbox_new (TRUE, 1);
-	GtkWidget *hbox2 = gtk_hbox_new (FALSE, 0);
+static void
+#if EVOLUTION_VERSION < 22900
+rss_popup_link_copy(EPopup *ep, EPopupItem *pitem, void *data)
 #else
-	GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1);
-	GtkWidget *hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+rss_popup_link_copy(GtkWidget *widget, gpointer data)
 #endif
-	GtkWidget *label3 = gtk_label_new ("");
-	GtkWidget *button, *button2, *button3, *button4, *button5;
-	gchar *mem = g_strdup_printf(" <b>%s: </b>", _("Feed view"));
-
-	gtk_label_set_markup_with_mnemonic(GTK_LABEL(label3), mem);
-	gtk_widget_show (label3);
-	gtk_box_pack_start (GTK_BOX (hbox2), label3, TRUE, TRUE, 0);
-
-	button = gtk_button_new_with_label(
-				rf->cur_format ? _("Show Summary") :
-						_("Show Full Text"));
-
-	gtk_button_set_image (
-		GTK_BUTTON (button),
-		gtk_image_new_from_icon_name (
-			rf->cur_format ? "text-x-generic" : "text-html",
-			GTK_ICON_SIZE_BUTTON));
-
-	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_HALF);
-	g_signal_connect (button, "clicked", G_CALLBACK(summary_cb), po);
-	gtk_box_pack_start (GTK_BOX (hbox2), button, TRUE, TRUE, 0);
-	gtk_widget_show_all (button);
-
-	gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 0);
-	gtk_widget_show_all (vbox);
-
-	return vbox;
+{
+	gtk_clipboard_set_text (
+		gtk_clipboard_get (GDK_SELECTION_PRIMARY),
+		data, -1);
+	gtk_clipboard_set_text (
+		gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
+		data, -1);
 }
-#endif
 
-#if 0
-static gboolean
-org_gnome_rss_controls (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject)
-{
-	struct _org_gnome_rss_controls_pobject *po =
-			(struct _org_gnome_rss_controls_pobject *) pobject;
-#if GTK_MAJOR_VERSION < 3
-	GtkWidget *vbox = gtk_vbox_new (TRUE, 1);
-	GtkWidget *hbox2 = gtk_hbox_new (FALSE, 0);
+static void
+#if EVOLUTION_VERSION < 22900
+rss_popup_link_open(EPopup *ep, EPopupItem *pitem, void *data)
 #else
-	GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1);
-	GtkWidget *hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+rss_popup_link_open(GtkWidget *widget, gpointer data)
 #endif
-	GtkWidget *label3 = gtk_label_new ("");
-	GtkWidget *button, *button2, *button3, *button4, *button5;
-	gchar *mem = g_strdup_printf(" <b>%s: </b>", _("Feed view"));
-	gboolean online;
-
-	RSS_BTN_STOP = gtk_button_new_from_stock (GTK_STOCK_STOP);
-	RSS_BTN_FORW = gtk_button_new_from_stock (GTK_STOCK_GO_FORWARD);
-	RSS_BTN_BACK = gtk_button_new_from_stock (GTK_STOCK_GO_BACK);
-	po->stopbut = RSS_BTN_STOP;
-	po->forwbut = RSS_BTN_FORW;
-	po->backbut = RSS_BTN_BACK;
+{
+	e_show_uri (NULL, data);
+}
 
-	gtk_label_set_markup_with_mnemonic(GTK_LABEL(label3), mem);
-	gtk_widget_show (label3);
-	gtk_box_pack_start (GTK_BOX (hbox2), label3, TRUE, TRUE, 0);
+void
+browser_copy_selection(GtkWidget *widget, gpointer data)
+{
+	gecko_copy_selection((GtkMozEmbed *)rf->mozembed);
+}
 
-	button = gtk_button_new_with_label(
-				rf->cur_format ? _("Show Summary") :
-						_("Show Full Text"));
+void
+browser_select_all(GtkWidget *widget, gpointer data)
+{
+	gecko_select_all((GtkMozEmbed *)rf->mozembed);
+}
 
-	gtk_button_set_image (
-		GTK_BUTTON (button),
-		gtk_image_new_from_icon_name (
-			rf->cur_format ? "text-x-generic" : "text-html",
-			GTK_ICON_SIZE_BUTTON));
+#if EVOLUTION_VERSION >= 22900
+EPopupMenu rss_menu_items[] = {
+	E_POPUP_ITEM (N_("_Copy"),		G_CALLBACK(browser_copy_selection), 1),
+	E_POPUP_ITEM (N_("Select _All"),	G_CALLBACK(browser_select_all), 1),
+	E_POPUP_SEPARATOR,
+	E_POPUP_ITEM (N_("Zoom _In"),		G_CALLBACK(rss_popup_zoom_in), 2),
+	E_POPUP_ITEM (N_("Zoom _Out"),		G_CALLBACK(rss_popup_zoom_out), 2),
+	E_POPUP_ITEM (N_("_Normal Size"),	G_CALLBACK(rss_popup_zoom_orig), 2),
+	E_POPUP_SEPARATOR,
+	E_POPUP_ITEM (N_("_Open Link"),		G_CALLBACK(rss_popup_link_open), 4),
+	E_POPUP_ITEM (N_("_Copy Link Location"),G_CALLBACK(rss_popup_link_copy), 4),
+	E_POPUP_TERMINATOR
+};
+#else
+EPopupItem rss_menu_items[] = {
+	{ E_POPUP_BAR, "05.rss-browser.01", NULL, NULL, NULL, NULL },
+	{ E_POPUP_ITEM, "05.rss-browser.02", N_("Zoom _In"), rss_popup_zoom_in, NULL, "zoom-in", EM_POPUP_URI_HTTP },
+	{ E_POPUP_ITEM, "05.rss-browser.03", N_("Zoom _Out"), rss_popup_zoom_out, NULL, "zoom-out", EM_POPUP_URI_HTTP },
+	{ E_POPUP_ITEM, "05.rss-browser.04", N_("_Normal Size"), rss_popup_zoom_orig, NULL, "zoom-original", EM_POPUP_URI_HTTP },
+	{ E_POPUP_BAR, "05.rss-browser.05", NULL, NULL, NULL, NULL },
+	{ E_POPUP_ITEM, "05.rss-browser.06", N_("_Print..."), NULL, NULL, "document-print", EM_POPUP_SELECT_ONE },
+	{ E_POPUP_ITEM, "05.rss-browser.07", N_("Save _As"), NULL, NULL, "document-save-as", 0},
+	{ E_POPUP_BAR, "05.rss-browser.08", NULL, NULL, NULL, NULL },
+	{ E_POPUP_ITEM, "05.rss-browser.09", N_("_Open Link in Browser"), rss_popup_link_open, NULL, NULL, EM_POPUP_URI_HTTP },
+	{ E_POPUP_ITEM, "05.rss-browser.10", N_("_Copy Link Location"), rss_popup_link_copy, NULL, "edit-copy" },
+};
 
-	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_HALF);
-	g_signal_connect (button, "clicked", G_CALLBACK(summary_cb), efh);
-	gtk_box_pack_start (GTK_BOX (hbox2), button, TRUE, TRUE, 0);
-	gtk_widget_show_all (button);
+void
+rss_menu_items_free(EPopup *ep, GSList *items, void *data);
 
-#if EVOLUTION_VERSION >= 29101
-	online =  camel_session_get_online (
-			CAMEL_SESSION(rss_get_mail_session()));
-#else
-#if (DATASERVER_VERSION >= 2031002)
-	online =  camel_session_get_online (session);
-#else
-	online =  camel_session_is_online (session);
+void
+rss_menu_items_free(EPopup *ep, GSList *items, void *data)
+{
+	g_slist_free(items);
+}
 #endif
 #endif
 
-	if (rf->cur_format) {
-		button4 = po->backbut;
-		g_signal_connect (
-			button4,
-			"clicked",
-			G_CALLBACK(back_cb),
-			efh);
-		gtk_button_set_relief(GTK_BUTTON(button4), GTK_RELIEF_HALF);
-		gtk_widget_set_sensitive (button4, online);
-		gtk_widget_show (button4);
-		gtk_box_pack_start (
-			GTK_BOX (hbox2),
-			button4,
-			TRUE, TRUE, 0);
-		button5 = po->forwbut;
-		g_signal_connect (
-			button5,
-			"clicked",
-			G_CALLBACK(forward_cb),
-			efh);
-		gtk_button_set_relief(GTK_BUTTON(button5), GTK_RELIEF_HALF);
-		gtk_widget_set_sensitive (button5, online);
-		gtk_widget_show (button5);
-		gtk_box_pack_start (GTK_BOX (hbox2), button5, TRUE, TRUE, 0);
-		button2 = po->stopbut;
-		g_signal_connect (
-			button2,
-			"clicked",
-			G_CALLBACK(stop_cb),
-			efh);
-		gtk_button_set_relief(GTK_BUTTON(button2), GTK_RELIEF_HALF);
-		gtk_widget_set_sensitive (button2, online);
-		gtk_widget_show (button2);
-		gtk_box_pack_start (GTK_BOX (hbox2), button2, TRUE, TRUE, 0);
-		button3 = gtk_button_new_from_stock (GTK_STOCK_REFRESH);
-		g_signal_connect (
-			button3,
-			"clicked",
-			G_CALLBACK(reload_cb),
-			po->website);
-		gtk_button_set_relief(GTK_BUTTON(button3), GTK_RELIEF_HALF);
-		gtk_widget_set_sensitive (button3, online);
-		gtk_widget_show (button3);
-		gtk_box_pack_start (GTK_BOX (hbox2), button3, TRUE, TRUE, 0);
-	}
-	gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 0);
-	gtk_widget_show_all (vbox);
-
-//		int width = vbox->allocation.width;
-//		int height = vbox->allocation.height;
-
-	if (GTK_IS_WIDGET(eb))
-		gtk_container_add ((GtkContainer *) eb, vbox);
-//	GtkHTMLEmbedded *myeb = eb;
-//	gtk_widget_size_request(myeb->widget, &req);
-//	g_print("BOX ww:%d,hh%d\n", myeb->width, myeb->height);
-//	g_print("BOX ww:%d,hh%d\n", width, height);
 
-	po->html = vbox;
-	po->mem = mem;
+#if EVOLUTION_VERSION >= 29101
+EMailSession*
+rss_get_mail_session(void);
 
-	return TRUE;
+EMailSession*
+rss_get_mail_session(void)
+{
+	EMailBackend *backend;
+	EMailReader *reader;
+	EShellContent *shell_content;
+	shell_content = e_shell_view_get_shell_content (rss_shell_view);
+	reader = E_MAIL_READER (shell_content);
+	backend = e_mail_reader_get_backend (reader);
+	return e_mail_backend_get_session (backend);
 }
 #endif
-#endif
 
 void
 cancel_comments_session(SoupSession *sess)
@@ -2446,563 +1385,6 @@ write_rss_error (EMFormat *emf,
 #endif
 
 
-void org_gnome_cooly_format_rss(void *ep, void *t);
-
-void org_gnome_cooly_format_rss(void *ep, void *t)
-{
-	g_print("format_rss()\n");
-}
-
-#if 0
-void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t);
-
-void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
-{
-	GError *err = NULL;
-	GString *content;
-	xmlChar *buff = NULL;
-	CamelContentType *type;
-	gchar *feedid = NULL;
-	gchar *comments = NULL;
-	gchar *category = NULL;
-	GdkPixbuf *pixbuf = NULL;
-	int size;
-	CamelMimePart *message;
-	CamelStream *fstream = camel_stream_mem_new();
-	GString *fbuffer = g_string_new(NULL);
-	CamelStreamMem *stream = (CamelStreamMem *)camel_stream_mem_new();
-	CamelDataWrapper *mcontent;
-	EMFormatHTML *emfh = (EMFormatHTML *)t->format;
-	gchar *rfrclsid, *addr, *subject, *result;
-	const char *website;
-#if (EVOLUTION_VERSION < 30400)
-	struct _org_gnome_rss_controls_pobject *pobj;
-#else
-	EMFormatRSSControlsPURI *pobj;
-	gint len;
-#endif
-	gpointer is_html;
-	gchar *classid, *tmp;
-	xmlDoc *src;
-	xmlChar *wid;
-	GByteArray *buffer;
-	GdkPixbuf *pix;
-	gchar *feed_dir, *feed_file, *iconfile;
-	gchar *tmp_path, *tmp_file;
-	gchar *str;
-#if EVOLUTION_VERSION >= 22900 //kb//
-	GdkColor color;
-#endif
-	GtkAllocation alloc;
-
-	current_pobject = t->format;
-	d("Formatting...\n");
-
-	message = CAMEL_IS_MIME_MESSAGE(t->part) ?
-			t->part :
-			(CamelMimePart *)t->format->message;
-
-	/* force loading of images even if mail images disabled */
-	/* //KB// */
-	//emfh->load_http_now = TRUE;
-	/* assuming 0xffffff will ruin dark themes */
-#if EVOLUTION_VERSION < 22900 //kb//
-	frame_colour = emfh->frame_colour;// ? emfh->frame_colour: 0xffffff;
-	content_colour = emfh->content_colour;// ? emfh->content_colour: 0xffffff;
-	text_colour = emfh->text_colour;// ? emfh->text_colour: 0xffffff;
-#else
-
-	em_format_html_get_color(
-				emfh,
-				EM_FORMAT_HTML_COLOR_FRAME,
-				&color);
-	frame_colour = e_color_to_value(&color);
-
-	em_format_html_get_color(
-				emfh,
-				EM_FORMAT_HTML_COLOR_CONTENT,
-				&color);
-	content_colour = e_color_to_value(&color);
-
-	em_format_html_get_color(
-				emfh,
-				EM_FORMAT_HTML_COLOR_TEXT,
-				&color);
-	text_colour = e_color_to_value(&color);
-#endif
-
-	type = camel_mime_part_get_content_type(message);
-	website = camel_medium_get_header (
-			CAMEL_MEDIUM (message), "Website");
-	if (!website)
-		goto fmerror;
-	addr = (gchar *)camel_header_location_decode(website);
-	feedid  = (gchar *)camel_medium_get_header(
-			CAMEL_MEDIUM(message), "RSS-ID");
-	comments  = (gchar *)camel_medium_get_header (
-				CAMEL_MEDIUM(message),
-				"X-Evolution-rss-comments");
-	category  = (gchar *)camel_medium_get_header(
-				CAMEL_MEDIUM(message),
-				"X-Evolution-rss-category");
-	subject = camel_header_decode_string(
-			camel_medium_get_header (CAMEL_MEDIUM (message),
-			"Subject"), NULL);
-
-	is_html = NULL;
-	if (feedid)
-		is_html =  g_hash_table_lookup(
-				rf->hrh,
-				g_strstrip(feedid)); //feedid is modified
-	if (comments)
-		comments = g_strstrip(comments);
-
-	if (!rf->chg_format)
-		rf->cur_format = GPOINTER_TO_INT(is_html);
-
-	if (rf->chg_format)
-		rf->chg_format = 0;
-
-#if (EVOLUTION_VERSION < 30400)
-	classid = g_strdup_printf ("org-gnome-rss-controls-%d",
-			org_gnome_rss_controls_counter_id);
-	org_gnome_rss_controls_counter_id++;
-	pobj = (struct _org_gnome_rss_controls_pobject *)
-			em_format_html_add_pobject (
-				(EMFormatHTML *) t->format,
-				sizeof(*pobj),
-				classid,
-				message,
-				(EMFormatHTMLPObjectFunc)org_gnome_rss_controls);
-	pobj->is_html = GPOINTER_TO_INT(is_html);
-	pobj->website = g_strstrip(g_strdup((gchar *)website));
-	pobj->stream = t->stream;
-	pobj->object.free = free_rss_controls;
-	str = g_strdup_printf (
-		"<object classid=%s></object>\n",
-		classid);
-	camel_stream_write_string (t->stream, str, NULL, NULL);
-	g_free(str);
-	g_free (classid);
-#else
-	len = t->part_id->len;
-	g_string_append (t->part_id, ".org-gnome-rss-controls");
-	pobj = (EMFormatRSSControlsPURI *) em_format_puri_new (
-			t->format, sizeof (EMFormatRSSControlsPURI),
-			t->part, t->part_id->str);
-	pobj->puri.widget_func = org_gnome_rss_controls;
-	pobj->puri.write_func = write_rss_controls;
-	pobj->puri.part = g_object_ref (t->part);
-	pobj->puri.is_attachment = FALSE;
-	pobj->website = g_strstrip(g_strdup((gchar *)website));
-	pobj->is_html = GPOINTER_TO_INT(is_html);
-	pobj->buff = str;
-	em_format_add_puri (t->format, (EMFormatPURI *) pobj);
-	g_string_truncate (t->part_id, len);
-#endif
-
-
-	if (rf->cur_format || (feedid && is_html && rf->cur_format)) {
-#ifdef HAVE_RENDERKIT
-		guint engine = fallback_engine();
-		if (engine && engine != 10) {
-#if (EVOLUTION_VERSION < 30400)
-			char *classid = g_strdup_printf(
-					"org-gnome-rss-controls-%d",
-					org_gnome_rss_controls_counter_id);
-			org_gnome_rss_controls_counter_id++;
-			pobj = (struct _org_gnome_rss_controls_pobject *)
-				em_format_html_add_pobject(
-					(EMFormatHTML *) t->format,
-					sizeof(*pobj),
-					classid,
-					message,
-					(EMFormatHTMLPObjectFunc)org_gnome_rss_browser);
-			pobj->format = (EMFormatHTML *)t->format;
-			pobj->object.free = free_rss_browser;
-			pobj->part = t->part;
-			str = g_strdup_printf (
-				"<table style=\"border: solid #%06x 1px; background-color: #%06x; color: #%06x;\" cellpadding=1 cellspacing=0><tr><td align=center>",
-				frame_colour & 0xffffff,
-				frame_colour & 0xffffff,
-				text_colour & 0xffffff);
-			str = g_strdup_printf (
-				"<object classid=%s></object></td></tr></table>",//</div>\n",
-				classid);
-			camel_stream_write_string (t->stream, str, NULL, NULL);
-			g_free (str);
-			g_free (classid);
-#else
-			len = t->part_id->len;
-			g_string_append (t->part_id, ".org-gnome-rss-browser");
-			pobj = (EMFormatRSSControlsPURI *) em_format_puri_new (
-				t->format, sizeof (EMFormatRSSControlsPURI),
-				t->part, t->part_id->str);
-			pobj->puri.widget_func = org_gnome_rss_browser;
-			pobj->puri.write_func = write_rss_content;
-			pobj->puri.part = g_object_ref (t->part);
-			pobj->puri.is_attachment = FALSE;
-			pobj->website = g_strstrip(g_strdup((gchar *)website));
-			pobj->is_html = GPOINTER_TO_INT(is_html);
-			pobj->buff = str;
-			em_format_add_puri (t->format, (EMFormatPURI *) pobj);
-			g_string_truncate (t->part_id, len);
-#endif
-			goto out;
-		}
-#endif
-#if 0
-		//replace with unblocking
-		content = fetch_blocking(addr, NULL, NULL, textcb, NULL, &err);
-		if (err) {
-			//we do not need to setup a pop error menu since we're in
-			//formatting process. But instead display mail body an error
-			//such proxy error or transport error
-			str = g_strdup_printf (
-				"<div style=\"border: solid #%06x 1px; background-color: #%06x; color: #%06x;\">\n",
-				frame_colour & 0xffffff,
-				content_colour & 0xffffff,
-				text_colour & 0xffffff);
-			camel_stream_write_string (t->stream, str, NULL, NULL);
-			g_free (str);
-			camel_stream_write_string (t->stream, "<div style=\"border: solid 0px; padding: 4px;\">\n", NULL, NULL);
-			camel_stream_write_string (t->stream, "<h3>Error!</h3>", NULL, NULL);
-			camel_stream_write_string (t->stream, err->message, NULL, NULL);
-			camel_stream_write_string (t->stream, "</div>", NULL, NULL);
-			goto out;
-		}
-
-		tmp = decode_utf8_entities(content->str);
-		src = (xmlDoc *)parse_html(addr, tmp, strlen(tmp));
-
-		if (src) {
-			htmlDocDumpMemory(src, &buff, &size);
-			d("htmlDocDumpMemory:%s\n", buff);
-			xmlFree(src);
-		} else
-			goto out;
-
-		str = g_strdup_printf (
-			"<div style=\"border: solid #%06x 1px; background-color: #%06x; color: #%06x;\">\n",
-			frame_colour & 0xffffff,
-			content_colour & 0xffffff,
-			text_colour & 0xffffff);
-		camel_stream_write_string (fstream, str, NULL, NULL);
-		g_free (str);
-		str = g_strdup_printf (
-			"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
-			"<b><font size=+1><a href=%s>%s</a></font></b></div>",
-			content_colour & 0xEDECEB & 0xffffff,
-			text_colour & 0xffffff,
-			website, subject);
-		camel_stream_write_string (fstream, str, NULL, NULL);
-		g_free (str);
-		if (category) {
-			str = g_strdup_printf (
-				"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
-				"<b><font size=-1>%s: %s</font></b></div>",
-				content_colour & 0xEDECEB & 0xffffff, text_colour & 0xffffff,
-				_("Posted under"), category);
-			camel_stream_write_string (fstream, str, NULL, NULL);
-			g_free (str);
-		}
-		str = g_strdup_printf (
-				"<div style=\"border: solid #%06x 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
-				"%s</div>",
-				frame_colour & 0xffffff,
-				content_colour & 0xffffff,
-				text_colour & 0xffffff,
-				buff);
-		camel_stream_write_string (fstream, str, NULL, NULL);
-		g_free (str);
-
-		g_string_free(content, 1);
-#endif
-	} else {
-		gchar *wids;
-		xmlDoc *src;
-		guint width;
-		GtkWidget *obj;
-//#if EVOLUTION_VERSION >= 23103
-//		EWebView *web_view;
-//		web_view = em_format_html_get_web_view (emfh);
-//		obj = (GtkWidget *)web_view;
-//#else
-//		obj = (GtkWidget *)emfh->html;
-//#endif
-
-		d("normal html rendering\n");
-		buffer = g_byte_array_new ();
-		camel_stream_mem_set_byte_array (stream, buffer);
-#if EVOLUTION_VERSION >= 23100
-		mcontent = camel_medium_get_content(
-				CAMEL_MEDIUM(t->part));
-#else
-		mcontent = camel_medium_get_content_object(
-				CAMEL_MEDIUM(t->part));
-#endif
-#if DATASERVER_VERSION >= 2033001
-		camel_data_wrapper_write_to_stream_sync (
-			mcontent,
-			(CamelStream *)stream,
-			NULL, NULL);
-#else
-		camel_data_wrapper_write_to_stream (
-			mcontent,
-			(CamelStream *)stream,
-			NULL);
-#endif
-		g_byte_array_append (buffer, (unsigned char *)"", 1);
-		if (camel_content_type_is(type, "text", "evolution-rss-feed")) {	//old evolution-rss content type
-			tmp = decode_utf8_entities((gchar *)(buffer->data));
-		} else
-			tmp = g_strdup((gchar *)(buffer->data));
-
-#if GTK_CHECK_VERSION (2,18,0)
-		gtk_widget_get_allocation(obj, &alloc);
-#else
-		alloc.width = obj->allocation.width;;
-#endif
-		width = alloc.width - 56;
-		wids = g_strdup_printf("%d", width);
-		src = (xmlDoc *)parse_html_sux(
-				tmp,
-				strlen(tmp));
-		if (src) {
-			xmlNode *doc = (xmlNode *)src;
-			while ((doc = html_find(doc, (gchar *)"img"))) {
-				int real_width = 0;
-				xmlChar *url = xmlGetProp(
-						doc,
-						(xmlChar *)"src");
-				gchar *real_image = verify_image(
-							(gchar *)url,
-							t->format);
-				if (real_image) {
-					xmlSetProp(
-						doc,
-						(xmlChar *)"src",
-						(xmlChar *)real_image);
-				}
-				if (gconf_client_get_bool (rss_gconf,
-					GCONF_KEY_IMAGE_RESIZE, NULL) && real_image) {
-					pix = gdk_pixbuf_new_from_file(
-						(const char *)real_image+7, //skip scheme part
-						(GError **)NULL);
-					if (pix)
-						real_width = gdk_pixbuf_get_width(pix);
-
-					d("real_image:%s\n", real_image);
-					d("width:%d\n", width);
-					d("real_width:%d\n", real_width);
-
-					wid = xmlGetProp(
-						doc,
-						(xmlChar *)"width");
-					if (wid) {
-						if (atof((const char *)wid) > width)
-							xmlSetProp(
-								doc,
-								(xmlChar *)"width",
-								(xmlChar *)wids);
-						g_free(wid);
-						goto pixdone;
-					} else if (real_width > width) {
-						xmlSetProp(
-							doc,
-							(xmlChar *)"width",
-							(xmlChar *)wids);
-					}
-pixdone:			g_free(real_image);
-				}
-			}
-			xmlDocDumpMemory(src, &buff, (int*)&size);
-			xmlFree(src);
-		}
-		g_free(wids);
-
-		g_byte_array_free (buffer, 1);
-#if (DATASERVER_VERSION >= 2031001)
-		g_object_unref(stream);
-#else
-		camel_object_unref(stream);
-#endif
-	//	char *buff = decode_html_entities(buffer2);
-///		buff=tmp;
-
-		feed_dir = rss_component_peek_base_directory();
-		tmp_file = g_strconcat(feedid, ".img", NULL);
-		tmp_path = g_build_path(G_DIR_SEPARATOR_S,
-				feed_dir, tmp_file, NULL);
-		g_free(tmp_file);
-		g_free(feed_dir);
-#if EVOLUTION_VERSION >= 23000
-		feed_file = g_filename_to_uri(tmp_path, NULL, NULL);
-		feed_file = g_strconcat("evo-file://", tmp_path, NULL);
-#else
-		feed_file = g_strdup(tmp_path);
-#endif
-
-		g_string_append_printf (fbuffer,
-			"<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 2px; color: #%06x;\">",
-			frame_colour & 0xffffff,
-			content_colour & 0xEDECEB & 0xffffff,
-			text_colour & 0xffffff);
-		if (g_file_test(tmp_path, G_FILE_TEST_EXISTS)){
-			if ((pixbuf = gdk_pixbuf_new_from_file(tmp_path, NULL))) {
-				g_string_append_printf (fbuffer,
-					"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
-					"<img height=16 src=%s>"
-					"<b><font size=+1><a href=%s>%s</a></font></b></div>",
-					content_colour & 0xEDECEB & 0xffffff,
-					text_colour & 0xffffff,
-					feed_file,
-					website,
-					subject);
-				g_object_unref(pixbuf);
-				g_free(feed_file);
-				goto render_body;
-			}
-		g_free(tmp_path);
-		}
-		tmp_file = g_build_filename (EVOLUTION_ICONDIR,
-				"rss-16.png",
-				NULL);
-#if EVOLUTION_VERSION >= 23000
-		iconfile = g_filename_to_uri(tmp_file, NULL, NULL);
-		iconfile = g_strconcat("evo-file://", tmp_file, NULL);
-#else
-		iconfile = g_strdup(tmp_file);
-#endif
-		g_free(tmp_file);
-		g_string_append_printf (fbuffer,
-			"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
-			"<img height=16 src=%s>"
-			"<b><font size=+1><a href=%s>%s</a></font></b></div>",
-			content_colour & 0xEDECEB & 0xffffff, text_colour & 0xffffff,
-			iconfile, website, subject);
-		g_free(iconfile);
-		g_free(feed_file);
-
-render_body:	if (category) {
-			g_string_append_printf (fbuffer,
-				"<div style=\"border: solid 0px; background-color: #%06x; padding: 2px; color: #%06x;\">"
-				"<b><font size=-1>Posted under: %s</font></b></div>",
-				content_colour & 0xEDECEB & 0xffffff,
-				text_colour & 0xffffff,
-				category);
-		}
-		g_string_append_printf (fbuffer,
-			"<div style=\"border: solid #%06x 0px; background-color: #%06x; padding: 10px; color: #%06x;\">"
-			"%s</div>",
-			frame_colour & 0xffffff,
-			content_colour & 0xffffff,
-			text_colour & 0xffffff,
-			buff);
-/*		if (comments && gconf_client_get_bool (rss_gconf,
-						GCONF_KEY_SHOW_COMMENTS,
-						NULL)) {
-			if (commstream) {
-				g_string_append_printf (fbuffer,
-					"<div style=\"border: solid #%06x 0px; background-color: #%06x; padding: 2px; color: #%06x;\">",
-					frame_colour & 0xffffff,
-					content_colour & 0xEDECEB & 0xffffff,
-					text_colour & 0xffffff);
-				result = print_comments(comments, commstream, (EMFormatHTML *)t->format);
-				g_free(commstream);
-				rfrclsid = g_strdup_printf ("org-gnome-rss-controls-%d",
-					org_gnome_rss_controls_counter_id);
-				org_gnome_rss_controls_counter_id++;
-				pobj = (struct _org_gnome_rss_controls_pobject *)
-							em_format_html_add_pobject ((EMFormatHTML *) t->format,
-									sizeof(*pobj),
-									rfrclsid,
-									message,
-									(EMFormatHTMLPObjectFunc)org_gnome_rss_rfrcomm);
-				pobj->counter = commcnt;
-				pobj->website = g_strdup(comments);
-				//this might not be needed but we want to make sure po->html is destroyed
-				pobj->object.free = free_rss_controls;
-				g_string_append_printf (fbuffer,
-					"<object height=25 classid=%s></object>", rfrclsid);
-				if (result && strlen(result)) {
-					g_string_append_printf (fbuffer,
-					"<div style=\"border: solid #%06x 0px; background-color: #%06x; padding: 10px; color: #%06x;\">%s",
-						frame_colour & 0xffffff,
-						content_colour & 0xffffff,
-						text_colour & 0xffffff,
-						result);
-					g_free(result);
-				}
-				g_free(rfrclsid);
-				commstream = NULL;
-			} else {
-				gchar *uri =  g_strdup(g_hash_table_lookup(
-						rf->hr, g_strstrip(feedid)));
-				fetch_comments(comments, g_strdup(uri), (EMFormatHTML *)t->format);
-			}
-			g_string_append (fbuffer, "</div>");
-		}*/
-		g_string_append (fbuffer, "</div>");
-//#endif
-	}
-#if (EVOLUTION_VERSION < 30400)
-	camel_stream_write (t->stream, fbuffer->str, fbuffer->len, NULL, NULL);
-#else
-	len = t->part_id->len;
-	g_string_append (t->part_id, ".org-gnome-rss-content");
-	pobj = (EMFormatRSSControlsPURI *) em_format_puri_new (
-		t->format, sizeof (EMFormatRSSControlsPURI),
-		t->part, t->part_id->str);
-	pobj->puri.write_func = write_rss_content;
-	pobj->puri.part = g_object_ref (t->part);
-	pobj->puri.is_attachment = FALSE;
-	pobj->buff = fbuffer->str;
-	em_format_add_puri (t->format, (EMFormatPURI *) pobj);
-	g_string_truncate (t->part_id, len);
-#endif
-#if (DATASERVER_VERSION >= 2031001)
-	g_object_unref(fstream);
-#else
-	camel_object_unref(fstream);
-#endif
-	g_free(buff);
-	g_free(subject);
-
-out:	if (addr)
-		g_free(addr);
-	return;
-fmerror:
-#if (EVOLUTION_VERSION < 30400)
-	str = g_strdup_printf (
-		"<div style=\"border: solid #%06x 1px; background-color: #%06x; color: #%06x;\">\n",
-		frame_colour & 0xffffff, content_colour & 0xffffff, text_colour & 0xffffff);
-	camel_stream_write_string (t->stream, str, NULL, NULL);
-	g_free (str);
-	camel_stream_write_string (t->stream,
-		"<div style=\"border: solid 0px; padding: 4px;\">\n",
-		NULL, NULL);
-	camel_stream_write_string (t->stream,
-		"<h3>Formatting error!</h3>"
-		"Feed article corrupted! Cannot format article.",
-		NULL, NULL);
-	camel_stream_write_string (t->stream, "</div></div>", NULL, NULL);
-#else
-	len = t->part_id->len;
-	g_string_append (t->part_id, ".org-gnome-rss-error");
-	pobj = (EMFormatRSSControlsPURI *) em_format_puri_new (
-		t->format, sizeof (EMFormatRSSControlsPURI),
-		t->part, t->part_id->str);
-	pobj->puri.write_func = write_rss_error;
-	pobj->puri.part = g_object_ref (t->part);
-	pobj->puri.is_attachment = FALSE;
-	em_format_add_puri (t->format, (EMFormatPURI *) pobj);
-	g_string_truncate (t->part_id, len);
-#endif
-	return;
-}
-#endif
-
 #if EVOLUTION_VERSION < 22900 //kb//
 void org_gnome_cooly_folder_refresh(void *ep, EMEventTargetFolder *t);
 #else
@@ -3693,7 +2075,7 @@ update_sr_message(void)
 				farticle,
 				ftotal);
 		if (G_IS_OBJECT(rf->progress_bar))
-			gtk_progress_bar_set_text (rf->progress_bar, fmsg);
+			gtk_progress_bar_set_text ((GtkProgressBar *)rf->progress_bar, fmsg);
 #endif
 		g_free(fmsg);
 	}
@@ -3800,7 +2182,7 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 			gtk_label_set_markup (GTK_LABEL (rf->label), _("Complete."));
 #else
 		if(rf->progress_bar && rf->info) {
-			gtk_progress_bar_set_text (GTK_LABEL (rf->progress_bar), _("Complete."));
+			gtk_progress_bar_set_text ((GtkProgressBar *)(rf->progress_bar), _("Complete."));
 #endif
 			if (rf->info->cancel_button)
 				gtk_widget_set_sensitive(rf->info->cancel_button, FALSE);
@@ -3849,7 +2231,7 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 				_("Canceled."));
 #else
 		if(rf->progress_bar && rf->feed_queue == 0 && rf->info) {
-			gtk_progress_bar_set_text (rf->progress_bar,
+			gtk_progress_bar_set_text ((GtkProgressBar *)rf->progress_bar,
 				_("Canceled."));
 #endif
 			farticle=0;
@@ -3964,7 +2346,7 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 		gtk_label_set_markup (GTK_LABEL (rf->label), _("Complete"));
 #else
 	if(rf->progress_bar && rf->feed_queue == 0 && rf->info) {
-		gtk_progress_bar_set_text (rf->progress_bar, _("Complete"));
+		gtk_progress_bar_set_text ((GtkProgressBar *)rf->progress_bar, _("Complete"));
 #endif
 		farticle=0;
 		ftotal=0;
@@ -4097,9 +2479,9 @@ finish_website (SoupSession *soup_sess, SoupMessage *msg, gpointer user_data)
 	d("browser fill:%d\n", (int)browser_fill);
 	if (!response->len) {
 		tmsg = g_strdup(_("Formatting error."));
-		browser_write(
-			tmsg, strlen(tmsg),
-			(gchar *)"file:///fakefile#index");
+		//browser_write(
+		//	tmsg, strlen(tmsg),
+		//	(gchar *)"file:///fakefile#index");
 		//g_free(tmsg);
 		if (ub->create) {
 			//stream remove
@@ -4133,7 +2515,7 @@ finish_website (SoupSession *soup_sess, SoupMessage *msg, gpointer user_data)
 		len = strlen(response->str);
 		*str+= browser_fill;
 		len-= browser_fill;
-		browser_write(str, len, ub->url);
+		//browser_write(str, len, ub->url);
 		g_string_free(response, 1);
 	}
 	browser_fill = 0;
@@ -5086,6 +3468,27 @@ check_folders(void)
 #endif
 }
 
+void
+refresh_mail_folder(CamelFolder *mail_folder)
+{
+#if EVOLUTION_VERSION < 30505
+        mail_refresh_folder(mail_folder, NULL, NULL);
+#else
+        EShellContent *shell_content;
+        EMailReader *reader;
+        shell_content = e_shell_view_get_shell_content (rss_shell_view);
+        reader = E_MAIL_READER (shell_content);
+        e_mail_reader_refresh_folder(reader, mail_folder);
+#endif
+#if (DATASERVER_VERSION >= 2033001)
+                camel_folder_synchronize (mail_folder, FALSE, G_PRIORITY_DEFAULT,
+                        NULL, NULL, NULL);
+#else
+        camel_folder_sync(mail_folder, FALSE, NULL);
+#endif
+        camel_folder_thaw(mail_folder);
+}
+
 gboolean
 check_if_enabled (gpointer key, gpointer value, gpointer user_data)
 {
@@ -5140,7 +3543,7 @@ org_gnome_evolution_rss(void *ep, EMEventTargetSendReceive *t)
 	struct _send_info *info;
 	struct _send_data *data = (struct _send_data *)t->data;
 
-	GtkWidget *label,*progress_bar, *cancel_button, *status_label;
+	GtkWidget *label,*progress_bar, *cancel_button;
 	GtkWidget *recv_icon;
 	gchar *pretty_url;
 	guint row;
@@ -5212,7 +3615,7 @@ org_gnome_evolution_rss(void *ep, EMEventTargetSendReceive *t)
 	gtk_widget_set_margin_bottom (cancel_button, 12);
 
 	gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
-	gtk_misc_set_alignment (GTK_MISC (status_label), 0, .5);
+	//gtk_misc_set_alignment (GTK_MISC (status_label), 0, .5);
 
 #if EVOLUTION_VERSION < 30501
 	gtk_table_attach (
@@ -5227,17 +3630,17 @@ org_gnome_evolution_rss(void *ep, EMEventTargetSendReceive *t)
 	gtk_table_attach (
 		GTK_TABLE (t->table), cancel_button,
 		3, 4, row, row+2, 0, 0, 0, 0);
-	gtk_table_attach (
-		GTK_TABLE (t->table), status_label,
-		1, 2, row+1, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+	//gtk_table_attach (
+	//	GTK_TABLE (t->table), status_label,
+	//	1, 2, row+1, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
 #else
 	gtk_widget_set_hexpand (label, TRUE);
 	gtk_widget_set_halign (label, GTK_ALIGN_FILL);
 
-	gtk_grid_attach (t->grid, recv_icon, 0, row, 1, 2);
-	gtk_grid_attach (t->grid, label, 1, row, 1, 1);
-	gtk_grid_attach (t->grid, progress_bar, 1, row + 1, 1, 1);
-	gtk_grid_attach (t->grid, cancel_button, 2, row, 1, 2);
+	gtk_grid_attach ((GtkGrid *)t->grid, recv_icon, 0, row, 1, 2);
+	gtk_grid_attach ((GtkGrid *)t->grid, label, 1, row, 1, 1);
+	gtk_grid_attach ((GtkGrid *)t->grid, progress_bar, 1, row + 1, 1, 1);
+	gtk_grid_attach ((GtkGrid *)t->grid, cancel_button, 2, row, 1, 2);
 #endif
 
 	g_signal_connect (
@@ -5245,10 +3648,10 @@ org_gnome_evolution_rss(void *ep, EMEventTargetSendReceive *t)
 			G_CALLBACK (receive_cancel), info);
 
 	info->progress_bar = progress_bar;
-#if EVOLUTION_VERSION < 30504
-	info->status_label = status_label;
-	rf->label = status_label;
-#endif
+//#if EVOLUTION_VERSION < 30504
+//	info->status_label = status_label;
+//	rf->label = status_label;
+//#endif
 	info->cancel_button = cancel_button;
 	info->data = (struct _send_data *)t->data;
 	rf->info = info;
@@ -5378,12 +3781,6 @@ e_plugin_ui_init (GtkUIManager *ui_manager,
 		"activate",
 		G_CALLBACK (quit_cb),
 		rss_shell_view);
-#if EVOLUTION_VERSION >= 22900
-/*	rss_search_bar_hook();*/
-#ifdef HAVE_WEBKIT
-	webkit_hook_actions();
-#endif
-#endif
 	rss_hooks_init();
 	return TRUE;
 }
diff --git a/src/rss.h b/src/rss.h
index 2d7ea1b..bbd9a4c 100644
--- a/src/rss.h
+++ b/src/rss.h
@@ -461,6 +461,7 @@ void cancel_comments_session(SoupSession *sess);
 gchar *search_rss(char *buffer, int len);
 void prepare_hashes(void);
 void update_ttl(gpointer key, guint value);
+void refresh_mail_folder(CamelFolder *mail_folder);
 gboolean check_chn_name(gchar *chn_name);
 void
 #if LIBSOUP_VERSION < 2003000
@@ -553,6 +554,7 @@ void quit_cb(void *ep, EShellView *shell_view);
 #endif
 void rebase_feeds(gchar *old_name, gchar *new_name);
 
+
 #ifdef _WIN32
 char *strcasestr(const char *a, const char *b);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]