* Do not try to select accounts in Fremantle
[modest] / src / gnome / modest-account-assistant.c
index ad7e7de..197fd05 100644 (file)
@@ -37,8 +37,9 @@
 #include "modest-text-utils.h"
 #include "modest-runtime.h"
 #include "modest-utils.h"
-#include <modest-protocol-info.h>
+#include "modest-protocol-registry.h"
 #include "modest-platform.h"
+#include "gnome/modest-gnome-utils.h"
 
 #include <string.h>
 
@@ -165,16 +166,26 @@ on_assistant_changed(GtkWidget* widget, ModestAccountAssistant* assistant)
 static void
 on_incoming_security_changed(GtkWidget* widget, ModestAccountAssistant* assistant)
 {
-       ModestAccountAssistantPrivate* priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(assistant);
-       ModestConnectionProtocol protocol_security_incoming;
+       ModestAccountAssistantPrivate* priv;
+       ModestProtocolType protocol_id;
+       ModestProtocol *protocol_security_incoming;
        const gchar *name;
+       ModestProtocolRegistry *registry;
+       gboolean is_secure;
 
-       g_return_if_fail (priv != NULL);
-       name = (const gchar *) modest_combo_box_get_active_id  (MODEST_COMBO_BOX (priv->store_security_combo));
-       protocol_security_incoming = modest_protocol_info_get_transport_store_protocol (name);
+       g_return_if_fail (MODEST_IS_ACCOUNT_ASSISTANT (assistant));
 
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->store_secure_auth), modest_protocol_info_is_secure (protocol_security_incoming));
-       gtk_widget_set_sensitive (priv->store_secure_auth, !modest_protocol_info_is_secure (protocol_security_incoming));
+       priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(assistant);
+       registry = modest_runtime_get_protocol_registry ();
+       name = (const gchar *) modest_combo_box_get_active_id  (MODEST_COMBO_BOX (priv->store_security_combo));
+       protocol_security_incoming = modest_protocol_registry_get_protocol_by_name (registry, 
+                                                                                   MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS,
+                                                                                   name);
+       protocol_id = modest_protocol_get_type_id (protocol_security_incoming);
+       is_secure = modest_protocol_registry_protocol_type_is_secure (registry, protocol_id);
+
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->store_secure_auth), is_secure);
+       gtk_widget_set_sensitive (priv->store_secure_auth, !is_secure);
        
        on_assistant_changed (widget, assistant);
 }
@@ -404,6 +415,7 @@ add_receiving_page (ModestAccountAssistant *self)
        GtkWidget *alignment;
        ModestAccountAssistantPrivate *priv;
        GtkWidget *label;
+       const gchar *tag = MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS;
 
        priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
        page = gtk_alignment_new (0.5, 0.0, 1.0, 0.0);
@@ -422,8 +434,7 @@ add_receiving_page (ModestAccountAssistant *self)
        /* Note: This ModestPairList* must exist for as long as the combo
         * that uses it, because the ModestComboBox uses the ID opaquely, 
         * so it can't know how to manage its memory. */
-       priv->receiving_transport_store_protos = 
-               modest_protocol_info_get_supported_store_protocol_pair_list ();
+       priv->receiving_transport_store_protos = modest_gnome_utils_get_protocols_pair_list (tag);
        priv->store_protocol_combo = modest_combo_box_new (priv->receiving_transport_store_protos, g_str_equal);
        priv->store_server_widget = gtk_entry_new ();
 
@@ -457,8 +468,8 @@ add_receiving_page (ModestAccountAssistant *self)
        gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
 
        /* Setup security information widgets */
-       priv->security_protos = 
-               modest_protocol_info_get_connection_protocol_pair_list ();
+       tag = MODEST_PROTOCOL_REGISTRY_CONNECTION_PROTOCOLS;
+       priv->security_protos = modest_gnome_utils_get_protocols_pair_list (tag);
        priv->store_security_combo = modest_combo_box_new (priv->security_protos, g_str_equal);
        priv->store_secure_auth = gtk_check_button_new ();
 
