#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,
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));
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,
}
-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)
* {
* 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;
}
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;
}
{
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;
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));
}
+