* Change deprecated HildonApp/HildonAppView to HildonProgram/HildonWindow.
[modest] / src / gtk-glade / modest-ui-wizard.c
index 7cf1314..3edf494 100644 (file)
 #endif /*HAVE_CONFIG_H*/
 
 #include "../modest-account-mgr.h"
+#include "../modest-identity-mgr.h"
 
 #include "modest-ui-glade.h"
 #include "modest-ui-wizard.h"
 
-void wizard_missing_notification(GtkWindow *parent, gchar *info_message)
-{
+
+static void wizard_incoming_button_toggled(GtkWidget *button,
+                                          gpointer userdata) {
+       GtkWidget *awidget;
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button))==TRUE) {
+               awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutUserNameEntry");
+               gtk_widget_set_sensitive(GTK_WIDGET(awidget), FALSE);
+               awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutPasswordEntry");
+               gtk_widget_set_sensitive(GTK_WIDGET(awidget), FALSE);
+       }
+       else {
+               awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutUserNameEntry");
+               gtk_widget_set_sensitive(GTK_WIDGET(awidget), TRUE);
+               awidget=glade_xml_get_widget(GLADE_XML(userdata), "AWOutPasswordEntry");
+               gtk_widget_set_sensitive(GTK_WIDGET(awidget), TRUE);
+       }
+}
+
+void wizard_missing_notification(GtkWindow *parent, gchar *info_message) {
         GtkWidget *DenyDialog;
 
         DenyDialog=gtk_message_dialog_new(parent,
@@ -32,8 +50,7 @@ void wizard_missing_notification(GtkWindow *parent, gchar *info_message)
         gtk_widget_destroy(DenyDialog);
 }
 
-gchar *get_text_from_combobox (GtkWidget *combobox)
-{
+gchar *get_text_from_combobox (GtkWidget *combobox){
         /* Remember to free the returned variable after usage! */
 
        GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(combobox));
@@ -41,8 +58,7 @@ gchar *get_text_from_combobox (GtkWidget *combobox)
 
        gchar *value;
 
-       if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combobox), &iter))
-       {
+       if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combobox), &iter)) {
                gtk_tree_model_get(GTK_TREE_MODEL(model),
                                   &iter,
                                   0, &value,
@@ -53,18 +69,15 @@ gchar *get_text_from_combobox (GtkWidget *combobox)
 }
 
 
-gboolean advance_sanity_check(GtkWindow *parent, GladeXML *glade_xml, gint cp)
-{
-        GtkDialog *DenyDialog;
+gboolean advance_sanity_check(GladeXML *glade_xml, gint cp) {
         gchar *tmptext;
 
        /* FIXME:
         * all calls to wizard_missing_notification lack the parent window.
         */
 
-        switch (cp)
-        {
-       case 0:
+        switch (cp) {
+       case 1:
                /* Only needed if the "mailbox name" field is used in the first page of the wizard.
                  * if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWMailboxnameEntry"))))==0)
                  * {
@@ -72,39 +85,41 @@ gboolean advance_sanity_check(GtkWindow *parent, GladeXML *glade_xml, gint cp)
                  *         return FALSE;
                 * }
                 */
+               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))))==0) {
+                       wizard_missing_notification(NULL, "Please enter the E-Mail address.");
+                       return FALSE;
+               }
+                return TRUE;
+               break;
+       case 2:
                 tmptext=gtk_combo_box_get_active_text(GTK_COMBO_BOX(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox")));
-                if (tmptext==NULL)
-                {
+                if (tmptext==NULL) {
                         wizard_missing_notification(NULL, "Please select mailbox type.");
                         return FALSE;
                }
-               free(tmptext);
-                return TRUE;
-               break;
-       case 1:
-               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))))==0)
-               {
-                       wizard_missing_notification(NULL, "Please enter user name.");
+               g_free(tmptext);
+               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))))==0) {
+                       wizard_missing_notification(NULL, "Please specify incoming server adress.");
                        return FALSE;
                }
