diff options
author | Not Zed <NotZed@HelixCode.com> | 2000-05-28 14:18:11 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2000-05-28 14:18:11 +0800 |
commit | 5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871 (patch) | |
tree | 445d86e047f7e1e04433283403e8feae1e6b37d6 /mail/component-factory.c | |
parent | d11f78c349719e66a6eb569f6f1a65d268a6dec4 (diff) | |
download | gsoc2013-evolution-5b887fe6dc36d6ec21c8d86af60d29b7cbbbc871.tar.gz 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.c | 84 |
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); + } +} + |