@@ -504,7 +515,8 @@ on_sending_combo_box_changed (GtkComboBox *combo, ModestAccountAssistant *self)
 {
        ModestAccountAssistantPrivate *priv;
        gchar *chosen;
-       
+       ModestProtocol *proto;
+
        priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
 
        chosen = gtk_combo_box_get_active_text (GTK_COMBO_BOX(combo));
@@ -512,8 +524,11 @@ on_sending_combo_box_changed (GtkComboBox *combo, ModestAccountAssistant *self)
        if (priv->transport_widget)
                gtk_container_remove (GTK_CONTAINER(priv->transport_holder),
                                      priv->transport_widget);
-       priv->transport_widget =
-               modest_transport_widget_new (modest_protocol_info_get_transport_store_protocol(chosen));
+
+       proto = modest_protocol_registry_get_protocol_by_name (modest_runtime_get_protocol_registry (),
+                                                              MODEST_PROTOCOL_REGISTRY_TRANSPORT_PROTOCOLS,
+                                                              chosen);
+       priv->transport_widget = modest_transport_widget_new (modest_protocol_get_type_id (proto));
 
        gtk_container_add (GTK_CONTAINER(priv->transport_holder),
                           priv->transport_widget);
@@ -532,6 +547,7 @@ add_sending_page (ModestAccountAssistant *self)
        GtkWidget *alignment;
        ModestAccountAssistantPrivate *priv;
        GtkWidget *label;
+       const gchar *tag = MODEST_PROTOCOL_REGISTRY_CONNECTION_PROTOCOLS;
 
        priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
        page = gtk_alignment_new (0.5, 0.0, 1.0, 0.0);
@@ -570,10 +586,10 @@ add_sending_page (ModestAccountAssistant *self)
        gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0);
 
        /* Setup security information widgets */
-       priv->transport_security_protos = 
-               modest_protocol_info_get_connection_protocol_pair_list ();
+       priv->transport_security_protos = modest_gnome_utils_get_protocols_pair_list (tag);
        priv->transport_security_combo = modest_combo_box_new (priv->security_protos, g_str_equal);
-       priv->transport_auth_protos = modest_protocol_info_get_auth_protocol_pair_list ();
+       tag = MODEST_PROTOCOL_REGISTRY_AUTH_PROTOCOLS;
+       priv->transport_auth_protos = modest_gnome_utils_get_protocols_pair_list (tag);
        priv->transport_secure_auth_combo = GTK_WIDGET (modest_combo_box_new (priv->transport_auth_protos, g_str_equal));
 
        /* Setup security frame */
@@ -712,19 +728,20 @@ get_email (ModestAccountAssistant *self)
  * somewhere else
  */
 static gchar*
