X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fgnome%2Fmodest-account-assistant.c;h=197fd05ce420fb6c19f482e0e6129c13c644957f;hb=442e2f370967b8352386b33c6430cf9dd0cd80d8;hp=ad7e7de34f0ed0013c439eb2f70e4acbe7d0014c;hpb=9ee9c1e0296c01b8bdf9f97123aad5a5a13e5643;p=modest diff --git a/src/gnome/modest-account-assistant.c b/src/gnome/modest-account-assistant.c index ad7e7de..197fd05 100644 --- a/src/gnome/modest-account-assistant.c +++ b/src/gnome/modest-account-assistant.c @@ -37,8 +37,9 @@ #include "modest-text-utils.h" #include "modest-runtime.h" #include "modest-utils.h" -#include +#include "modest-protocol-registry.h" #include "modest-platform.h" +#include "gnome/modest-gnome-utils.h" #include @@ -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);