2007-06-26 Armin Burgmeier <armin@openismus.com>
authorArmin Burgmeier <armin@openismus.com>
Tue, 26 Jun 2007 19:11:48 +0000 (19:11 +0000)
committerArmin Burgmeier <armin@openismus.com>
Tue, 26 Jun 2007 19:11:48 +0000 (19:11 +0000)
* src/maemo/modest-maemo-utils.h:
* src/maemo/modest-maemo-utils.c: Added a
ModestMaemoUtilsGetSupportedSecureAuthenticationError with CANCELED as
only error code to tell the calling code when the user canceled the
operation.

* src/maemo/modest-account-settings-dialog.h:
* src/maemo/modest-account-settings-dialog.c:
* src/maemo/easysetup/modest-easysetup-wizard.c: Do not show an error
message if the retrieval of secure authentication methods was canceled
by the user. Perform the check before saving anything to configuration
to not end up with half-committed configuration changes, do not show
a "Saving to configuration failed" note when authentication methods
could not be retrieved.

* src/maemo/modest-main-window.c: Fixed a crash on startup when built
with old hildon.

pmo-trunk-r2447

ChangeLog2
src/maemo/easysetup/modest-easysetup-wizard.c
src/maemo/modest-account-settings-dialog.c
src/maemo/modest-account-settings-dialog.h
src/maemo/modest-maemo-utils.c
src/maemo/modest-maemo-utils.h
src/maemo/modest-main-window.c

index 883a6aa..fd3bf70 100644 (file)
@@ -1,3 +1,23 @@
+2007-06-26  Armin Burgmeier  <armin@openismus.com>
+
+       * src/maemo/modest-maemo-utils.h: 
+       * src/maemo/modest-maemo-utils.c: Added a
+       ModestMaemoUtilsGetSupportedSecureAuthenticationError with CANCELED as
+       only error code to tell the calling code when the user canceled the
+       operation.
+
+       * src/maemo/modest-account-settings-dialog.h:
+       * src/maemo/modest-account-settings-dialog.c:
+       * src/maemo/easysetup/modest-easysetup-wizard.c: Do not show an error
+       message if the retrieval of secure authentication methods was canceled
+       by the user. Perform the check before saving anything to configuration
+       to not end up with half-committed configuration changes, do not show
+       a "Saving to configuration failed" note when authentication methods
+       could not be retrieved.
+
+       * src/maemo/modest-main-window.c: Fixed a crash on startup when built
+       with old hildon.
+
 2007-06-26  Murray Cumming  <murrayc@murrayc.com>
 
        * src/dbus_api/modest-dbus-callbacks.c: (add_folders_to_list):