-get_account_uri (ModestTransportStoreProtocol proto, const gchar* path)
+get_account_uri (ModestProtocolType proto, const gchar* path)
 {
        CamelURL *url;
        gchar *uri;
        
-       switch (proto) {
-       case MODEST_PROTOCOL_STORE_MBOX:
-               url = camel_url_new ("mbox:", NULL); break;
-       case MODEST_PROTOCOL_STORE_MAILDIR:
-               url = camel_url_new ("maildir:", NULL); break;
-       default:
-               g_return_val_if_reached (NULL);
+       if (proto == modest_protocol_registry_get_mbox_type_id ()) {
+               url = camel_url_new ("mbox:", NULL);
+       } else {
+               if (proto == modest_protocol_registry_get_maildir_type_id ())
+                       url = camel_url_new ("maildir:", NULL);
+               else
+                       g_return_val_if_reached (NULL);
        }
+
        camel_url_set_path (url, path);
        uri = camel_url_to_string (url, 0);
        camel_url_free (url);
@@ -733,15 +750,24 @@ get_account_uri (ModestTransportStoreProtocol proto, const gchar* path)
 }
 
 static gchar*
-get_new_server_account_name (ModestAccountMgr* acc_mgr, ModestTransportStoreProtocol proto,
-                            const gchar* username, const gchar *servername)
+get_new_server_account_name (ModestAccountMgr* acc_mgr, 
+                            ModestProtocolType proto_id,
+                            const gchar *username, 
+                            const gchar *servername)
 {
        gchar *name;
+       const gchar *proto_name;
        gint  i = 0;
-       
+       ModestProtocolRegistry *registry;
+       ModestProtocol *proto;
+
+       registry = modest_runtime_get_protocol_registry ();
+       proto = modest_protocol_registry_get_protocol_by_type (registry, proto_id);
+       proto_name = modest_protocol_get_name (proto);
+
        while (TRUE) {
-               name = g_strdup_printf ("%s:%d",
-                                       modest_protocol_info_get_transport_store_protocol_name(proto), i++);
+               name = g_strdup_printf ("%s:%d", proto_name, i++);
+
                if (modest_account_mgr_account_exists (acc_mgr, name, TRUE))
                        g_free (name);
                else
@@ -820,34 +846,30 @@ on_before_next (ModestWizardDialog *dialog, GtkWidget *current_page, GtkWidget *
        return TRUE;
 }
 
-static gint get_serverport_incoming(ModestTransportStoreProtocol protocol,
-                                    ModestConnectionProtocol security)
+static gint 
+get_serverport_incoming(ModestProtocolType protocol,
+                       ModestProtocolType security)
 {
        int serverport_incoming = 0;
-               /* We don't check for SMTP here as that is impossible for an incoming server. */
-               if (protocol == MODEST_PROTOCOL_STORE_IMAP) {
-                       switch (security) {
-                       case MODEST_PROTOCOL_CONNECTION_NORMAL:
-                       case MODEST_PROTOCOL_CONNECTION_TLS:
-                       case MODEST_PROTOCOL_CONNECTION_TLS_OP:
-                               serverport_incoming = 143;
-                               break;
-                       case MODEST_PROTOCOL_CONNECTION_SSL:
-                               serverport_incoming = 993;
-                               break;
-                       }
-               } else if (protocol == MODEST_PROTOCOL_STORE_POP) {
-                       switch (security) {
-                       case MODEST_PROTOCOL_CONNECTION_NORMAL:
-                       case MODEST_PROTOCOL_CONNECTION_TLS:
-                       case MODEST_PROTOCOL_CONNECTION_TLS_OP:
-                               serverport_incoming = 110;
-                               break;
-                       case MODEST_PROTOCOL_CONNECTION_SSL:
-                               serverport_incoming = 995;
-                               break;
-                       }
+
+       /* We don't check for SMTP here as that is impossible for an incoming server. */
+       if ((security == modest_protocol_registry_get_none_connection_type_id ()) ||
+           (security == modest_protocol_registry_get_tls_connection_type_id ()) ||
+           (security == modest_protocol_registry_get_tlsop_connection_type_id ())) {
+
+               if (protocol == MODEST_PROTOCOLS_STORE_IMAP) {
+                       serverport_incoming = 143;
+               } else if (protocol == MODEST_PROTOCOLS_STORE_POP) {
+                       serverport_incoming = 110;
                }
+       } else if (security == modest_protocol_registry_get_ssl_connection_type_id ()) {
+               if (protocol == MODEST_PROTOCOLS_STORE_IMAP) {
+                       serverport_incoming = 993;
+               } else if  (protocol == MODEST_PROTOCOLS_STORE_POP) {
+                       serverport_incoming = 995;
+               }
+       }
+
        return serverport_incoming;
 }
 
@@ -855,23 +877,34 @@ static GList*
 check_for_supported_auth_methods (ModestAccountAssistant* self)
 {
        GError *error = NULL;
-       ModestTransportStoreProtocol protocol;
+       ModestProtocolType protocol;
        const gchar* hostname;
        const gchar* username;
        gchar *store_protocol_name, *store_security_name;
-       ModestConnectionProtocol security_protocol;
+       ModestProtocolType security_protocol;
        int port_num; 
        GList *list_auth_methods;
        ModestAccountAssistantPrivate *priv;
+       ModestProtocolRegistry *registry;
+       ModestProtocol *proto;
        
        priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE (self);
        hostname = gtk_entry_get_text(GTK_ENTRY(priv->store_server_widget));
        username = gtk_entry_get_text(GTK_ENTRY(priv->username));
        store_protocol_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (priv->store_protocol_combo));
-       protocol = modest_protocol_info_get_transport_store_protocol (store_protocol_name);
+       registry = modest_runtime_get_protocol_registry ();
+       proto = modest_protocol_registry_get_protocol_by_name (registry,
+                                                              MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS,
+                                                              store_protocol_name);
+       protocol = modest_protocol_get_type_id (proto);
+
        g_free (store_protocol_name);
        store_security_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (priv->store_security_combo));
-       security_protocol = modest_protocol_info_get_connection_protocol (store_security_name);
+
+       proto = modest_protocol_registry_get_protocol_by_name (registry,
+                                                              MODEST_PROTOCOL_REGISTRY_CONNECTION_PROTOCOLS,
+                                                              store_security_name);
+       security_protocol = modest_protocol_get_type_id (proto);
        g_free (store_security_name);
        port_num = get_serverport_incoming(protocol, security_protocol); 
        list_auth_methods = modest_utils_get_supported_secure_authentication_methods (protocol, hostname, port_num, 
@@ -882,8 +915,8 @@ check_for_supported_auth_methods (ModestAccountAssistant* self)
                GList* list = NULL;
                GList* method;
                for (method = list_auth_methods; method != NULL; method = g_list_next(method)) {
-                       ModestAuthProtocol auth = (ModestAuthProtocol) (GPOINTER_TO_INT(method->data));
-                       if (modest_protocol_info_auth_is_secure(auth)) {
+                       ModestProtocolType auth = (ModestProtocolType) (GPOINTER_TO_INT(method->data));
+                       if (modest_protocol_registry_protocol_type_is_secure (registry, auth)) {
                                list = g_list_append(list, GINT_TO_POINTER(auth));
                        }
                }
@@ -900,15 +933,15 @@ check_for_supported_auth_methods (ModestAccountAssistant* self)
        return NULL;
 }
 
-static ModestAuthProtocol check_first_supported_auth_method(ModestAccountAssistant* self)
+static ModestProtocolType check_first_supported_auth_method(ModestAccountAssistant* self)
 {
-       ModestAuthProtocol result = MODEST_PROTOCOL_AUTH_PASSWORD;
+       ModestProtocolType result = MODEST_PROTOCOLS_AUTH_PASSWORD;
 
        GList* methods = check_for_supported_auth_methods(self);
        if (methods)
        {
                /* Use the first one: */
-               result = (ModestAuthProtocol) (GPOINTER_TO_INT(methods->data));
+               result = (ModestProtocolType) (GPOINTER_TO_INT(methods->data));
                g_list_free(methods);
        }
 
@@ -929,9 +962,9 @@ save_to_settings (ModestAccountAssistant *self)
        const gchar *username, *password;
        gchar *store_hostname, *transport_hostname;
        guint store_port, transport_port;
-       ModestTransportStoreProtocol store_protocol, transport_protocol;
-       ModestConnectionProtocol store_security, transport_security;
-       ModestAuthProtocol store_auth_protocol, transport_auth_protocol;
+       ModestProtocolType store_protocol, transport_protocol;
+       ModestProtocolType store_security, transport_security;
+       ModestProtocolType store_auth_protocol, transport_auth_protocol;
        ModestServerAccountSettings *store_settings, *transport_settings;
        const gchar *fullname, *email_address;
 
@@ -943,24 +976,25 @@ save_to_settings (ModestAccountAssistant *self)
        /* Note: We need something as default for the ModestTransportStoreProtocol* values, 
         * or modest_account_mgr_add_server_account will fail. */
        store_port = 0;
-       store_protocol = MODEST_PROTOCOL_STORE_POP;
-       store_security = MODEST_PROTOCOL_CONNECTION_NORMAL;
-       store_auth_protocol = MODEST_PROTOCOL_AUTH_NONE;
+       store_protocol = MODEST_PROTOCOLS_STORE_POP;
+       store_security = MODEST_PROTOCOLS_CONNECTION_NONE;
+       store_auth_protocol = MODEST_PROTOCOLS_AUTH_NONE;
 
        /* Use custom pages because no preset was specified: */
        store_hostname = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->store_server_widget) ));                
-       store_protocol = modest_protocol_info_get_transport_store_protocol (modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->store_protocol_combo)));
-       store_security = modest_protocol_info_get_connection_protocol (modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->store_security_combo)));
+       store_protocol = modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->store_protocol_combo));
+       store_security = modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->store_security_combo));
 
        /* The UI spec says: 
         * If secure authentication is unchecked, allow sending username and password also as plain text.
         * If secure authentication is checked, require one of the secure methods during 
         * connection: SSL, TLS, CRAM-MD5 etc. */
        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->store_secure_auth)) &&
