aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
Diffstat (limited to 'mail')
-rw-r--r--mail/ChangeLog5
-rw-r--r--mail/component-factory.c83
-rw-r--r--mail/folder-browser.c12
3 files changed, 85 insertions, 15 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index f667f7524f..4d647f134d 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,8 @@
+2000-06-20 Jeffrey Stedfast <fejj@helixcode.com>
+
+ * component-factory.c (create_imap_storage): Now creates the IMAP
+ storage (listing subfolders and such)
+
2000-06-19 Dan Winship <danw@helixcode.com>
* mail-format.c (find_preferred_alternative): add an option to
diff --git a/mail/component-factory.c b/mail/component-factory.c
index 30658a3596..a12a7f8c58 100644
--- a/mail/component-factory.c
+++ b/mail/component-factory.c
@@ -27,6 +27,8 @@
#include <bonobo.h>
+#include "camel.h"
+
#include "Evolution.h"
#include "evolution-storage.h"
@@ -39,7 +41,7 @@
#include "component-factory.h"
static void create_vfolder_storage (EvolutionShellComponent *shell_component);
-/*static void create_imap_storage (EvolutionShellComponent *shell_component);*/
+static void create_imap_storage (EvolutionShellComponent *shell_component);
#ifdef USING_OAF
#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
@@ -83,8 +85,8 @@ create_view (EvolutionShellComponent *shell_component,
browsers = g_list_prepend (browsers, folder_browser_widget);
/* dum de dum, hack to let the folder browser know the storage its in */
- gtk_object_set_data(GTK_OBJECT (folder_browser_widget), "e-storage",
- gtk_object_get_data(GTK_OBJECT (shell_component), "e-storage"));
+ gtk_object_set_data (GTK_OBJECT (folder_browser_widget), "e-storage",
+ gtk_object_get_data(GTK_OBJECT (shell_component), "e-storage"));
*control_return = control;
@@ -104,9 +106,7 @@ create_folder (EvolutionShellComponent *shell_component,
CORBA_exception_init (&ev);
- Evolution_ShellComponentListener_report_result (listener,
- Evolution_ShellComponentListener_OK,
- &ev);
+ Evolution_ShellComponentListener_report_result (listener, Evolution_ShellComponentListener_OK, &ev);
CORBA_exception_free (&ev);
}
@@ -119,6 +119,7 @@ owner_set_cb (EvolutionShellComponent *shell_component,
g_print ("evolution-mail: Yeeeh! We have an owner!\n"); /* FIXME */
create_vfolder_storage (shell_component);
+ create_imap_storage (shell_component);
}
static void
@@ -245,28 +246,86 @@ create_vfolder_storage (EvolutionShellComponent *shell_component)
}
}
-#if 0
static void
create_imap_storage (EvolutionShellComponent *shell_component)
{
+ /* FIXME: KLUDGE! */
+ extern gchar *evolution_dir;
Evolution_Shell corba_shell;
EvolutionStorage *storage;
+ char *path, *source, *server, *p;
+ CamelStore *store;
+ CamelFolder *folder;
+ CamelException *ex;
+ GPtrArray *lsub;
+ int i, max;
+
+ path = g_strdup_printf ("=%s/config=/mail/source", evolution_dir);
+ source = gnome_config_get_string (path);
+ g_free (path);
+
+ if (strncasecmp (source, "imap://", 7))
+ return;
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 ("IMAP Folders");
+
+ if (!(server = strchr (source, '@')))
+ return;
+ server++;
+ for (p = server; *p && *p != '/'; p++);
+
+ server = g_strndup (server, (gint)(p - server));
+
+ storage = evolution_storage_new (server);
+ g_free (server);
+
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(GTK_OBJECT (shell_component), "e-storage", storage);
+ gtk_object_set_data (GTK_OBJECT (shell_component), "e-storage", storage);
+
+ ex = camel_exception_new ();
+
+ store = camel_session_get_store (session, source, ex);
+ if (!store) {
+ goto cleanup;
+ }
+
+ camel_service_connect (CAMEL_SERVICE (store), ex);
+ if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) {
+ goto cleanup;
+ }
+
+ folder = camel_store_get_root_folder (store, ex);
+ if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) {
+ goto cleanup;
+ }
+
+ /* we need a way to set the namespace */
+ lsub = camel_folder_get_subfolder_names (folder, ex);
+
+ evolution_storage_new_folder (storage, "/INBOX", "mail", source, "description");
+
+ max = lsub->len;
+ fprintf (stderr, "\n************* We have %d folders\n\n", max + 1);
+ for (i = 0; i < max; i++) {
+ char *path;
- evolution_storage_new_folder (storage, "name", "mail", "some string or other", "description");
+ path = g_strdup_printf ("/%s", (char *)lsub->pdata[i]);
+ g_print ("Adding %s\n", path);
+ evolution_storage_new_folder (storage, path, "mail", source, "description");
+ }
+
+ cleanup:
+ camel_exception_free (ex);
}
-#endif
+
+
+
diff --git a/mail/folder-browser.c b/mail/folder-browser.c
index 3a94659423..2831f8bc24 100644
--- a/mail/folder-browser.c
+++ b/mail/folder-browser.c
@@ -102,13 +102,19 @@ folder_browser_load_folder (FolderBrowser *fb, const char *name)
} else if (!strncmp(name, "imap:", 5)) {
/* uhm, I'm just guessing here - this code might be wrong */
- fprintf(stderr, "\n*** name = %s ***\n\n", name);
+ fprintf (stderr, "\n****** name = %s ******\n\n", name);
store = camel_session_get_store (session, name, ex);
if (store) {
char *folder_name;
- folder_name = name += 5;
- new_folder = camel_store_get_folder (store, folder_name, TRUE, ex);
+ folder_name = strstr (name, "//");
+ if (folder_name) {
+ for (folder_name += 2; *folder_name && *folder_name != '/'; folder_name++);
+ if (*folder_name) {
+ folder_name++;
+ new_folder = camel_store_get_folder (store, folder_name, TRUE, ex);
+ }
+ }
}
} else if (!strncmp(name, "file:", 5)) {
/* Change "file:" to "mbox:". */