index 40754a6..1606b79 100644 (file)
@@ -146,7 +146,7 @@ set_default_custom_servernames(ModestEasysetupWizardDialog *dialog);
 static void on_combo_servertype_changed(GtkComboBox *combobox, gpointer user_data);
 
 static gint get_serverport_incoming(ModestPresetsServerType servertype_incoming,
-                                                                                                                                               ModestPresetsSecurity security_incoming)
+                                    ModestPresetsSecurity security_incoming)
 {
        int serverport_incoming = 0;
                /* We don't check for SMTP here as that is impossible for an incoming server. */
@@ -166,40 +166,44 @@ static GList* check_for_supported_auth_methods(ModestEasysetupWizardDialog* acco
        const ModestTransportStoreProtocol protocol = 
           easysetup_servertype_combo_box_get_active_servertype (
                                                                 EASYSETUP_SERVERTYPE_COMBO_BOX (account_wizard->combo_incoming_servertype));
-    const gchar* hostname = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_incomingserver));
-    const gchar* username = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_user_username));
-         const ModestConnectionProtocol protocol_security_incoming = 
+       const gchar* hostname = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_incomingserver));
+       const gchar* username = gtk_entry_get_text(GTK_ENTRY(account_wizard->entry_user_username));
+       const ModestConnectionProtocol protocol_security_incoming = 
                                        modest_serversecurity_combo_box_get_active_serversecurity (
-                                                                                                                                                                                                                                                                                MODEST_SERVERSECURITY_COMBO_BOX (
-                                                                                                                                                                                                                                                                                                                                                                                                                       account_wizard->combo_incoming_security));
-     int port_num = get_serverport_incoming(protocol, protocol_security_incoming); 
-     GList *list_auth_methods =
+                                       MODEST_SERVERSECURITY_COMBO_BOX (
+                                       account_wizard->combo_incoming_security));
+       int port_num = get_serverport_incoming(protocol, protocol_security_incoming); 
+       GList *list_auth_methods =
           modest_maemo_utils_get_supported_secure_authentication_methods (
                                                                       protocol, 
                                                                       hostname, port_num, username, GTK_WINDOW (account_wizard), &error);
        if (list_auth_methods) {
-          /* TODO: Select the correct method */
-                         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)) {
-                                        list = g_list_append(list, GINT_TO_POINTER(auth));
-                                }
-                        }
-                        g_list_free(list_auth_methods);
-                        if (list)
-                                return list;
-                }
-                /* no secure methods supported */
-     GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(account_wizard),
-                                                     GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
-                                                     GTK_BUTTONS_OK, error != NULL ? error->message : _("Server does not support secure authentication!"));
-     if(error != NULL) g_error_free(error);
-
-     gtk_dialog_run(GTK_DIALOG(error_dialog));
-     gtk_widget_destroy(error_dialog);
-     return NULL;
+               /* TODO: Select the correct method */
+               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)) {
+                               list = g_list_append(list, GINT_TO_POINTER(auth));
+                       }
+               }
+               g_list_free(list_auth_methods);
+               if (list)
+                       return list;
+       }
+
+       if(error == NULL || error->domain != modest_maemo_utils_get_supported_secure_authentication_error_quark() ||
+                       error->code != MODEST_MAEMO_UTILS_GET_SUPPORTED_SECURE_AUTHENTICATION_ERROR_CANCELED)
+       {
+               GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(account_wizard),
+                                                                GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
+                                                                GTK_BUTTONS_OK, (error != NULL) ? error->message : _("Server does not support secure authentication!"));
+               gtk_dialog_run(GTK_DIALOG(error_dialog));
+               gtk_widget_destroy(error_dialog);
+       }
+
+       if(error != NULL) g_error_free(error);
+       return NULL;
 }
 
 static void
index c24a2d3..4df0082 100644 (file)
@@ -845,6 +845,63 @@ check_data (ModestAccountSettingsDialog *self)
                gtk_editable_select_region (GTK_EDITABLE (self->entry_user_email), 0, -1);
                return FALSE;
        }
+
+       /* Find a suitable authentication method when secure authentication is desired */
+       const gchar* hostname = gtk_entry_get_text (GTK_ENTRY (self->entry_incomingserver));
+       gint port_num = hildon_number_editor_get_value (
+                       HILDON_NUMBER_EDITOR (self->entry_incoming_port));
+       const gchar* username = gtk_entry_get_text (GTK_ENTRY (self->entry_user_username));
+
+       const ModestConnectionProtocol protocol_security_incoming = modest_serversecurity_combo_box_get_active_serversecurity (
+               MODEST_SERVERSECURITY_COMBO_BOX (self->combo_incoming_security));
+
+       /* If we use an encrypted protocol then there is no need to encrypt the password */
+       if (!modest_protocol_info_is_secure(protocol_security_incoming))
+       {
+               if (gtk_toggle_button_get_active (
+                               GTK_TOGGLE_BUTTON (self->checkbox_incoming_auth))) {
+                       GError *error = NULL;
+                       GList *list_auth_methods = 
+                               modest_maemo_utils_get_supported_secure_authentication_methods (self->incoming_protocol, 
+                                       hostname, port_num, username, GTK_WINDOW (self), &error);
+                       if (list_auth_methods) {
+                               /* Use the first supported method.
+                                * TODO: Should we prioritize them, to prefer a particular one? */
+                               GList* method;
+                               for (method = list_auth_methods; method != NULL; method = g_list_next(method))
+                               {
+                                       ModestAuthProtocol proto = (ModestAuthProtocol)(GPOINTER_TO_INT(list_auth_methods->data));
+                                       // Allow secure methods, e.g MD5 only
+                                       if (modest_protocol_info_auth_is_secure(proto))
+                                       {
+                                               self->protocol_authentication_incoming = proto;
+                                               break;
+                                       }
+                               }
+                               g_list_free (list_auth_methods);
+                       }
+
+                       if (list_auth_methods == NULL || 
+                                       !modest_protocol_info_auth_is_secure(self->protocol_authentication_incoming))
+                       {
+                               if(error == NULL || error->domain != modest_maemo_utils_get_supported_secure_authentication_error_quark() ||
+                                               error->code != MODEST_MAEMO_UTILS_GET_SUPPORTED_SECURE_AUTHENTICATION_ERROR_CANCELED)
+                               {
+                                       GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(self),
+                                                                                        GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
+                                                                                        GTK_BUTTONS_OK, (error != NULL) ? error->message : _("Server does not support secure authentication!"));
+                                       gtk_dialog_run(GTK_DIALOG(error_dialog));
+                                       gtk_widget_destroy(error_dialog);
+                               }
+
+                               if(error != NULL) g_error_free(error);
+                               /* This is a nasty hack. jschmid. */
+                               /* Don't let the dialog close */
+                               /*g_signal_stop_emission_by_name (dialog, "response");*/
+                               return FALSE;
+                       }
+               }
+       }
        
        /* TODO: The UI Spec wants us to check that the servernames are valid, 
         * but does not specify how.
@@ -894,14 +951,14 @@ on_response (GtkDialog *wizard_dialog,
                {
                        const gboolean saved = save_configuration (self);
                        if (saved) {
-                       /* Do not show the account-saved dialog if we are just saving this 
-                        * temporarily, because from the user's point of view it will not 
-                        * really be saved (saved + enabled) until later.
-                        */
-                       const gboolean enabled = 
-                               modest_account_mgr_get_enabled (self->account_manager, self->account_name);
-                       if (enabled)
-                               show_ok (GTK_WINDOW (self), _("mcen_ib_advsetup_settings_saved"));
+                               /* Do not show the account-saved dialog if we are just saving this 
+                                * temporarily, because from the user's point of view it will not 
+                                * really be saved (saved + enabled) until later.
+                                */
+                               const gboolean enabled = 
+                                       modest_account_mgr_get_enabled (self->account_manager, self->account_name);
+                               if (enabled)
+                                       show_ok (GTK_WINDOW (self), _("mcen_ib_advsetup_settings_saved"));
                        }
                        else
                                show_error (GTK_WINDOW (self), _("mail_ib_setting_failed"));