-           !modest_protocol_info_is_secure(store_security)) {
+           !modest_protocol_registry_protocol_type_is_secure(modest_runtime_get_protocol_registry (),
+                                                             store_security)) {
                store_auth_protocol = check_first_supported_auth_method (self);
        } else {
-               store_auth_protocol = MODEST_PROTOCOL_AUTH_PASSWORD;
+               store_auth_protocol = MODEST_PROTOCOLS_AUTH_PASSWORD;
        }
 
        /* now we store the store account settings */
@@ -969,7 +1003,7 @@ save_to_settings (ModestAccountAssistant *self)
        modest_server_account_settings_set_username (store_settings, username);
        modest_server_account_settings_set_password (store_settings, password);
        modest_server_account_settings_set_protocol (store_settings, store_protocol);
-       modest_server_account_settings_set_security (store_settings, store_security);
+       modest_server_account_settings_set_security_protocol (store_settings, store_security);
        modest_server_account_settings_set_auth_protocol (store_settings, store_auth_protocol);
        if (store_port != 0)
                modest_server_account_settings_set_port (store_settings, store_port);
@@ -979,15 +1013,15 @@ save_to_settings (ModestAccountAssistant *self)
        
        /* Outgoing server: */
        transport_hostname = NULL;
-       transport_protocol = MODEST_PROTOCOL_STORE_POP;
-       transport_security = MODEST_PROTOCOL_CONNECTION_NORMAL;
-       transport_auth_protocol = MODEST_PROTOCOL_AUTH_NONE;
+       transport_protocol = MODEST_PROTOCOLS_STORE_POP;
+       transport_security = MODEST_PROTOCOLS_CONNECTION_NONE;
+       transport_auth_protocol = MODEST_PROTOCOLS_AUTH_NONE;
        transport_port = 0;
        
        transport_hostname = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->transport_server_widget) ));