-               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))))==0)
-               {
-                       wizard_missing_notification(NULL, "Please enter the E-Mail address.");
+               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))))==0) {
+                       wizard_missing_notification(NULL, "Please enter user name.");
                        return FALSE;
                }
                return TRUE;
                break;
-       case 2:
-               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))))==0)
-               {
-                       wizard_missing_notification(NULL, "Please specify incoming server adress.");
-                       return FALSE;
-               }
-               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))))==0)
-               {
+       case 3:
+               if (strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))))==0) {
                        wizard_missing_notification(NULL, "Please specify outgoing server address.");
                        return FALSE;
                }
+               /* smtp servers may work without a username
+               if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "AWUseIncomingCheckButton")))==FALSE
+                   && strlen(gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutUserNameEntry"))))==0) {
+                       wizard_missing_notification(NULL, "Please enter user name.");
+                       return FALSE;
+               } */
+
                return TRUE;
                break;
         }
@@ -112,61 +127,83 @@ gboolean advance_sanity_check(GtkWindow *parent, GladeXML *glade_xml, gint cp)
         return FALSE;
 }
 
-gboolean wizard_account_add(GladeXML *glade_xml, ModestUIPrivate *priv)
+gchar *search_unused_account_or_identity_name(gpointer mgr, gchar *draft) {
+       GString *tmpaccount_name;
+       gint counter;
+
+       tmpaccount_name=g_string_new("");
+       g_string_printf(tmpaccount_name, "%s", draft);
+       if(MODEST_IS_ACCOUNT_MGR(mgr)) {
+               for(counter=0; modest_account_mgr_server_account_exists(mgr, tmpaccount_name->str, NULL); counter++)
+                       g_string_printf(tmpaccount_name, "%s%d", draft, counter);
+       }
+       else
+               for(counter=0;      modest_identity_mgr_identity_exists(mgr, tmpaccount_name->str, NULL); counter++)
+                       g_string_printf(tmpaccount_name, "%s%d", draft, counter);
+
+       return g_string_free(tmpaccount_name, FALSE);
+}
+
+gboolean wizard_account_add(GladeXML *glade_xml, ModestUI *modest_ui)
 {
        ModestAccountMgr *acc_mgr;
        ModestIdentityMgr *id_mgr;
-       const gchar *account_name="default";
-       ModestConf *conf=priv->modest_conf;
+        gchar *store;
+        gchar *transport;
+        gchar *identity;
+       ModestUIPrivate *priv;
+       ModestConf *conf;
        gchar *tmptext;
+       gchar *tmptext2;
 
-       g_return_if_fail (conf);
-
-       acc_mgr = MODEST_ACCOUNT_MGR(modest_account_mgr_new (conf));
-       if (!acc_mgr) {
-               g_warning ("failed to instantiate account mgr");
-               return;
-       }
-
-       if (modest_account_mgr_account_exists (acc_mgr, account_name, NULL)) {
-               if (!modest_account_mgr_remove_account(acc_mgr, account_name, NULL)) {
-                       g_warning ("could not delete existing account");
-               }
-       }
-
-       if (!modest_account_mgr_add_account (acc_mgr, account_name, "defaultstore", "defaulttransport", NULL))
-               g_warning ("failed to add default account");
-       else
-       {
-               tmptext=get_text_from_combobox(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox"));
-               modest_account_mgr_add_server_account (acc_mgr, "defaultstore",
-                                                      gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))),
+       g_return_val_if_fail (MODEST_IS_UI(modest_ui), FALSE);
+       priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
+       conf = priv->modest_conf;
+
+       acc_mgr = priv->modest_acc_mgr;
+       id_mgr = priv->modest_id_mgr;
+
+       tmptext2=get_text_from_combobox(glade_xml_get_widget(glade_xml, "AWMailboxtypeComboBox"));
+       tmptext=g_utf8_strdown(tmptext2, -1);
+       g_free(tmptext2);
+
+       store=search_unused_account_or_identity_name(acc_mgr, "incoming");
+       modest_account_mgr_add_server_account (acc_mgr,
+                                              store,
+                                              gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWInServerComboEntry"))),
+                                              gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))),
+                                              gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWPasswordEntry"))),
+                                              tmptext);
+       g_free(store);
+       g_free(tmptext);
+
+        transport=search_unused_account_or_identity_name(acc_mgr, "outgoing");
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade_xml, "AWUseIncomingCheckButton")))==TRUE)
+               modest_account_mgr_add_server_account (acc_mgr,
+                                                      transport,
+                                                      gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))),
                                                       gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWUserNameEntry"))),
