* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <glib/gi18n.h>
#include "modest-account-assistant.h"
#include "modest-store-widget.h"
#include "modest-transport-widget.h"
+#include "modest-proto.h"
#include <string.h>
static void
+receiving_page_update_completeness (GtkEditable *editable,
+ ModestAccountAssistant *self)
+{
+ ModestAccountAssistantPrivate *priv;
+ const gchar *txt;
+
+ priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
+
+ txt = modest_store_widget_get_username (MODEST_STORE_WIDGET (priv->store_widget));
+ if (!txt || strlen(txt) == 0) {
+ set_current_page_complete (self, FALSE);
+ return;
+ }
+
+ txt = modest_store_widget_get_servername (MODEST_STORE_WIDGET (priv->store_widget));
+ if (!txt || strlen(txt) == 0) {
+ set_current_page_complete (self, FALSE);
+ return;
+ }
+ set_current_page_complete (self, TRUE);
+}
+
+static void
on_receiving_combo_box_changed (GtkComboBox *combo, ModestAccountAssistant *self)
{
ModestAccountAssistantPrivate *priv;
gtk_container_remove (GTK_CONTAINER(priv->store_holder),
priv->store_widget);
+ /* FIXME: we could have these widgets cached instead of
+ creating them every time */
priv->store_widget = modest_store_widget_new (priv->factory, chosen);
+ if (!strcmp (chosen, MODEST_PROTO_POP) || !strcmp (chosen, MODEST_PROTO_IMAP)) {
+ g_signal_connect (priv->store_widget,
+ "data_changed",
+ G_CALLBACK (receiving_page_update_completeness),
+ self);
+ set_current_page_complete (self, FALSE);
+ } else
+ set_current_page_complete (self, TRUE);
gtk_container_add (GTK_CONTAINER(priv->store_holder),
priv->store_widget);
gtk_box_pack_start (GTK_BOX(box), combo, FALSE,FALSE,6);
gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 6);
-
+
gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), FALSE, FALSE, 0);
priv->store_holder = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX(page), priv->store_holder,
TRUE, TRUE, 0);
+
+ /* Force the selection */
+ on_receiving_combo_box_changed (GTK_COMBO_BOX (combo), self);
gtk_assistant_append_page (GTK_ASSISTANT(self), page);
gtk_assistant_set_page_type (GTK_ASSISTANT(self), page,
GTK_ASSISTANT_PAGE_INTRO);
gtk_assistant_set_page_complete (GTK_ASSISTANT(self),
- page, TRUE);
+ page, FALSE);
gtk_widget_show_all (page);
}
gtk_box_pack_start (GTK_BOX(box), combo, FALSE,FALSE,0);
gtk_box_pack_start (GTK_BOX(page), box, FALSE,FALSE, 0);
-
+
gtk_box_pack_start (GTK_BOX(page), gtk_hseparator_new(), FALSE, FALSE, 0);
priv->transport_holder = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX(page), priv->transport_holder,
FALSE, FALSE, 0);
-
+
+ /* Force the selection */
+ on_sending_combo_box_changed (GTK_COMBO_BOX (combo), self);
+
gtk_assistant_append_page (GTK_ASSISTANT(self), page);
gtk_assistant_set_page_title (GTK_ASSISTANT(self), page,
page, TRUE);
gtk_widget_show_all (page);
}
-
-
static void
switch (response) {
case GTK_RESPONSE_ACCEPT:
/* close the assistant */
- gtk_widget_destroy (GTK_WIDGET(self));
+ gtk_widget_hide (GTK_WIDGET(self));
break;
case GTK_RESPONSE_CANCEL:
/* don't do anything */
}
+static void
+on_close (ModestAccountAssistant *self, gpointer user_data)
+{
+ gtk_widget_hide (GTK_WIDGET (self));
+}
static void
on_apply (ModestAccountAssistant *self, gpointer user_data)
{
ModestAccountAssistantPrivate *priv;
- gchar *store_name;
- const gchar *account_name;
+ gchar *store_name, *transport_name;
+ const gchar *account_name, *username, *servername, *proto;
ModestStoreWidget *store;
+ ModestTransportWidget *transport;
priv = MODEST_ACCOUNT_ASSISTANT_GET_PRIVATE(self);
- /* create account */
-
/* create server account -> store */
store = MODEST_STORE_WIDGET(priv->store_widget);
- store_name = g_strdup_printf ("%s:%s@%s",
- modest_store_widget_get_proto (store),
- modest_store_widget_get_username (store),
- modest_store_widget_get_servername (store));
+ proto = modest_store_widget_get_proto (store);
+ username = modest_store_widget_get_username (store);
+ servername = modest_store_widget_get_servername (store);
+ store_name = g_strdup_printf ("%s:%s@%s", proto, username, servername);
+
+ modest_account_mgr_add_server_account (priv->account_mgr, store_name, servername,
+ username, NULL, proto);
+
+ /* create server account -> transport */
+ transport = MODEST_TRANSPORT_WIDGET(priv->transport_widget);
+ proto = modest_transport_widget_get_proto (transport);
+
+ if (!strcmp (proto, MODEST_PROTO_SMTP)) {
+ servername = modest_transport_widget_get_servername (transport);
+ if (modest_transport_widget_get_requires_auth (transport))
+ username = modest_transport_widget_get_username (transport);
+ else
+ username = g_get_user_name ();
+ } else {
+ username = g_get_user_name ();
+ servername = "localhost";
+
+ }
+ transport_name = g_strdup_printf ("%s:%s@%s", proto, username, servername);
modest_account_mgr_add_server_account (priv->account_mgr,
- store_name,
- modest_store_widget_get_servername (store),
- modest_store_widget_get_username (store),
+ transport_name,
+ servername,
+ username,
NULL,
- modest_store_widget_get_proto (store));
+ proto);
- /* create server account -> transport */
+ /* create account */
account_name = get_account_name (self);
modest_account_mgr_add_account (priv->account_mgr,
account_name,
account_name,
MODEST_ACCOUNT_EMAIL,
get_email(self), FALSE, NULL);
-
+
+ /* Frees */
g_free (store_name);
+ g_free (transport_name);
}
G_CALLBACK(on_apply), NULL);
g_signal_connect (G_OBJECT(self), "cancel",
G_CALLBACK(on_cancel), NULL);
+ g_signal_connect (G_OBJECT(self), "close",
+ G_CALLBACK(on_close), NULL);
return GTK_WIDGET(self);
}