-       transport_protocol = MODEST_PROTOCOL_TRANSPORT_SMTP; /* It's always SMTP for outgoing. */
-       transport_security = modest_protocol_info_get_connection_protocol (modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->transport_security_combo)));
-       transport_auth_protocol = modest_protocol_info_get_auth_protocol (modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->transport_secure_auth_combo)));
+       transport_protocol = MODEST_PROTOCOLS_TRANSPORT_SMTP; /* It's always SMTP for outgoing. */
+       transport_security = modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->transport_security_combo));
+       transport_auth_protocol = modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->transport_secure_auth_combo));
            
        /* now we transport the transport account settings */
        transport_settings = modest_account_settings_get_transport_settings (priv->settings);
@@ -995,7 +1029,7 @@ save_to_settings (ModestAccountAssistant *self)
        modest_server_account_settings_set_username (transport_settings, username);
        modest_server_account_settings_set_password (transport_settings, password);
        modest_server_account_settings_set_protocol (transport_settings, transport_protocol);
-       modest_server_account_settings_set_security (transport_settings, transport_security);
+       modest_server_account_settings_set_security_protocol (transport_settings, transport_security);
        modest_server_account_settings_set_auth_protocol (transport_settings, transport_auth_protocol);
        if (transport_port != 0)
                modest_server_account_settings_set_port (transport_settings, transport_port);