-                                                      NULL,
-                                                      tmptext);
-               free(tmptext);
-               modest_account_mgr_add_server_account (acc_mgr, "defaulttransport",
+                                                      gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWPasswordEntry"))),
+                                                      "smtp");
+       else
+               modest_account_mgr_add_server_account (acc_mgr,
+                                                      transport,
                                                       gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutServerComboEntry"))),
-                                                      NULL,
-                                                      NULL,
+                                                      gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutUserNameEntry"))),
+                                                      gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWOutPasswordEntry"))),
                                                       "smtp");
 
-       }
-       id_mgr = MODEST_IDENTITY_MGR(modest_identity_mgr_new (conf));
-       if (modest_identity_mgr_identity_exists(id_mgr, "defaultidentity", NULL)) {
-               if (!modest_identity_mgr_remove_identity(id_mgr, "defaultidentity", NULL)) {
-                       g_warning ("could not delete existing default identity");
-               }
-       }
+       identity=search_unused_account_or_identity_name(id_mgr, MODEST_IDENTITY_DEFAULT_IDENTITY);
        if (!modest_identity_mgr_add_identity (id_mgr,
-                                              MODEST_IDENTITY_DEFAULT_IDENTITY,
+                                               identity,
+                                              gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWRealNameEntry"))),
                                               gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(glade_xml, "AWEMailAddressEntry"))),
-                                              "", "", FALSE, NULL, FALSE ))
+                                              "", "", FALSE, transport, FALSE ))
                g_warning ("failed to add default identity");
 
-       g_object_unref (G_OBJECT(acc_mgr));
-       g_object_unref (G_OBJECT(id_mgr));
-
+       g_free(transport);
+       g_free(identity);
+       return TRUE;
 }
 
 
