diff --git a/gtk/setupwizard.c b/gtk/setupwizard.c index b34be8aef3a31a0b1e6018118e825b0608165bd9..25cc78ffcd7b5eb34244ab039de302cb992f7d3c 100644 --- a/gtk/setupwizard.c +++ b/gtk/setupwizard.c @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "linphone.h" #include <glib.h> #include <glib/gprintf.h> +#include <pthread.h> static LinphoneAccountCreator *linphone_gtk_assistant_get_creator(GtkWidget*w); static const int PASSWORD_MIN_SIZE = 6; @@ -61,7 +62,7 @@ static int all_account_information_entered(GtkWidget *w) { if (gtk_entry_get_text_length(username) > 0 && gtk_entry_get_text_length(domain) > 0 && - g_regex_match_simple("^(sip:)?[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$", gtk_entry_get_text(username), 0, 0) && + g_regex_match_simple("^[a-zA-Z]+[a-zA-Z0-9.\\-_]{2,}$", gtk_entry_get_text(username), 0, 0) && g_regex_match_simple("^(sip:)?([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$", gtk_entry_get_text(domain), 0, 0)) { return 1; } @@ -70,14 +71,6 @@ static int all_account_information_entered(GtkWidget *w) { static void account_informations_changed(GtkEntry *entry, GtkWidget *w) { GtkWidget *assistant=gtk_widget_get_toplevel(w); - GtkEntry* username = GTK_ENTRY(g_object_get_data(G_OBJECT(w),"username")); - GtkEntry* domain = GTK_ENTRY(g_object_get_data(G_OBJECT(w),"domain")); - - const gchar *needle = "@"; - if (entry == username && g_strrstr(gtk_entry_get_text(username), needle) != NULL) { - gtk_entry_set_text(domain, g_strrstr(gtk_entry_get_text(username), needle)+1); - } - gtk_assistant_set_page_complete(GTK_ASSISTANT(assistant),w, all_account_information_entered(w)>0); } @@ -128,35 +121,24 @@ static GtkWidget *create_account_informations_page() { GtkWidget *labelEmpty=gtk_label_new(NULL); gtk_widget_modify_fg(labelEmpty, GTK_STATE_NORMAL, &color); - GtkWidget *labelUsername=gtk_label_new(_("Identity:")); - GtkWidget *labelUsernameExemple=gtk_label_new(_("example: user@sip.linphone.org")); - GtkWidget *labelPassword=gtk_label_new(_("Password:")); + GtkWidget *labelUsername=gtk_label_new(_("Username*")); + GtkWidget *labelPassword=gtk_label_new(_("Password*")); GtkWidget *entryPassword=gtk_entry_new(); gtk_entry_set_visibility(GTK_ENTRY(entryPassword), FALSE); - GtkWidget *labelDomain=gtk_label_new(_("Proxy:")); - GtkWidget *labelDomainExemple=gtk_label_new(_("example: sip.linphone.org")); - GtkWidget *labelRoute=gtk_label_new(_("Route (optional):")); + GtkWidget *labelDomain=gtk_label_new(_("Domain*")); + GtkWidget *labelProxy=gtk_label_new(_("Proxy")); GtkWidget *entryUsername=gtk_entry_new(); GtkWidget *entryDomain=gtk_entry_new(); GtkWidget *entryRoute=gtk_entry_new(); - GtkWidget *vbox1=gtk_vbox_new(FALSE, 1); - gtk_box_pack_start (GTK_BOX (vbox1), entryUsername, TRUE, TRUE, 1); - gtk_box_pack_start (GTK_BOX (vbox1), labelUsernameExemple, TRUE, TRUE, 1); - GtkWidget *vbox2=gtk_vbox_new(FALSE, 1); - gtk_box_pack_start (GTK_BOX (vbox2), entryDomain, TRUE, TRUE, 1); - gtk_box_pack_start (GTK_BOX (vbox2), labelDomainExemple, TRUE, TRUE, 1); - gtk_table_set_row_spacing(GTK_TABLE(vbox), 1, 10); - gtk_table_set_row_spacing(GTK_TABLE(vbox), 3, 5); - gtk_table_attach_defaults(GTK_TABLE(vbox), label, 0, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(vbox), labelUsername, 0, 1, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(vbox), vbox1, 1, 2, 1, 2); + gtk_table_attach_defaults(GTK_TABLE(vbox), entryUsername, 1, 2, 1, 2); gtk_table_attach_defaults(GTK_TABLE(vbox), labelPassword, 0, 1, 2, 3); gtk_table_attach_defaults(GTK_TABLE(vbox), entryPassword, 1, 2, 2, 3); gtk_table_attach_defaults(GTK_TABLE(vbox), labelDomain, 0, 1, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(vbox), vbox2, 1, 2, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(vbox), labelRoute, 0, 1, 4, 5); + gtk_table_attach_defaults(GTK_TABLE(vbox), entryDomain, 1, 2, 3, 4); + gtk_table_attach_defaults(GTK_TABLE(vbox), labelProxy, 0, 1, 4, 5); gtk_table_attach_defaults(GTK_TABLE(vbox), entryRoute, 1, 2, 4, 5); gtk_table_attach_defaults(GTK_TABLE(vbox), labelEmpty, 0, 2, 5, 6); gtk_widget_show_all(vbox); @@ -164,7 +146,7 @@ static GtkWidget *create_account_informations_page() { g_object_set_data(G_OBJECT(vbox),"username",entryUsername); g_object_set_data(G_OBJECT(vbox),"password",entryPassword); g_object_set_data(G_OBJECT(vbox),"domain",entryDomain); - g_object_set_data(G_OBJECT(vbox),"route",entryRoute); + g_object_set_data(G_OBJECT(vbox),"proxy",entryRoute); g_object_set_data(G_OBJECT(vbox),"errorstring",labelEmpty); g_signal_connect(G_OBJECT(entryUsername),"changed",(GCallback)account_informations_changed,vbox); g_signal_connect(G_OBJECT(entryDomain),"changed",(GCallback)account_informations_changed,vbox); @@ -243,10 +225,8 @@ static void account_password_changed(GtkEntry *entry, GtkWidget *w) { is_account_information_correct(w)>0); } -static void account_username_changed(GtkEntry *entry, GtkWidget *w) { - // Verifying if username choosed is available, and if form is correctly filled, let the user go next page - - GtkWidget *assistant=gtk_widget_get_toplevel(w); +void* check_username_availability(void* w) { + GtkWidget *assistant=gtk_widget_get_toplevel(GTK_WIDGET(w)); GtkEntry* username = GTK_ENTRY(g_object_get_data(G_OBJECT(w),"username")); GtkImage* isUsernameOk = GTK_IMAGE(g_object_get_data(G_OBJECT(w),"usernameOk")); GtkLabel* usernameError = GTK_LABEL(g_object_get_data(G_OBJECT(w),"error")); @@ -280,6 +260,14 @@ static void account_username_changed(GtkEntry *entry, GtkWidget *w) { gtk_assistant_set_page_complete(GTK_ASSISTANT(assistant),w, is_account_information_correct(w)>0); + + return NULL; +} + +static void account_username_changed(GtkEntry *entry, GtkWidget *w) { + // Verifying if username choosed is available, and if form is correctly filled, let the user go next page + pthread_t thread; + pthread_create(&thread, NULL, check_username_availability, (void*)w); } static GtkWidget *create_account_information_page() { @@ -323,7 +311,7 @@ static GtkWidget *create_account_information_page() { gtk_table_attach_defaults(GTK_TABLE(vbox), passwordVbox1, 0, 1, 3, 4); gtk_table_attach_defaults(GTK_TABLE(vbox), passwordVbox2, 1, 2, 3, 4); gtk_table_attach_defaults(GTK_TABLE(vbox), isPasswordOk, 2, 3, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(vbox), labelError, 1, 2, 5, 6); + gtk_table_attach_defaults(GTK_TABLE(vbox), labelError, 1, 4, 5, 6); gtk_table_attach_defaults(GTK_TABLE(vbox), checkNewsletter, 0, 3, 6, 7); gtk_widget_show_all(vbox); @@ -447,22 +435,15 @@ static int linphone_gtk_assistant_forward(int curpage, gpointer data){ } else if (curpage == 2) { // Account's informations entered LinphoneAccountCreator *c=linphone_gtk_assistant_get_creator(w); - if (!g_regex_match_simple("^sip:[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$", gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"username"))), 0, 0)) { - gchar identity[128]; - g_snprintf(identity, sizeof(identity), "sip:%s", gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"username")))); - linphone_account_creator_set_username(c, identity); - } else { - linphone_account_creator_set_username(c, gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"username")))); - } + gchar identity[128]; + g_snprintf(identity, sizeof(identity), "sip:%s@%s", gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"username"))), gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"domain")))); - if (!g_regex_match_simple("^sip:([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$", gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"domain"))), 0, 0)) { - gchar proxy[128]; - g_snprintf(proxy, sizeof(proxy), "sip:%s", gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"domain")))); - linphone_account_creator_set_domain(c, proxy); - } else { - linphone_account_creator_set_domain(c, gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"domain")))); - } - linphone_account_creator_set_route(c, gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"route")))); + gchar proxy[128]; + g_snprintf(proxy, sizeof(proxy), "sip:%s", gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"domain")))); + + linphone_account_creator_set_username(c, identity); + linphone_account_creator_set_domain(c, proxy); + linphone_account_creator_set_route(c, gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"proxy")))); linphone_account_creator_set_password(c,gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"password")))); curpage = gtk_assistant_get_n_pages(GTK_ASSISTANT(w)) - 1; // Going to the last page }