diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 9 | ||||
-rw-r--r-- | mail/component-factory.c | 84 | ||||
-rw-r--r-- | mail/mail-config-gui.c | 11 |
3 files changed, 26 insertions, 78 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 5b165ed3c2..7e7a873d8e 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,12 @@ +2000-08-30 Peter Williams <peterw@helixcode.com> + + * mail-config-gui.c (do_test_service): Explicitly connect to + the service again. + + * component-factory.c (mail_load_storages): Now that + camel_service_get_provider exists, use it to make this function + much simpler. + 2000-08-29 Peter Williams <peterw@helixcode.com> * folder-browser.c (folder_browser_new): Ref the Evolution_Shell. diff --git a/mail/component-factory.c b/mail/component-factory.c index 47153ad530..08dd3f73fc 100644 --- a/mail/component-factory.c +++ b/mail/component-factory.c @@ -202,95 +202,36 @@ void mail_load_storages (Evolution_Shell corba_shell, GSList *sources) { CamelException ex; - GList *providers; - GSList *iter; MailConfigService *svc; - GPtrArray *protos; - int i; + GSList *iter; camel_exception_init (&ex); - protos = g_ptr_array_new(); - - /* First, open all the storages so that camel - * loads only the providers that we're going - * to need. - * - * We don't open the storage per se but we - * slurp its protocol so that we don't try - * to connect to it just yet. - * - * We remember the protocol associated with - * each URI for the second pass. + + /* Load each service (don't connect!). Check its provider and + * see if this belongs in the shell's folder list. If so, add + * it. */ - + for (iter = sources; iter; iter = iter->next) { CamelService *temp; - gchar *p; - gchar *proto; + CamelProvider *prov = NULL; svc = (MailConfigService *) iter->data; if (svc->url == NULL || svc->url[0] == '\0') continue; - p = strchr (svc->url, ':'); - if (!p || *p == '\0') { - g_warning ("Bad url (no protocol): %s", svc->url); - continue; - } - - p++; /* we're on the char after the colon */ - - proto = g_strndup (svc->url, p - svc->url); - g_ptr_array_add (protos, proto); - - temp = camel_session_get_service (session, proto, + temp = camel_session_get_service (session, svc->url, CAMEL_PROVIDER_STORE, &ex); if (temp == NULL) { /* FIXME: real error dialog */ g_warning ("couldn't get service %s: %s\n", svc->url, camel_exception_get_description (&ex)); - } else - camel_object_unref (CAMEL_OBJECT (temp)); - } - - /* Okay. All the providers we need are loaded. - * Now get the list of them. - */ - - providers = camel_session_list_providers (session, FALSE); - - /* Now zip through the sources a second time. This time - * we check to see if its provider is a storage or not. - * If so, add it to the shell. - */ - - for (iter = sources, i = 0; iter; iter = iter->next, i++) { - CamelProvider *prov = NULL; - GList *prov_iter; - gchar *proto; - - svc = (MailConfigService *) iter->data; - - proto = g_ptr_array_index (protos, i); - - /* find its provider */ - for (prov_iter = providers; prov_iter; prov_iter = prov_iter->next) { - CamelProvider *thisone = (CamelProvider *) prov_iter->data; - - if (!g_strncasecmp (proto, thisone->protocol, strlen (thisone->protocol))) { - prov = thisone; - break; - } - } - - g_free (proto); - - if (prov == NULL) { - g_warning ("No provider for loaded URL \"%s\"?", svc->url); continue; } + prov = camel_service_get_provider (temp); + /* FIXME: this case is ambiguous for things like the mbox provider, * which can really be a spool (/var/spool/mail/user) or a storage * (~/mail/, eg). That issue can't be resolved on the provider @@ -306,10 +247,9 @@ mail_load_storages (Evolution_Shell corba_shell, GSList *sources) camel_exception_get_description (&ex)); } } - } - g_ptr_array_free (protos, TRUE); - camel_exception_clear (&ex); + camel_object_unref (CAMEL_OBJECT (temp)); + } } void diff --git a/mail/mail-config-gui.c b/mail/mail-config-gui.c index e64e7a15be..8a007dc1c1 100644 --- a/mail/mail-config-gui.c +++ b/mail/mail-config-gui.c @@ -2266,15 +2266,14 @@ static void do_test_service (gpointer in_data, gpointer op_data, CamelException service = camel_session_get_service (session, input->url, input->type, ex); - + if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { data->success = FALSE; - /*} else if (camel_service_connect (service, ex)) { - *camel_service_disconnect (service, ex); - *data->success = TRUE; - */ + } else if (camel_service_connect (service, ex)) { + camel_service_disconnect (service, ex); + data->success = TRUE; } else { - data->success = TRUE; + data->success = FALSE; } camel_object_unref (CAMEL_OBJECT (service)); |