aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-config-gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-config-gui.c')
-rw-r--r--mail/mail-config-gui.c138
1 files changed, 107 insertions, 31 deletions
diff --git a/mail/mail-config-gui.c b/mail/mail-config-gui.c
index eb199bca11..a3e69b81fc 100644
--- a/mail/mail-config-gui.c
+++ b/mail/mail-config-gui.c
@@ -34,6 +34,7 @@
#include "e-util/e-html-utils.h"
#include "mail.h"
+#include "mail-threads.h"
#include "mail-config.h"
#include "mail-config-gui.h"
@@ -171,6 +172,8 @@ typedef struct
} MailDialog;
/* private prototypes - these are ugly, rename some of them? */
+static void config_do_test_service (const char *url, CamelProviderType type);
+
static void html_size_req (GtkWidget *widget, GtkRequisition *requisition);
static GtkWidget *html_new (gboolean white);
static void put_html (GtkHTML *html, char *text);
@@ -264,6 +267,7 @@ error_dialog (GtkWidget *parent_finder, const char *fmt, ...)
g_free (msg);
}
+#if 0
static void
info_dialog (GtkWidget *parent_finder, const char *fmt, ...)
{
@@ -281,6 +285,7 @@ info_dialog (GtkWidget *parent_finder, const char *fmt, ...)
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
g_free (msg);
}
+#endif
/* Provider List */
static GSList *
@@ -725,41 +730,14 @@ service_page_item_auth_fill (MailDialogServicePage *page,
service_page_item_auth_activate (firstitem, spitem);
}
-static gboolean
+static void
service_acceptable (MailDialogServicePage *page)
{
- char *url = NULL;
- CamelService *service;
- CamelException *ex;
-
+ char *url;
+
url = service_page_get_url (page);
-
- ex = camel_exception_new ();
- camel_exception_clear (ex);
- service = camel_session_get_service (session, url,
- page->spitem->type, ex);
+ config_do_test_service (url, page->spitem->type);
g_free (url);
-
- if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
- goto error;
-
- if (camel_service_connect (service, ex)) {
- camel_service_disconnect (service, ex);
- camel_object_unref (CAMEL_OBJECT (service));
- camel_exception_free (ex);
-
- info_dialog (page->vbox, "Connection successful!");
-
- return TRUE;
- }
-
- gtk_object_unref (GTK_OBJECT (service));
-
- error:
- error_dialog (page->vbox, camel_exception_get_description (ex));
- camel_exception_free (ex);
-
- return FALSE;
}
static MailConfigService *
@@ -2164,3 +2142,101 @@ mail_config (void)
gtk_object_unref (GTK_OBJECT (gui));
g_free (dialog);
}
+
+/* ************************************************************************ */
+
+typedef struct test_service_input_s {
+ gchar *url;
+ CamelProviderType type;
+} test_service_input_t;
+
+typedef struct test_service_data_s {
+ gboolean success;
+} test_service_data_t;
+
+static gchar *describe_test_service (gpointer in_data, gboolean gerund);
+static void setup_test_service (gpointer in_data, gpointer op_data, CamelException *ex);
+static void do_test_service (gpointer in_data, gpointer op_data, CamelException *ex);
+static void cleanup_test_service (gpointer in_data, gpointer op_data, CamelException *ex);
+
+static gchar *describe_test_service (gpointer in_data, gboolean gerund)
+{
+ test_service_input_t *input = (test_service_input_t *) in_data;
+
+ if (gerund) {
+ return g_strdup_printf ("Testing \"%s\"", input->url);
+ } else {
+ return g_strdup_printf ("Test connection to \"%s\"", input->url);
+ }
+}
+
+static void setup_test_service (gpointer in_data, gpointer op_data, CamelException *ex)
+{
+ test_service_input_t *input = (test_service_input_t *) in_data;
+ test_service_data_t *data = (test_service_data_t *) op_data;
+
+ if (!input->url) {
+ camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM,
+ "No URL was provided to test");
+ return;
+ }
+
+ data->success = FALSE;
+}
+
+static void do_test_service (gpointer in_data, gpointer op_data, CamelException *ex)
+{
+ test_service_input_t *input = (test_service_input_t *) in_data;
+ test_service_data_t *data = (test_service_data_t *) op_data;
+
+ CamelService *service;
+
+ 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 {
+ data->success = FALSE;
+ }
+
+ camel_object_unref (CAMEL_OBJECT (service));
+}
+
+static void cleanup_test_service (gpointer in_data, gpointer op_data, CamelException *ex)
+{
+ test_service_input_t *input = (test_service_input_t *) in_data;
+ test_service_data_t *data = (test_service_data_t *) op_data;
+
+ GtkWidget *dlg;
+
+ if (data->success) {
+ dlg = gnome_ok_dialog (_("The connection was successful!"));
+ gnome_dialog_run_and_close (GNOME_DIALOG (dlg));
+ }
+
+ g_free (input->url);
+}
+
+static const mail_operation_spec op_test_service = {
+ describe_test_service,
+ sizeof (test_service_data_t),
+ setup_test_service,
+ do_test_service,
+ cleanup_test_service
+};
+
+static void
+config_do_test_service (const char *url, CamelProviderType type)
+{
+ test_service_input_t *input;
+
+ input = g_new (test_service_input_t, 1);
+ input->url = g_strdup (url);
+ input->type = type;
+
+ mail_operation_queue (&op_test_service, input, TRUE);
+}