aboutsummaryrefslogtreecommitdiffstats
path: root/mail/component-factory.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@HelixCode.com>2000-05-28 14:18:11 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-05-28 14:18:11 +0800
commit5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871 (patch)
tree445d86e047f7e1e04433283403e8feae1e6b37d6 /mail/component-factory.c
parentd11f78c349719e66a6eb569f6f1a65d268a6dec4 (diff)
downloadgsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.tar
gsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.tar.gz
gsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.tar.bz2
gsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.tar.lz
gsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.tar.xz
gsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.tar.zst
gsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.zip
vfolder gui! So you can define them,k they show up in the list (well,
after a restart), but they always come up empty - doesn't search any folders yet. 2000-05-27 Not Zed <NotZed@HelixCode.com> * Makefile.am (SHELL_OBJS): Include mail storage so we can initialise folders. * component-factory.c (create_test_storage): Parses vfolder defintions and adds them to the storage. Definetly needs more work. * folder-browser-factory.c (control_activate): Add the VFolder druid menu item. (control_deactivate): And remove it. * mail-ops.c (vfolder_editor_clicked): For editing vfolder definitions (rather like filters, oddly enough :). Tries to update the shell but it doesn't seem to work properly - requires a mail component restart to take effect. * folder-browser.c (folder_browser_load_folder): Handle vfolder: urls' appropriately and map to camel. Still needs a way to tell the vfolder what folders to search! (all vfolders come up empty!). svn path=/trunk/; revision=3241
Diffstat (limited to 'mail/component-factory.c')
-rw-r--r--mail/component-factory.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/mail/component-factory.c b/mail/component-factory.c
index 5983c4548a..749fc3c080 100644
--- a/mail/component-factory.c
+++ b/mail/component-factory.c
@@ -27,12 +27,18 @@
#include <bonobo.h>
+#include "Evolution.h"
+#include "evolution-storage.h"
+
#include "evolution-shell-component.h"
#include "folder-browser.h"
#include "mail.h" /* YUCK FIXME */
+#include "filter/filter-driver.h"
#include "component-factory.h"
+static void create_test_storage (EvolutionShellComponent *shell_component);
+
#ifdef USING_OAF
#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
@@ -65,6 +71,10 @@ create_view (EvolutionShellComponent *shell_component,
g_assert (folder_browser_widget != NULL);
g_assert (IS_FOLDER_BROWSER (folder_browser_widget));
+ /* dum de dum, hack to let the folder browser know the storage its in */
+ gtk_object_set_data((GtkObject *)folder_browser_widget, "e-storage",
+ gtk_object_get_data((GtkObject *)shell_component, "e-storage"));
+
/* FIXME: This never fails. :-/ */
folder_browser_set_uri (FOLDER_BROWSER (folder_browser_widget), physical_uri);
@@ -76,6 +86,8 @@ owner_set_cb (EvolutionShellComponent *shell_component,
Evolution_Shell shell_interface)
{
g_print ("evolution-mail: Yeeeh! We have an owner!\n"); /* FIXME */
+
+ create_test_storage (shell_component);
}
@@ -110,3 +122,75 @@ component_factory_init (void)
exit (1);
}
}
+
+static void
+create_test_storage (EvolutionShellComponent *shell_component)
+{
+ Evolution_Shell corba_shell;
+ EvolutionStorage *storage;
+
+ corba_shell = evolution_shell_component_get_owner (shell_component);
+ if (corba_shell == CORBA_OBJECT_NIL) {
+ g_warning ("We have no shell!?");
+ return;
+ }
+
+ storage = evolution_storage_new ("storage_name");
+ if (evolution_storage_register_on_shell (storage, corba_shell)
+ != EVOLUTION_STORAGE_OK) {
+ g_warning ("Cannot register storage");
+ return;
+ }
+
+ /* save the storage for later */
+ gtk_object_set_data((GtkObject *)shell_component, "e-storage", storage);
+
+ /* this is totally not the way we want to do this - but the
+ filter stuff needs work before we can remove it */
+ {
+ FilterDriver *fe;
+ int i, count;
+ char *user, *system;
+ extern char *evolution_dir;
+
+ fe = filter_driver_new();
+ user = g_strdup_printf ("%s/vfolders.xml", evolution_dir);
+ system = g_strdup_printf("%s/evolution/vfoldertypes.xml", EVOLUTION_DATADIR);
+ filter_driver_set_rules(fe, system, user);
+ g_free(user);
+ g_free(system);
+ count = filter_driver_rule_count(fe);
+ for (i=0;i<count;i++) {
+ struct filter_option *fo;
+ GString *query;
+ struct filter_desc *desc = NULL;
+ char *desctext, descunknown[64];
+ char *name;
+
+ fo = filter_driver_rule_get(fe, i);
+ if (fo == NULL)
+ continue;
+ query = g_string_new("");
+ if (fo->description)
+ desc = fo->description->data;
+ if (desc)
+ desctext = desc->data;
+ else {
+ sprintf(descunknown, "volder-%p", fo);
+ desctext = descunknown;
+ }
+ g_string_sprintf(query, "vfolder:/%s/vfolder/%s?", evolution_dir, desctext);
+ filter_driver_expand_option(fe, query, NULL, fo);
+ name = g_strdup_printf("/%s", desctext);
+ printf("Adding new vfolder: %s\n", query->str);
+ evolution_storage_new_folder (storage, name,
+ "mail",
+ query->str,
+ name+1);
+ g_string_free(query, TRUE);
+ g_free(name);
+ }
+ gtk_object_unref((GtkObject *)fe);
+ }
+}
+