aboutsummaryrefslogtreecommitdiffstats
path: root/executive-summary/test-service
diff options
context:
space:
mode:
authorIain Holmes <iain@src.gnome.org>2000-11-22 08:34:39 +0800
committerIain Holmes <iain@src.gnome.org>2000-11-22 08:34:39 +0800
commitf69d5ec14310f4903a8b88224f7c82cfa1de014a (patch)
treedc66bdbfc7f7859e5d4ab33dc71354da56725fcb /executive-summary/test-service
parent615a467b605dfbbdbab66d6edd64f8c298993397 (diff)
downloadgsoc2013-evolution-f69d5ec14310f4903a8b88224f7c82cfa1de014a.tar
gsoc2013-evolution-f69d5ec14310f4903a8b88224f7c82cfa1de014a.tar.gz
gsoc2013-evolution-f69d5ec14310f4903a8b88224f7c82cfa1de014a.tar.bz2
gsoc2013-evolution-f69d5ec14310f4903a8b88224f7c82cfa1de014a.tar.lz
gsoc2013-evolution-f69d5ec14310f4903a8b88224f7c82cfa1de014a.tar.xz
gsoc2013-evolution-f69d5ec14310f4903a8b88224f7c82cfa1de014a.tar.zst
gsoc2013-evolution-f69d5ec14310f4903a8b88224f7c82cfa1de014a.zip
Big patch. Evolution-services rewrite, services updated for new system,
Big patch. Evolution-services rewrite, services updated for new system, Fixes to Executive Summary and other things. See some changelogs svn path=/trunk/; revision=6644
Diffstat (limited to 'executive-summary/test-service')
-rw-r--r--executive-summary/test-service/GNOME_Evolution_Summary_rdf.oaf.in27
-rw-r--r--executive-summary/test-service/GNOME_Evolution_Summary_rdf.oafinfo27
-rw-r--r--executive-summary/test-service/GNOME_Evolution_Summary_test.oaf.in30
-rw-r--r--executive-summary/test-service/GNOME_Evolution_Summary_test.oafinfo30
-rw-r--r--executive-summary/test-service/Makefile.am20
-rw-r--r--executive-summary/test-service/main.c271
-rw-r--r--executive-summary/test-service/rdf-summary.c393
-rw-r--r--executive-summary/test-service/rdf-summary.oafinfo27
-rw-r--r--executive-summary/test-service/test-service.oafinfo30
9 files changed, 757 insertions, 98 deletions
diff --git a/executive-summary/test-service/GNOME_Evolution_Summary_rdf.oaf.in b/executive-summary/test-service/GNOME_Evolution_Summary_rdf.oaf.in
new file mode 100644
index 0000000000..327fd8de72
--- /dev/null
+++ b/executive-summary/test-service/GNOME_Evolution_Summary_rdf.oaf.in
@@ -0,0 +1,27 @@
+<oaf_info>
+
+<oaf_server iid="OAFIID:evolution-summary-component-factory:rdf-summary:8d7a395c-1036-4e54-8aa6-bd30fb5a1379"
+ type="exe"
+ location="rdf-summary">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME:GenericFactory:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Factory for the RDF summary."/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:evolution-summary-component:rdf-summary:65610e8c-7994-4cde-ab35-c907f35e37c0"
+ type="factory"
+ location="OAFIID:evolution-summary-component-factory:rdf-summary:8d7a395c-1036-4e54-8aa6-bd30fb5a1379">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Evolution:SummaryComponent:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="RDF Summary"/>
+</oaf_server>
+
+</oaf_info>
diff --git a/executive-summary/test-service/GNOME_Evolution_Summary_rdf.oafinfo b/executive-summary/test-service/GNOME_Evolution_Summary_rdf.oafinfo
new file mode 100644
index 0000000000..327fd8de72
--- /dev/null
+++ b/executive-summary/test-service/GNOME_Evolution_Summary_rdf.oafinfo
@@ -0,0 +1,27 @@
+<oaf_info>
+
+<oaf_server iid="OAFIID:evolution-summary-component-factory:rdf-summary:8d7a395c-1036-4e54-8aa6-bd30fb5a1379"
+ type="exe"
+ location="rdf-summary">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME:GenericFactory:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Factory for the RDF summary."/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:evolution-summary-component:rdf-summary:65610e8c-7994-4cde-ab35-c907f35e37c0"
+ type="factory"
+ location="OAFIID:evolution-summary-component-factory:rdf-summary:8d7a395c-1036-4e54-8aa6-bd30fb5a1379">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Evolution:SummaryComponent:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="RDF Summary"/>
+</oaf_server>
+
+</oaf_info>
diff --git a/executive-summary/test-service/GNOME_Evolution_Summary_test.oaf.in b/executive-summary/test-service/GNOME_Evolution_Summary_test.oaf.in
index dd169b8853..37fbbe9642 100644
--- a/executive-summary/test-service/GNOME_Evolution_Summary_test.oaf.in
+++ b/executive-summary/test-service/GNOME_Evolution_Summary_test.oaf.in
@@ -5,7 +5,7 @@
location="test-service">
<oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME:GenericFactory:1.0"/>
+ <item value="IDL:GNOME/GenericFactory:1.0"/>
</oaf_attribute>
<oaf_attribute name="description" type="string"
@@ -17,11 +17,37 @@
location="OAFIID:evolution-summary-component-factory:test-service:0ea887d5-622b-4b8c-b525-18aa1cbe18a6">
<oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution:SummaryComponent:1.0"/>
+ <item value="IDL:GNOME/Evolution:Summary:ComponentFactory:1.0"/>
</oaf_attribute>
<oaf_attribute name="description" type="string"
value="Test service"/>
</oaf_server>
+<!-- This does not work
+<oaf_server iid="OAFIID:evolution-summary-component-factory:test-bonobo-service:b6da2ad2-1fbb-4539-93f9-038b1702810e"
+ type="exe"
+ location="test-bonobo-service">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME:GenericFactory:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Factory for the test bonobo component."/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:evolution-summary-component:test-bonobo-service:d3cb3ed6-a654-4337-8aa0-f443751d6d1b"
+ type="factory"
+ location="OAFIID:evolution-summary-component-factory:test-bonobo-service:b6da2ad2-1fbb-4539-93f9-038b1702810e">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Evolution:SummaryComponent:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Test bonobo service"/>
+</oaf_server>
+
+-->
</oaf_info>
diff --git a/executive-summary/test-service/GNOME_Evolution_Summary_test.oafinfo b/executive-summary/test-service/GNOME_Evolution_Summary_test.oafinfo
index dd169b8853..37fbbe9642 100644
--- a/executive-summary/test-service/GNOME_Evolution_Summary_test.oafinfo
+++ b/executive-summary/test-service/GNOME_Evolution_Summary_test.oafinfo
@@ -5,7 +5,7 @@
location="test-service">
<oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME:GenericFactory:1.0"/>
+ <item value="IDL:GNOME/GenericFactory:1.0"/>
</oaf_attribute>
<oaf_attribute name="description" type="string"
@@ -17,11 +17,37 @@
location="OAFIID:evolution-summary-component-factory:test-service:0ea887d5-622b-4b8c-b525-18aa1cbe18a6">
<oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution:SummaryComponent:1.0"/>
+ <item value="IDL:GNOME/Evolution:Summary:ComponentFactory:1.0"/>
</oaf_attribute>
<oaf_attribute name="description" type="string"
value="Test service"/>
</oaf_server>
+<!-- This does not work
+<oaf_server iid="OAFIID:evolution-summary-component-factory:test-bonobo-service:b6da2ad2-1fbb-4539-93f9-038b1702810e"
+ type="exe"
+ location="test-bonobo-service">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME:GenericFactory:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Factory for the test bonobo component."/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:evolution-summary-component:test-bonobo-service:d3cb3ed6-a654-4337-8aa0-f443751d6d1b"
+ type="factory"
+ location="OAFIID:evolution-summary-component-factory:test-bonobo-service:b6da2ad2-1fbb-4539-93f9-038b1702810e">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Evolution:SummaryComponent:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Test bonobo service"/>
+</oaf_server>
+
+-->
</oaf_info>
diff --git a/executive-summary/test-service/Makefile.am b/executive-summary/test-service/Makefile.am
index e294a3ea49..56333302d7 100644
--- a/executive-summary/test-service/Makefile.am
+++ b/executive-summary/test-service/Makefile.am
@@ -15,7 +15,25 @@ test_service_LDADD = \
$(top_builddir)/executive-summary/evolution-services/libevolution-services.la \
$(BONOBO_VFS_GNOME_LIBS) \
$(EXTRA_GNOME_LIBS)
+
+#test_bonobo_service_SOURCES = \
+# test-bonobo.c
+
+#test_bonobo_service_LDADD = \
+# $(top_builddir)/executive-summary/evolution-services/libevolution-services.la \
+# $(BONOBO_VFS_GNOME_LIBS) \
+# $(EXTRA_GNOME_LIBS)
+
+#rdf_summary_SOURCES = \
+# rdf-summary.c
+
+#rdf_summary_LDADD = \
+# $(top_builddir)/executive-summary/evolution-services/libevolution-services.la \
+# $(BONOBO_VFS_GNOME_LIBS) \
+# $(EXTRA_GNOME_LIBS)
+
oafdir = $(datadir)/oaf
-oaf_DATA = test-service.oafinfo
+oaf_DATA = test-service.oafinfo \
+ rdf-summary.oafinfo
EXTRA_DIST = $(oaf_DATA)
diff --git a/executive-summary/test-service/main.c b/executive-summary/test-service/main.c
index 75bbc3199b..6a646adecd 100644
--- a/executive-summary/test-service/main.c
+++ b/executive-summary/test-service/main.c
@@ -30,131 +30,220 @@
#include <bonobo.h>
#include <evolution-services/executive-summary-component.h>
-#include <evolution-services/executive-summary-component-view.h>
+#include <evolution-services/executive-summary-html-view.h>
#include <liboaf/liboaf.h>
-static int running_views = 0;
+enum {
+ PROPERTY_TITLE,
+ PROPERTY_ICON
+};
-struct userdata {
- int i;
+struct _UserData {
+ char *title;
+ char *icon;
};
+typedef struct _UserData UserData;
+
+static int running_views = 0;
#define TEST_SERVICE_ID "OAFIID:evolution-summary-component-factory:test-service:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
static BonoboGenericFactory *factory = NULL;
-/* The "do something interesting" function */
-int
-add_one (ExecutiveSummaryComponentView *view)
+/* PersistStream callbacks */
+static void
+load_from_stream (BonoboPersistStream *ps,
+ Bonobo_Stream stream,
+ Bonobo_Persist_ContentType type,
+ gpointer data,
+ CORBA_Environment *ev)
{
- char *html;
- struct userdata *ud;
+ char *str;
- /* Get the user data from the view */
- ud = gtk_object_get_data (GTK_OBJECT (view), "timer-data");
- if (ud == NULL) {
- g_warning ("No user data");
- return FALSE;
+ if (*type && g_strcasecmp (type, "application/x-test-service") != 0) {
+ CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
+ ex_Bonobo_Persist_WrongDataType, NULL);
+ return;
}
-
- /* Generate the new html */
- html = g_strdup_printf ("Since you started this service<br>"
- "<center>%d</center><br>seconds have passed.", ud->i);
-
- /* Change the html on the view
- which will tell the Executive Summary that something needs updating */
- executive_summary_component_view_set_html (view, html);
-
- /* executive_summary_component_view_set_html () makes a copy of the HTML
- passed into it, so we don't need to keep it around */
- g_free (html);
-
- /* Do something "fun" */
- ud->i++;
-
- return TRUE;
+
+ bonobo_stream_client_read_string (stream, &str, ev);
+ if (ev->_major != CORBA_NO_EXCEPTION || str == NULL) {
+ CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
+ ex_Bonobo_Persist_WrongDataType, NULL);
+ return;
+ }
+
+ g_print ("Restoring with :%s\n", str);
+ g_free (str);
}
-void
-view_destroyed (GtkObject *object,
- gpointer data)
+static void
+save_to_stream (BonoboPersistStream *ps,
+ const Bonobo_Stream stream,
+ Bonobo_Persist_ContentType type,
+ gpointer data,
+ CORBA_Environment *ev)
{
- ExecutiveSummaryComponentView *view;
- struct userdata *ud;
- int id;
-
- /* Free the user data for this view*/
- ud = gtk_object_get_data (object, "timer-data");
- gtk_object_set_data (object, "timer-data", NULL);
+
+ if (*type && g_strcasecmp (type, "application/x-test-service") != 0) {
+ CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
+ ex_Bonobo_Persist_WrongDataType, NULL);
+ return;
+ }
+
+ bonobo_stream_client_printf (stream, TRUE, ev, "Yo yo yo");
+ if (ev->_major != CORBA_NO_EXCEPTION)
+ return;
+}
+
+static Bonobo_Persist_ContentTypeList *
+content_types (BonoboPersistStream *ps,
+ void *closure,
+ CORBA_Environment *ev)
+{
+ return bonobo_persist_generate_content_types (1, "application/x-test-service");
+}
+
+/* PropertyControl callback */
+
+/* Propertybag set/get functions */
+static void
+set_property (BonoboPropertyBag *bag,
+ const BonoboArg *arg,
+ guint arg_id,
+ gpointer user_data)
+{
+ switch (arg_id) {
+ case PROPERTY_TITLE:
+ g_print ("Setting title.\n");
+ break;
+
+ case PROPERTY_ICON:
+ g_print ("Setting icon.\n");
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
+get_property (BonoboPropertyBag *bag,
+ BonoboArg *arg,
+ guint arg_id,
+ gpointer user_data)
+{
+ UserData *ud = (UserData *) user_data;
+
+ switch (arg_id) {
+ case PROPERTY_TITLE:
+ BONOBO_ARG_SET_STRING (arg, ud->title);
+ break;
+
+ case PROPERTY_ICON:
+ BONOBO_ARG_SET_STRING (arg, ud->icon);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
+component_destroyed (GtkObject *object,
+ gpointer data)
+{
+ UserData *ud = (UserData *) ud;
+ /* Free the UserData structure */
+ g_free (ud->title);
+ g_free (ud->icon);
g_free (ud);
-
- /* Remove one running view */
+
running_views--;
-
- /* If there are no running views left, quit */
+
+ g_print ("Destroy!\n");
if (running_views <= 0)
gtk_main_quit ();
}
-/* Create the view:
- HTML only */
-static void
-create_view (ExecutiveSummaryComponent *component,
- ExecutiveSummaryComponentView *view,
+static BonoboObject *
+create_view (ExecutiveSummaryComponentFactory *_factory,
void *closure)
{
- char *html = "Since you started this service<br><center>0</center><br>seconds have passed.";
- struct userdata *ud;
-
- g_print ("In: %s\n", __FUNCTION__);
- /* Create the userdata structure */
- ud = g_new (struct userdata, 1);
-
- ud->i = 1;
- executive_summary_component_view_construct (view, component, NULL,
- html, "The Magic Counter",
- "gnome-clock.png");
- g_print ("Out: %s\n", __FUNCTION__);
- /* Set the user data on the object */
- gtk_object_set_data (GTK_OBJECT (view), "timer-data", ud);
+ BonoboObject *component, *view, *bag, *stream;
+ UserData *ud;
+
+ /* Create the component object */
+ component = executive_summary_component_new ();
+
+ /* Create the UserData structure and fill it */
+ ud = g_new (UserData, 1);
+ ud->title = g_strdup ("Hello World!");
+ ud->icon = g_strdup ("apple-red.png");
+
+ gtk_signal_connect (GTK_OBJECT (component), "destroy",
+ GTK_SIGNAL_FUNC (component_destroyed), ud);
+
+ /* Now create the aggregate objects. For a "service"
+ either a Summary::HTMLView or Bonobo::Control are required.
+ Other supported agreggate objects are
+ PersistStream: For saving and restoring the component.
+ PropertyBag: To set the icon and title and other properties
+ PropertyControl: To produce a control to configure the service.
- /* Connect the the destroyed signal to find out
- when the view is destroyed */
- gtk_signal_connect (GTK_OBJECT (view), "destroy",
- GTK_SIGNAL_FUNC (view_destroyed), NULL);
+ To aggregate the objects
+ i) Create the objects using their creation functions
+ ii) Use bonobo_object_add_interface ().
+ */
- /* Increase the number of running views */
- running_views++;
+ /* The Summary::HTMLView interface */
+ view = executive_summary_html_view_new ();
+ /* Set the default HTML */
+ executive_summary_html_view_set_html (EXECUTIVE_SUMMARY_HTML_VIEW (view),
+ "<B>Hello World</b>");
- /* Do something "interesting" once a second */
- gtk_timeout_add (1000, add_one, view);
-}
+ bonobo_object_add_interface (component, view);
-static void
-configure (ExecutiveSummaryComponent *component,
- void *closure)
-{
- GtkWidget *window, *label;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- label = gtk_label_new ("This is a configuration dialog.\nNo it really is");
-
- gtk_container_add (GTK_CONTAINER (window), label);
- gtk_widget_show_all (window);
+ /* Add the Bonobo::PropertyBag interface */
+ bag = bonobo_property_bag_new (get_property, set_property, ud);
+ /* Add the properties. There should be 2:
+ window_title: For the window title.
+ window_icon: For the window icon.
+ */
+ bonobo_property_bag_add (BONOBO_PROPERTY_BAG (bag),
+ "window_title", PROPERTY_TITLE,
+ BONOBO_ARG_STRING,
+ NULL,
+ "The title of this components window", 0);
+ bonobo_property_bag_add (BONOBO_PROPERTY_BAG (bag),
+ "window_icon", PROPERTY_ICON,
+ BONOBO_ARG_STRING,
+ NULL,
+ "The icon for this component's window", 0);
+
+ /* Now add the interface */
+ bonobo_object_add_interface (component, bag);
+
+
+ /* Add the Bonobo::PersistStream interface */
+ stream = bonobo_persist_stream_new (load_from_stream, save_to_stream,
+ NULL, content_types, NULL);
+ bonobo_object_add_interface (component, stream);
+
+ /* Return the ExecutiveSummaryComponent object */
+ return component;
}
static BonoboObject *
-factory_fn (BonoboGenericFactory *_factory,
+factory_fn (BonoboGenericFactory *generic_factory,
void *closure)
{
- ExecutiveSummaryComponent *component;
+ BonoboObject *_factory;
- /* Create an executive summary component for this factory */
- component = executive_summary_component_new (create_view,
- configure,
- NULL);
- return BONOBO_OBJECT (component);
+ /* Create an executive summary component factory */
+ _factory = executive_summary_component_factory_new (create_view, NULL);
+ return _factory;
}
void
diff --git a/executive-summary/test-service/rdf-summary.c b/executive-summary/test-service/rdf-summary.c
new file mode 100644
index 0000000000..b87c20a3c3
--- /dev/null
+++ b/executive-summary/test-service/rdf-summary.c
@@ -0,0 +1,393 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* RDF viewer Evolution Executive Summary Component.
+ * Bonoboised by Iain Holmes <iain@helixcode.com>
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * Based on code from Portaloo
+ * Channel retrieval tool
+ *
+ * (C) 1998 Alan Cox.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include <gnome.h>
+#include <bonobo.h>
+#include <gnome-xml/parser.h>
+
+#include <evolution-services/executive-summary-component.h>
+#include <evolution-services/executive-summary-component-view.h>
+#include <liboaf/liboaf.h>
+#include <libgnomevfs/gnome-vfs.h>
+
+int xmlSubstituteEntitiesDefaultValue = 1; /* DV thinks of everything */
+
+static int wipe_trackers = FALSE;
+static int running_views = 0;
+
+static BonoboGenericFactory *factory = NULL;
+#define RDF_SUMMARY_ID "OAFIID:evolution-summary-component-factory:rdf-summary:8d7a395c-1036-4e54-8aa6-bd30fb5a1379"
+
+/************ RDF Parser *******************/
+
+static char *
+layer_find (xmlNodePtr node,
+ char *match,
+ char *fail)
+{
+ while (node!=NULL) {
+#ifdef RDF_DEBUG
+ xmlDebugDumpNode (stdout, node, 32);
+ printf("%s.\n", node->name);
+#endif
+ if (strcasecmp (node->name, match)==0) {
+ if (node->childs != NULL && node->childs->content != NULL) {
+ return node->childs->content;
+ } else {
+ return fail;
+ }
+ }
+ node = node->next;
+ }
+ return fail;
+}
+
+static char *
+layer_find_url (xmlNodePtr node,
+ char *match,
+ char *fail)
+{
+ char *p = layer_find (node, match, fail);
+ char *r = p;
+ static char *wb = NULL;
+ char *w;
+
+ if (wb) {
+ free (wb);
+ }
+
+ wb = w = malloc (3 * strlen (p));
+
+ if (w == NULL) {
+ fprintf(stderr, "Out of memory\n");
+ exit(1);
+ }
+
+ if (*r == ' ') r++; /* Fix UF bug */
+
+ while (*r) {
+ if (memcmp (r, "&amp;", 5) == 0) {
+ *w++ = '&';
+ r += 5;
+ continue;
+ }
+ if (memcmp (r, "&lt;", 4) == 0) {
+ *w++ = '<';
+ r += 4;
+ continue;
+ }
+ if (memcmp (r, "&gt;", 4) == 0) {
+ *w++ = '>';
+ r += 4;
+ continue;
+ }
+ if (*r == '"' || *r == ' '){
+ *w++ = '%';
+ *w++ = "0123456789ABCDEF"[*r/16];
+ *w++ = "0123456789ABCDEF"[*r&15];
+ r++;
+ continue;
+ }
+ *w++ = *r++;
+ }
+ *w = 0;
+ return wb;
+}
+
+static void
+tree_walk (xmlNodePtr root,
+ ExecutiveSummaryComponentView *view,
+ GString *html)
+{
+ xmlNodePtr walk;
+ xmlNodePtr rewalk = root;
+ xmlNodePtr channel = NULL;
+ xmlNodePtr image = NULL;
+ xmlNodePtr item[16];
+ int items = 0;
+ int limit = 10;
+ int i;
+ char *t;
+ char n[512];
+ char *tmp;
+
+ do {
+ walk = rewalk;
+ rewalk = NULL;
+
+ while (walk!=NULL){
+#ifdef RDF_DEBUG
+ printf ("%p, %s\n", walk, walk->name);
+#endif
+ if (strcasecmp (walk->name, "rdf") == 0) {
+ rewalk = walk->childs;
+ walk = walk->next;
+ continue;
+ }
+ if (strcasecmp (walk->name, "rss") == 0){
+ rewalk = walk->childs;
+ walk = walk->next;
+ continue;
+ }
+ /* This is the channel top level */
+#ifdef RDF_DEBUG
+ printf ("Top level '%s'.\n", walk->name);
+#endif
+ if (strcasecmp (walk->name, "channel") == 0) {
+ channel = walk;
+ rewalk = channel->childs;
+ }
+ if (strcasecmp (walk->name, "image") == 0) {
+ image = walk;
+ g_print ("Image\n");
+ }
+ if (strcasecmp (walk->name, "item") == 0 && items < 16) {
+ item[items++] = walk;
+ }
+ walk = walk->next;
+ }
+ }
+ while (rewalk);
+
+ if (channel == NULL) {
+ fprintf(stderr, "No channel definition.\n");
+ exit(1);
+ }
+
+ t = layer_find(channel->childs, "title", "No title");
+/* g_string_append (html, tmp); */
+ executive_summary_component_view_set_title (view, t);
+
+ tmp = g_strdup_printf ("%s",
+ layer_find(channel->childs, "description", ""));
+ g_string_append (html, tmp);
+ g_free (tmp);
+
+ if (image && !wipe_trackers) {
+ g_print ("URL: %s\n", layer_find_url (image->childs, "url",
+ "green-apple.png"));
+ executive_summary_component_view_set_icon (view,
+ layer_find_url
+ (image->childs,
+ "url", "apple-green.png"));
+ }
+
+ g_string_append (html, "<br clear=all><FONT size=\"-1\" face=\"helvetica\"><P><UL>\n");
+
+ for (i = 0; i < items; i++) {
+ char *p = layer_find (item[i]->childs, "title", "No information");
+
+ if(i == limit)
+ g_string_append (html, "--\n");
+ if (wipe_trackers) {
+ char *p = layer_find_url (item[i]->childs, "link", "");
+ char *x = strchr (p, '?');
+ unsigned char *r, *w;
+ int n;
+ if (x == NULL)
+ continue;
+ x++;
+ r = x;
+ w = x;
+ while (*r) {
+ if (*r == '+') {
+ *w++ = ' ';
+ } else if (*r == '%') {
+ sscanf (r+1, "%02x", &n);
+ *w++ = n;
+ r += 2;
+ } else {
+ *w++ = *r;
+ }
+ r++;
+ }
+ *w = 0;
+ tmp = g_strdup_printf ("<LI><A href=\"%s\">\n", x+4);
+ g_string_append (html, tmp);
+ g_free (tmp);
+ }
+ else {
+ tmp = g_strdup_printf ("<LI><A href=\"%s\">\n", layer_find_url(item[i]->childs, "link", ""));
+ g_string_append (html, tmp);
+ g_free (tmp);
+ }
+
+ tmp = g_strdup_printf ("%s\n</A>\n", p);
+ g_string_append (html, tmp);
+ g_free (tmp);
+ }
+ g_string_append (html, "</UL></FONT>\n");
+}
+
+/********* ExecutiveSummaryComponent section **************/
+static void
+view_destroyed (GtkObject *object,
+ gpointer data)
+{
+ running_views--;
+ if (running_views <= 0) {
+ gtk_main_quit ();
+ }
+}
+
+static int
+download (ExecutiveSummaryComponentView *view)
+{
+ GString *rdf;
+ GString *html;
+ char *xml;
+ GnomeVFSHandle *handle = NULL;
+ GnomeVFSResult result;
+ xmlDocPtr doc;
+ char *location;
+ int len = 0;
+
+ /* Download the RDF file here */
+ /* Then parse it */
+ /* The update it */
+
+ location = "/home/iain/gnotices.rdf";
+ result = gnome_vfs_open (&handle, location, GNOME_VFS_OPEN_READ);
+ if (result != GNOME_VFS_OK) {
+ char *emsg;
+
+ emsg = g_strdup_printf ("<b>Cannot open location:<br>%s</b>",
+ location);
+ executive_summary_component_view_set_html (view, emsg);
+ g_free (emsg);
+ return FALSE;
+ }
+
+ rdf = g_string_new ("");
+
+ while (1) {
+ char buffer[4096];
+ GnomeVFSFileSize size;
+
+ memset (buffer, 0x00, 4096);
+
+ result = gnome_vfs_read (handle, buffer, 4096, &size);
+ if (result != GNOME_VFS_OK && result != GNOME_VFS_ERROR_EOF) {
+ executive_summary_component_view_set_html (view,
+ "<b>Error reading data.</b>");
+ g_string_free (rdf, TRUE);
+ return FALSE;
+ }
+
+ if (size == 0) {
+ break;
+ }
+
+ rdf = g_string_append (rdf, buffer);
+ len += size;
+ }
+
+ gnome_vfs_close (handle);
+ xml = rdf->str;
+ g_string_free (rdf, FALSE);
+
+ doc = xmlParseMemory (xml, len);
+ if (doc == NULL) {
+ g_warning ("Unable to parse document.");
+ return FALSE;
+ }
+
+ g_free (xml);
+ html = g_string_new ("");
+
+ tree_walk (doc->root, view, html);
+ executive_summary_component_view_set_html (view, html->str);
+ g_string_free (html, TRUE);
+ return FALSE;
+}
+
+static void
+create_view (ExecutiveSummaryComponent *component,
+ ExecutiveSummaryComponentView *view,
+ void *closure)
+{
+ char *html = "<b>Loading RDF file. . .<br>Please wait</b>";
+
+ executive_summary_component_view_construct (view, component, NULL,
+ html, "Downloading",
+ "apple-green.png");
+ gtk_signal_connect (GTK_OBJECT (view), "destroy",
+ GTK_SIGNAL_FUNC (view_destroyed), NULL);
+ running_views++;
+ g_idle_add (download, view);
+}
+
+static BonoboObject *
+factory_fn (BonoboGenericFactory *_factory,
+ void *closure)
+{
+ ExecutiveSummaryComponent *component;
+
+ component = executive_summary_component_new (create_view, NULL);
+ return BONOBO_OBJECT (component);
+}
+
+static void
+factory_init (void)
+{
+ if (factory != NULL) {
+ return;
+ }
+
+ factory = bonobo_generic_factory_new (RDF_SUMMARY_ID, factory_fn, NULL);
+ if (factory == NULL) {
+ g_error ("Cannot initialize factory");
+ }
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ CORBA_ORB orb;
+
+ gnome_init_with_popt_table ("RDF-Summary", VERSION,
+ argc, argv, oaf_popt_options, 0, NULL);
+ orb = oaf_init (argc, argv);
+ gnome_vfs_init ();
+
+ if (bonobo_init (orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) {
+ g_error ("Could not initialize Bonobo");
+ }
+
+ factory_init ();
+ bonobo_main ();
+ return 0;
+
+#if 0
+ doc=xmlParseMemory(document, docp);
+
+ if(doc==NULL)
+ {
+ fprintf(stderr, "Unable to parse document.\n");
+ exit(1);
+ }
+
+ tree_walk(doc->root);
+
+ if(rename(buf, nam))
+ perror("rename");
+ return 0;
+#endif
+
+}
+
diff --git a/executive-summary/test-service/rdf-summary.oafinfo b/executive-summary/test-service/rdf-summary.oafinfo
new file mode 100644
index 0000000000..327fd8de72
--- /dev/null
+++ b/executive-summary/test-service/rdf-summary.oafinfo
@@ -0,0 +1,27 @@
+<oaf_info>
+
+<oaf_server iid="OAFIID:evolution-summary-component-factory:rdf-summary:8d7a395c-1036-4e54-8aa6-bd30fb5a1379"
+ type="exe"
+ location="rdf-summary">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME:GenericFactory:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Factory for the RDF summary."/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:evolution-summary-component:rdf-summary:65610e8c-7994-4cde-ab35-c907f35e37c0"
+ type="factory"
+ location="OAFIID:evolution-summary-component-factory:rdf-summary:8d7a395c-1036-4e54-8aa6-bd30fb5a1379">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Evolution:SummaryComponent:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="RDF Summary"/>
+</oaf_server>
+
+</oaf_info>
diff --git a/executive-summary/test-service/test-service.oafinfo b/executive-summary/test-service/test-service.oafinfo
index dd169b8853..37fbbe9642 100644
--- a/executive-summary/test-service/test-service.oafinfo
+++ b/executive-summary/test-service/test-service.oafinfo
@@ -5,7 +5,7 @@
location="test-service">
<oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME:GenericFactory:1.0"/>
+ <item value="IDL:GNOME/GenericFactory:1.0"/>
</oaf_attribute>
<oaf_attribute name="description" type="string"
@@ -17,11 +17,37 @@
location="OAFIID:evolution-summary-component-factory:test-service:0ea887d5-622b-4b8c-b525-18aa1cbe18a6">
<oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution:SummaryComponent:1.0"/>
+ <item value="IDL:GNOME/Evolution:Summary:ComponentFactory:1.0"/>
</oaf_attribute>
<oaf_attribute name="description" type="string"
value="Test service"/>
</oaf_server>
+<!-- This does not work
+<oaf_server iid="OAFIID:evolution-summary-component-factory:test-bonobo-service:b6da2ad2-1fbb-4539-93f9-038b1702810e"
+ type="exe"
+ location="test-bonobo-service">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME:GenericFactory:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Factory for the test bonobo component."/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:evolution-summary-component:test-bonobo-service:d3cb3ed6-a654-4337-8aa0-f443751d6d1b"
+ type="factory"
+ location="OAFIID:evolution-summary-component-factory:test-bonobo-service:b6da2ad2-1fbb-4539-93f9-038b1702810e">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Evolution:SummaryComponent:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Test bonobo service"/>
+</oaf_server>
+
+-->
</oaf_info>