@@ -923,6 +980,8 @@ modest_account_settings_dialog_init (ModestAccountSettingsDialog *self)
        g_assert (self->account_manager);
        g_object_ref (self->account_manager);
        
+       self->protocol_authentication_incoming = MODEST_PROTOCOL_AUTH_PASSWORD;
+
     /* Create the common pages, 
      */
        self->page_account_details = create_page_account_details (self);
@@ -1076,6 +1135,7 @@ void modest_account_settings_dialog_set_account_name (ModestAccountSettingsDialo
                */
                const ModestAuthProtocol secure_auth = modest_server_account_get_secure_auth(
                        dialog->account_manager, incoming_account->account_name);
+               dialog->protocol_authentication_incoming = secure_auth;
                if (modest_protocol_info_is_secure(security) || 
                                modest_protocol_info_auth_is_secure(secure_auth))
                {
@@ -1263,51 +1323,7 @@ save_configuration (ModestAccountSettingsDialog *dialog)
                MODEST_SERVERSECURITY_COMBO_BOX (dialog->combo_incoming_security));
        modest_server_account_set_security (dialog->account_manager, incoming_account_name, protocol_security_incoming);
        
-       ModestAuthProtocol protocol_authentication_incoming = 
-                       MODEST_PROTOCOL_AUTH_PASSWORD;
-       /* If we use an encrypted protocol then there is no need to encrypt the password */
-       if (!modest_protocol_info_is_secure(protocol_security_incoming))
-       {
-               if (gtk_toggle_button_get_active (
-                               GTK_TOGGLE_BUTTON (dialog->checkbox_incoming_auth))) {
-                       GError *error = NULL;
-                       GList *list_auth_methods = 
-                               modest_maemo_utils_get_supported_secure_authentication_methods (dialog->incoming_protocol, 
-                                       hostname, port_num, username, GTK_WINDOW (dialog), &error);
-                       if (list_auth_methods) {
-                               /* Use the first supported method.
-                                * TODO: Should we prioritize them, to prefer a particular one? */
-                               GList* method;
-                               for (method = list_auth_methods; method != NULL; method = g_list_next(method))
-                               {
-                                       ModestAuthProtocol proto = (ModestAuthProtocol)(GPOINTER_TO_INT(list_auth_methods->data));
-                                       // Allow secure methods, e.g MD5 only
-                                       if (modest_protocol_info_auth_is_secure(proto))
-                                       {
-                                               protocol_authentication_incoming = proto;
-                                               break;
-                                       }
-                               }
-                               g_list_free (list_auth_methods);
-                       }
-                       if (list_auth_methods == NULL || 
-                                       !modest_protocol_info_auth_is_secure(protocol_authentication_incoming))
-                 {
-             GtkWidget* error_dialog = gtk_message_dialog_new(GTK_WINDOW(dialog),
-                                                              GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
-                                                              GTK_BUTTONS_OK, (error != NULL) ? error->message : _("Server does not support secure authentication!"));
-             if(error != NULL) g_error_free(error);
-             gtk_dialog_run(GTK_DIALOG(error_dialog));
-             gtk_widget_destroy(error_dialog);
-                               /* This is a nasty hack. jschmid. */
-                               /* Don't let the dialog close */
-               g_signal_stop_emission_by_name (dialog, "response");
-             return FALSE;
-           }
-               }
-       }
-       
-       modest_server_account_set_secure_auth (dialog->account_manager, incoming_account_name, protocol_authentication_incoming);
+       modest_server_account_set_secure_auth (dialog->account_manager, incoming_account_name, dialog->protocol_authentication_incoming);
        
                
        g_free (incoming_account_name);
index 7fa4136..01e7d62 100644 (file)
@@ -46,6 +46,8 @@ typedef struct {
        ModestTransportStoreProtocol incoming_protocol; /* This may not change. */
        ModestTransportStoreProtocol outgoing_protocol; /* This may not change. */
        gchar * original_account_title;
+
+       ModestAuthProtocol protocol_authentication_incoming;
        
        GtkWidget *page_account_details;
        GtkWidget *entry_account_title;
index 150dbcf..a88cb86 100644 (file)
 #define BTNAME_MATCH_RULE "type='signal',interface='" BTNAME_SIGNAL_IF \
                           "',member='" BTNAME_SIG_CHANGED "'"
 
+GQuark modest_maemo_utils_get_supported_secure_authentication_error_quark (void)
+{
+       return g_quark_from_static_string("modest-maemo-utils-get-supported-secure-authentication-error-quark");
+}
 
 GtkWidget*
 modest_maemo_utils_menubar_to_menu (GtkUIManager *ui_manager)
@@ -286,11 +290,11 @@ on_camel_account_get_supported_secure_authentication (
                return;
        }
 
-       /* Why is this a pointer to a pointer? We are not supposed to set it,
-        * are we? */
+       /* TODO: Why is this a pointer to a pointer? We are not supposed to
+        * set it, are we? */
        if(err != NULL && *err != NULL)
        {
-               printf("Err: %s\n", (*err)->message);
+               if(info->error != NULL) g_error_free(info->error);
                info->error = g_error_copy(*err);
        }
        
@@ -435,6 +439,16 @@ GList* modest_maemo_utils_get_supported_secure_authentication_methods (ModestTra
                g_slice_free (ModestGetSupportedAuthInfo, info);
                info = NULL;
        }
+       else
+       {
+               // Tell the caller that the operation was canceled so it can
+               // make a difference
+               g_set_error(error,
+                           modest_maemo_utils_get_supported_secure_authentication_error_quark(),
+                           MODEST_MAEMO_UTILS_GET_SUPPORTED_SECURE_AUTHENTICATION_ERROR_CANCELED,
+                           "User has canceled query");
+       }
+
        return result;
 }
 
index 31c3a5d..518f937 100644 (file)
 #define MODEST_MAEMO_UTILS_MYDOCS_FOLDER "MyDocs"
 #define MODEST_MAEMO_UTILS_DEFAULT_IMAGE_FOLDER ".images"
 
+typedef enum {
+       MODEST_MAEMO_UTILS_GET_SUPPORTED_SECURE_AUTHENTICATION_ERROR_CANCELED
+} ModestMaemoUtilsGetSupportedSecureAuthenticationError;
+
+GQuark modest_maemo_utils_get_supported_secure_authentication_error_quark (void);
+
 /**
  * modest_maemo_utils_menubar_to_menu:
  * @ui_manager: a ui manager, with the menubar at "/MenuBar" 
index 845aaee..c9f5fe0 100644 (file)
@@ -1417,7 +1417,8 @@ create_details_widget (GtkWidget *styled_widget, TnyAccount *account)
        gtk_style_lookup_color (styled_widget->style, "SecondaryTextColor", &color);
        gray_color_markup = modest_text_utils_get_color_string (&color);
 #else
-       gray_color_markup = "#BBBBBB";  
+       // gray_color_markup is freed below
+       gray_color_markup = g_strdup ("#BBBBBB");
 #endif 
        /* Account description: */