[anjal] Initiate account druid. Next onto edit/delete accounts.



commit ecd9bb18bf8eaaf68ba5d6ef2af7b797fc002f0b
Author: Srinivasa Ragavan <sragavan novell com>
Date:   Mon May 4 23:14:44 2009 +0530

    Initiate account druid. Next onto edit/delete accounts.
---
 src/mail-account-view.c |  278 ++++++++++++++++++++++++++++++++++++++---------
 src/mail-account-view.h |    5 +-
 src/mail-shell.c        |   11 ++-
 3 files changed, 239 insertions(+), 55 deletions(-)

diff --git a/src/mail-account-view.c b/src/mail-account-view.c
index d342507..43b2d8d 100644
--- a/src/mail-account-view.c
+++ b/src/mail-account-view.c
@@ -30,6 +30,7 @@
 #include "mail-component.h"
 #include "mail-view.h"
 #include "e-util/e-icon-factory.h"
+#include "e-util/e-config.h"
 
 struct _MailAccountViewPrivate {
 	GtkWidget *tab_str;
@@ -80,18 +81,6 @@ mail_account_view_class_init (MailAccountViewClass *klass)
 }
 
 enum {
-	ENC_NONE=0,
-	ENC_TLS,
-	ENC_SSL
-};
-
-enum {
-	SRV_IMAP=0,
-	SRV_POP,
-	SRV_LAST
-};
-
-enum {
 	GMAIL = 0,
 	YAHOO,
 	AOL
@@ -100,12 +89,13 @@ struct _server_prefill {
 	char *key;
 	char *recv;
 	char *send;
-	int proto;
-	int ssl;
+	char *proto;
+	char *ssl;
 } std_server [] = {
-	{"gmail", "imap.gmail.com", "smtp.gmail.com", SRV_IMAP, ENC_SSL},
-	{"yahoo", "pop3.yahoo.com", "smtp.yahoo.com", SRV_POP, ENC_NONE},
-	{"aol", "imap.aol.com", "smtp.aol.com", SRV_IMAP, ENC_NONE},
+	{"gmail", "imap.gmail.com", "smtp.gmail.com", "imap", "always"},
+	{"yahoo", "pop3.yahoo.com", "smtp.yahoo.com", "pop", "never"},
+	{"aol", "imap.aol.com", "smtp.aol.com", "pop", "never"},
+	{"msn", "pop3.email.msn.com", "smtp.email.msn.com", "pop", "never"}
 };
 
 static int
@@ -126,27 +116,47 @@ save_identity (MailAccountView *view)
 {
 #if 0	
 	if (!view->original) {
-		char *tmp = gtk_entry_get_text (view->email);
+		char *tmp = e_account_get_string(view->edit->account, E_ACCOUNT_ID_ADDRESS);
 		char **token;
 		int index; 
+
 		if (tmp && *tmp) {
 			token = g_strsplit (tmp, "@", 2);
 			index = check_servers(token[1]);
 	
-			gtk_entry_set_text (view->source->username, token[0]);
-			gtk_entry_set_text (view->transport->username, token[0]);
 			if (index != -1) {
-				gtk_combo_box_set_active (view->source->providers, std_server[index].proto);
-				gtk_combo_box_set_active (view->source->use_ssl, std_server[index].ssl);
-				gtk_combo_box_set_active (view->transport->use_ssl, std_server[index].ssl);
-
-				gtk_entry_set_text (view->source->hostname, std_server[index].recv);
-				gtk_entry_set_text (view->transport->hostname, std_server[index].send);
+				char *uri = e_account_get_string(view->edit->account, E_ACCOUNT_SOURCE_URL);
+				CamelURL *url;
+				if (uri == NULL || (url = camel_url_new(uri, NULL)) == NULL)
+					return;
+				
+				if (strcmp(url->protocol, std_server[index].proto)) {
+					camel_url_set_protocol (url, std_server[index].proto);
+					g_datalist_clear (&url->params);
+				}
+				camel_url_set_param(url, "use_ssl", std_server[index].ssl);
+				camel_url_set_host (url, std_server[index].recv);
+				camel_url_set_user (url, token[0]);
+				uri = camel_url_to_string(url, 0);
+				e_account_set_string(view->edit->account, E_ACCOUNT_SOURCE_URL, uri);
+				g_free(uri);
+
+				uri = e_account_get_string(view->edit->account, E_ACCOUNT_TRANSPORT_URL);
+				if (uri == NULL || (url = camel_url_new(uri, NULL)) == NULL)
+					return;
+				
+				camel_url_set_protocol (url, "smtp");
+				camel_url_set_param(url, "use_ssl", std_server[index].ssl);
+				camel_url_set_host (url, std_server[index].recv);
+				camel_url_set_user (url, token[0]);
+				uri = camel_url_to_string(url, 0);
+				e_account_set_string(view->edit->account, E_ACCOUNT_TRANSPORT_URL, uri);
+				g_free(uri);
 			}
 			g_strfreev(token);
 		}
 	}
-#endif	
+#endif
 }
 
 static void
@@ -159,6 +169,155 @@ save_account (MailAccountView *view)
 {
 }
 
+#define PACK_BOX(w) box = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(box, w, FALSE, FALSE, 12); gtk_widget_show(box);
+#define PACK_BOXF(w) box = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(box, w, FALSE, FALSE, 0); gtk_widget_show(box);
+
+static GtkWidget *
+create_review (MailAccountView *view)
+{
+	GtkWidget *table, *box, *tmp, *label, *entry;
+	char *uri; 
+	char *enc;
+	CamelURL *url;
+
+	uri = e_account_get_string(view->edit->account, E_ACCOUNT_SOURCE_URL);
+	if (!uri  || (url = camel_url_new(uri, NULL)) == NULL)
+		return;
+
+	table = gtk_table_new (4,2, FALSE);
+	gtk_table_set_row_spacings (table, 4);
+
+	label = gtk_label_new (NULL);
+	gtk_label_set_markup (label, _("<span size=\"large\" weight=\"bold\">Personal details:</span>"));
+	gtk_widget_show (label);
+	PACK_BOXF(label)
+	gtk_table_attach (table, box, 0, 1, 0, 1, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Name:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 1, 2, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new(e_account_get_string(view->edit->account, E_ACCOUNT_ID_NAME));
+	gtk_widget_show(entry);
+	PACK_BOX(entry)
+	gtk_table_attach (table, box, 1, 2, 1, 2, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Email address:"));
+	gtk_widget_show (label);
+	PACK_BOX(label)
+	gtk_table_attach (table, box, 0, 1, 2, 3, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new (e_account_get_string(view->edit->account, E_ACCOUNT_ID_ADDRESS));
+	gtk_widget_show(entry);
+	PACK_BOX(entry)
+	gtk_table_attach (table, box, 1, 2, 2, 3, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (NULL);
+	gtk_label_set_markup (label, _("<span size=\"large\" weight=\"bold\">Receiving details:</span>"));
+	gtk_widget_show (label);
+	PACK_BOXF(label);
+	gtk_table_attach (table, box, 0, 1, 3, 4, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Server type:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 4, 5, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new (url->protocol);
+	gtk_widget_show(entry);
+	PACK_BOX(entry)
+	gtk_table_attach (table, box, 1, 2, 4, 5, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Server address:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 5, 6, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new (url->host);
+	gtk_widget_show(entry);
+	PACK_BOX(entry);
+	gtk_table_attach (table, box, 1, 2, 5, 6, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+
+	label = gtk_label_new (_("Username:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 6, 7, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new (url->user);
+	gtk_widget_show(entry);
+	PACK_BOX(entry);
+	gtk_table_attach (table, box, 1, 2, 6, 7, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Use encryption:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 7, 8, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	enc = camel_url_get_param(url, "use_ssl");
+	entry = gtk_label_new (enc ? enc : _("never"));
+	gtk_widget_show(entry);
+	PACK_BOX(entry);
+	gtk_table_attach (table, box, 1, 2, 7, 8, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	camel_url_free(url);
+	uri = e_account_get_string(view->edit->account, E_ACCOUNT_TRANSPORT_URL);
+	if (!uri  || (url = camel_url_new(uri, NULL)) == NULL)
+		return;
+
+	label = gtk_label_new (NULL);
+	gtk_label_set_markup (label, _("<span size=\"large\" weight=\"bold\">Sending details:</span>"));
+	gtk_widget_show (label);
+	PACK_BOXF(label);
+	gtk_table_attach (table, box, 0, 1, 8, 9, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Server type:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 9, 10, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new (url->protocol);
+	gtk_widget_show(entry);
+	PACK_BOX(entry)
+	gtk_table_attach (table, box, 1, 2, 9, 10, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Server address:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 10, 11, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new (url->host);
+	gtk_widget_show(entry);
+	PACK_BOX(entry);
+	gtk_table_attach (table, box, 1, 2, 10, 11, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+
+	label = gtk_label_new (_("Username:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 11, 12, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	entry = gtk_label_new (url->user);
+	gtk_widget_show(entry);
+	PACK_BOX(entry);
+	gtk_table_attach (table, box, 1, 2, 11, 12, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+
+	label = gtk_label_new (_("Use encryption:"));
+	gtk_widget_show (label);
+	PACK_BOX(label);
+	gtk_table_attach (table, box, 0, 1, 12, 13, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	enc = camel_url_get_param(url, "use_ssl");
+	entry = gtk_label_new (enc ? enc : _("never"));
+	gtk_widget_show(entry);
+	PACK_BOX(entry);
+	gtk_table_attach (table, box, 1, 2, 12, 13, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	
+/*
+	label = gtk_label_new (_("Organization:"));
+	gtk_widget_show (label);
+	entry = gtk_entry_new ();
+	gtk_widget_show(entry);
+	gtk_table_attach (table, label, 0, 1, 3, 4, GTK_SHRINK, GTK_SHRINK, 10, 3);
+	gtk_table_attach (table, entry, 1, 2, 3, 4, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 10, 3);
+	*/
+
+	gtk_widget_show(table);	
+
+	return table;
+}
+
 #define IDENTITY_DETAIL N_("To use the email application you'll need to setup an account. Put your email address and password in below \nand we'll try and work out all the settings. If we can't do it automatically you'll need your server details as well.")
 
 #define RECEIVE_DETAIL N_("Sorry, we can't work out the settings to get your mail automatically. Please enter them below. We've tried \n to make a start with the details you just entered but you may need to change them.")
@@ -172,6 +331,7 @@ struct _page_text {
 	char *next;
 	char *prev;
 	char *detail;
+	char *path;
 	GtkWidget * (*create_page) (MailAccountView *view);
 	void (*fill_page) (MailAccountView *view);
 	void (*save_page) (MailAccountView *view);
@@ -181,10 +341,10 @@ struct _page_text {
 	//{ MAV_SEND_PAGE, N_("Sending mail"), N_("Next - Review account"), N_("Back - Receiving mail"), SEND_DETAIL, create_send_page, fill_send, save_send},
 	//{ MAV_REVIEW_PAGE, N_("Review account"), N_("Finish"), N_("Back - Sending"), REVIEW_DETAIL, NULL, NULL, save_account},
 
-	{ MAV_IDENTITY_PAGE, N_("Identity"), N_("Next - Receiving mail"), NULL, IDENTITY_DETAIL, NULL, NULL, save_identity, },
-	{ MAV_RECV_PAGE, N_("Receiving mail"), N_("Next - Sending mail"), N_("Back - Identity"), RECEIVE_DETAIL, NULL, NULL, NULL },
-	{ MAV_SEND_PAGE, N_("Sending mail"), N_("Next - Review account"), N_("Back - Receiving mail"), SEND_DETAIL, NULL, NULL, NULL},
-	{ MAV_REVIEW_PAGE, N_("Review account"), N_("Finish"), N_("Back - Sending"), REVIEW_DETAIL, NULL, NULL, NULL},
+	{ MAV_IDENTITY_PAGE, N_("Identity"), N_("Next - Receiving mail"), NULL, IDENTITY_DETAIL, "00.identity",NULL, NULL, save_identity, },
+	{ MAV_RECV_PAGE, N_("Receiving mail"), N_("Next - Sending mail"), N_("Back - Identity"), RECEIVE_DETAIL, "10.receive", NULL, NULL, NULL },
+	{ MAV_SEND_PAGE, N_("Sending mail"), N_("Next - Review account"), N_("Back - Receiving mail"), SEND_DETAIL, "30.send", NULL, NULL, NULL},
+	{ MAV_REVIEW_PAGE, N_("Review account"), N_("Finish"), N_("Back - Sending"), REVIEW_DETAIL, NULL, create_review, NULL},
 };
 
 static void
@@ -194,12 +354,37 @@ mav_next_pressed (GtkButton *button, MailAccountView *mav)
 	if (mail_account_pages[mav->current_page].save_page) {
 		(*mail_account_pages[mav->current_page].save_page) (mav);
 	}
-	if (mav->current_page == MAV_LAST - 1)
+	if (mav->current_page == MAV_LAST - 2) {
+		MAVPage *page = mav->pages[mav->current_page + 1];
+		GtkWidget *tmp;
+
+		if (page->main)
+			gtk_widget_destroy (page->main);
+
+		tmp = mail_account_pages[mav->current_page+1].create_page(mav);
+		page->main = gtk_hbox_new (FALSE, 0);
+		gtk_widget_show (page->main);
+		gtk_box_pack_start(page->main, tmp, FALSE, FALSE, 0);
+		gtk_widget_show(tmp);
+		gtk_box_pack_start(page->box, page->main, FALSE, FALSE, 3);
+	}
+
+	if (mav->current_page == MAV_LAST - 1) {
+		e_account_set_string (mav->edit->account, E_ACCOUNT_NAME, e_account_get_string(mav->edit->account, E_ACCOUNT_ID_ADDRESS));
+		em_account_editor_commit (mav->edit);
+		g_signal_emit (mav, signals[VIEW_CLOSE], 0);			
 		return;
+	}
 
 	gtk_widget_hide (mav->pages[mav->current_page]->box);
 	mav->current_page++;
 	gtk_widget_show (mav->pages[mav->current_page]->box);
+	if (!mav->pages[mav->current_page]->done) {
+		mav->pages[mav->current_page]->done = TRUE;
+		if (mail_account_pages[mav->current_page].path) {
+			em_account_editor_check(mav->edit, mail_account_pages[mav->current_page].path);
+		}
+	}
 }
 
 static void
@@ -244,9 +429,13 @@ mav_construct_page(MailAccountView *view, MAVPageType type)
 	gtk_widget_show(tmp);
 	gtk_box_pack_start(box, tmp, FALSE, FALSE, 12);
 
-	if (mail_account_pages[type].create_page) {
+	page->main = NULL;
+	if (mail_account_pages[type].create_page && mail_account_pages[type].path) {
 		tmp = (*mail_account_pages[type].create_page) (view);
 		gtk_box_pack_start (page->box, tmp, FALSE, FALSE, 3);
+		page->main = gtk_hbox_new (FALSE, 0);
+		gtk_widget_show (page->main);
+		gtk_box_pack_start(page->main, tmp, FALSE, FALSE, 0);
 	}
 
 	if (mail_account_pages[type].fill_page) {
@@ -301,27 +490,9 @@ mail_account_view_construct (MailAccountView *view)
 	gtk_scrolled_window_add_with_viewport (view->scroll, view->page_widget);
 	gtk_widget_show_all (view->scroll);
 	
-	if (view->original) {
-		char *xml;
-
-		g_object_ref(view->original);
-		xml = e_account_to_xml(view->original);
-		view->account = e_account_new_from_xml(xml);
-		g_free(xml);
-
-		//view->do_signature = TRUE;		
-	} else {
-		/* TODO: have a get_default_account thing?? */
-		view->account = e_account_new();
-		view->account->enabled = TRUE;
-		e_account_set_string(view->account, E_ACCOUNT_DRAFTS_FOLDER_URI,
-				     mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_DRAFTS));
-		e_account_set_string(view->account, E_ACCOUNT_SENT_FOLDER_URI,
-				     mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_SENT));		
-	}
-	
 	for (i=0; i<MAV_LAST; i++) {
 		view->pages[i] = mav_construct_page (view, i);
+		view->pages[i]->done = FALSE;
 		view->wpages[i] = view->pages[i]->box;
 		gtk_box_pack_start (view->page_widget, view->pages[i]->box, TRUE, TRUE, 0);
 		gtk_widget_hide (view->pages[i]->box);
@@ -330,6 +501,9 @@ mail_account_view_construct (MailAccountView *view)
 	view->current_page = 0;
 	gtk_box_pack_start (view, view->scroll, TRUE, TRUE, 0);
 	view->edit = em_account_editor_new_for_pages (view->original, EMAE_PAGES, "org.gnome.evolution.mail.config.accountWizard", view->wpages);
+	em_account_editor_check (view->edit, mail_account_pages[0].path);
+	view->pages[0]->done = TRUE;
+
 }
 
 MailAccountView *
diff --git a/src/mail-account-view.h b/src/mail-account-view.h
index 7531c8f..763ba30 100644
--- a/src/mail-account-view.h
+++ b/src/mail-account-view.h
@@ -49,9 +49,11 @@ typedef enum {
 
 typedef struct _MAVPage {
 	GtkWidget *box;
+	GtkWidget *main;
 	MAVPageType type;
 	GtkWidget *next;
 	GtkWidget *prev;
+	gboolean done;
 }MAVPage;
 
 
@@ -64,10 +66,9 @@ typedef struct _MailAccountView {
 
 	GtkWidget *scroll;
 	GtkWidget *page_widget;
-	EAccount *original;
-	EAccount *account;
 
 	MAVPage *pages[4];
+	struct _EAccount *original;
 	GtkWidget *wpages[4];
 	int current_page;
 	struct _EMAccountEditor *edit;
diff --git a/src/mail-shell.c b/src/mail-shell.c
index 57b0f7b..c059cc1 100644
--- a/src/mail-shell.c
+++ b/src/mail-shell.c
@@ -254,6 +254,12 @@ ms_check_new ()
 	return TRUE;
 }
 
+static void
+ms_show_post_druid (MailViewChild *mfv, MailShell *shell)
+{
+	gtk_widget_show (((MailView *) shell->mail_component->mail_view)->folder_tree);
+}
+
 void
 mail_shell_construct (MailShell *shell)
 {
@@ -402,8 +408,11 @@ mail_shell_construct (MailShell *shell)
 	mail_view_set_check_email (shell->mail_component->mail_view, priv->check_mail);
 
 	if (ms_check_new()) {
+		MailViewChild *mc;
+
 		gtk_widget_hide (((MailView *) shell->mail_component->mail_view)->folder_tree);
-		mail_view_add_page (shell->mail_component->mail_view, MAIL_VIEW_ACCOUNT);
+		mc = mail_view_add_page (shell->mail_component->mail_view, MAIL_VIEW_ACCOUNT);
+		g_signal_connect (mc, "view-close", G_CALLBACK(ms_show_post_druid), shell);
 	}
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]