@@ -174,71 +211,77 @@ void wizard_account_dialog(ModestUI *modest_ui)
 {
        GladeXML *glade_xml;
        GtkWidget *dialog;
-        ModestUIPrivate *priv;
-        GtkWidget *FinishButton;
-        GtkWidget *BackButton;
-        GtkWidget *NextButton;
-        GtkWidget *CancelButton;
-        GtkWidget *Notebook;
-        GtkWidget *awidget;
-        gint cp;
-        gint result;
-       gint finishallowed=0;
-       gboolean account_added_successfully;
-
+       ModestUIPrivate *priv;
+       GtkWidget *finish_button;
+       GtkWidget *back_button;
+       GtkWidget *next_button;
+       GtkWidget *cancel_button;
+       GtkWidget *notebook;
+       GtkWidget *use_incoming_button;
+       gint cp;
+       gint result;
+       gboolean account_added_successfully=FALSE;
+
+       g_return_if_fail(MODEST_IS_UI(modest_ui));
        priv = MODEST_UI_GET_PRIVATE(MODEST_UI(modest_ui));
 
        glade_xml = glade_xml_new(MODEST_GLADE, "account_wizard", NULL);
 
-        dialog = glade_xml_get_widget(glade_xml, "account_wizard");
-
-        gtk_widget_show_all(dialog);
-
-        FinishButton=glade_xml_get_widget(glade_xml, "AWFinishButton");
-        BackButton=glade_xml_get_widget(glade_xml, "AWBackButton");
-        NextButton=glade_xml_get_widget(glade_xml, "AWNextButton");
-        CancelButton=glade_xml_get_widget(glade_xml, "AWCancelButton");
-        Notebook=glade_xml_get_widget(glade_xml, "AWNotebook");
-
-        gtk_widget_set_sensitive(FinishButton, FALSE);
-
-        do
-       {
-                cp=gtk_notebook_get_current_page(GTK_NOTEBOOK(Notebook));
-                switch (cp)
-                {
-                case 0:
-                        gtk_widget_set_sensitive(BackButton, FALSE);
-                        break;
-                case 1:
-                        gtk_widget_set_sensitive(BackButton, TRUE);
-                        break;
-                case 2:
-                        gtk_widget_set_sensitive(FinishButton, FALSE);
-                        gtk_widget_set_sensitive(NextButton, TRUE);
-                        break;
-                case 3:
-                        gtk_widget_set_sensitive(FinishButton, TRUE);
-                        gtk_widget_set_sensitive(NextButton, FALSE);
-                        break;
-                default:
-                        g_error("I'm on page %d of notebook AWNotebook, which shouldn't have happened. Pulling Emeregency breaks.", cp);
-                        break;
-                }
+       dialog = glade_xml_get_widget(glade_xml, "account_wizard");
+
+       gtk_widget_show_all(dialog);
+
+       finish_button=glade_xml_get_widget(glade_xml, "AWFinishButton");
+       back_button=glade_xml_get_widget(glade_xml, "AWBackButton");
+       next_button=glade_xml_get_widget(glade_xml, "AWNextButton");
+       cancel_button=glade_xml_get_widget(glade_xml, "AWCancelButton");
+       notebook=glade_xml_get_widget(glade_xml, "AWNotebook");
+
+       gtk_widget_set_sensitive(finish_button, FALSE);
+
+       use_incoming_button=glade_xml_get_widget(glade_xml, "AWUseIncomingCheckButton");
+       g_signal_connect(use_incoming_button,
+                        "toggled",
+                        G_CALLBACK(wizard_incoming_button_toggled),
+                        glade_xml);
+
+       /* First page not used currently. It's reserved for the account preset. */
+       gtk_notebook_set_current_page (GTK_NOTEBOOK(notebook), 1);
+
+       do {
+               cp=gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
+               switch (cp) {
+               case 1:
+                       gtk_widget_set_sensitive(back_button, FALSE);
+                       break;
+               case 2:
+                       gtk_widget_set_sensitive(back_button, TRUE);
+                       break;
+               case 3:
+                       gtk_widget_set_sensitive(finish_button, FALSE);
+                       gtk_widget_set_sensitive(next_button, TRUE);
+                       break;
+               case 4:
+                       gtk_widget_set_sensitive(finish_button, TRUE);
+                       gtk_widget_set_sensitive(next_button, FALSE);
+                       break;
+               default:
+                       g_error("I'm on page %d of notebook AWNotebook, which shouldn't have happened. Pulling emergency breaks.", cp);
+                       break;
+               }
 
-                result=gtk_dialog_run(GTK_DIALOG(dialog));
+               result=gtk_dialog_run(GTK_DIALOG(dialog));
 
-                switch (result)
-                {
-                case 1:
-                        if (advance_sanity_check(NULL, glade_xml, cp)==TRUE)
-                                gtk_notebook_next_page(GTK_NOTEBOOK(Notebook));
-                        break;
-                case 2:
-                        gtk_notebook_prev_page(GTK_NOTEBOOK(Notebook));
+               switch (result) {
+               case 1:
+                       if (advance_sanity_check(glade_xml, cp)==TRUE)
+                               gtk_notebook_next_page(GTK_NOTEBOOK(notebook));
+                       break;
+               case 2:
+                       gtk_notebook_prev_page(GTK_NOTEBOOK(notebook));
                        break;
                case GTK_RESPONSE_ACCEPT:
-                       account_added_successfully=wizard_account_add(glade_xml, priv);
+                       account_added_successfully=wizard_account_add(glade_xml, modest_ui);
                        break;
                default:
                        account_added_successfully=FALSE;
@@ -253,7 +296,8 @@ void wizard_account_dialog(ModestUI *modest_ui)
 void new_wizard_account (GtkWidget *widget,
                         gpointer user_data)
 {
-       /* for now: */
+       /* This will probably never be used to modify any existing account. */
        wizard_account_dialog(MODEST_UI(user_data));
 }
 
+