]> sjero.net Git - linphone/blob - gtk/loginframe.c
fix login frame
[linphone] / gtk / loginframe.c
1 /*
2 linphone, gtk-glade interface.
3 Copyright (C) 2009  Simon MORLAT (simon.morlat@linphone.org)
4
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18 */
19
20 #include "linphone.h"
21
22 void linphone_gtk_login_frame_connect_clicked(GtkWidget *button);
23 void linphone_gtk_exit_login_frame(void);
24
25 enum {
26         NetworkKindAdsl,
27         NetworkKindOpticalFiber
28 };
29
30 static void do_login(SipSetupContext *ssctx, const char *identity, const char * passwd){
31         if (sip_setup_context_login_account(ssctx,identity,passwd)==0){
32         }
33 }
34
35 static gboolean do_login_noprompt(LinphoneProxyConfig *cfg){
36         SipSetupContext *ssctx=linphone_proxy_config_get_sip_setup_context(cfg);
37         LinphoneAddress *addr;
38         const char *username;
39         char *tmp;
40         if (ssctx==NULL) return TRUE;/*not ready ?*/
41         username=linphone_gtk_get_ui_config ("login_username",NULL);
42         if (username==NULL) {
43                 linphone_gtk_set_ui_config_int("automatic_login",0);
44                 linphone_gtk_show_login_frame(cfg);
45                 return FALSE;
46         }
47         addr=linphone_address_new(linphone_proxy_config_get_identity(cfg));
48         linphone_address_set_username(addr,username);
49         tmp=linphone_address_as_string (addr);
50         do_login(ssctx,tmp,NULL);
51         linphone_address_destroy(addr);
52         return FALSE;
53 }
54
55 void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg){
56         GtkWidget *mw=linphone_gtk_get_main_window();
57         GtkWidget *label=linphone_gtk_get_widget(mw,"login_label");
58         const LinphoneAuthInfo *ai;
59         gchar *str;
60         LinphoneAddress *from;
61         LinphoneCore *lc=linphone_gtk_get_core();
62         int nettype;
63         const char *passwd=NULL;
64
65         
66         if (linphone_core_get_download_bandwidth(lc)==512 &&
67                 linphone_core_get_upload_bandwidth(lc)==512)
68                 nettype=NetworkKindOpticalFiber;
69         else nettype=NetworkKindAdsl;
70         gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(mw,"login_internet_kind")),nettype);
71         //gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(mw,"internet_kind")),nettype);
72         
73         if (linphone_gtk_get_ui_config_int("automatic_login",0) ){
74                 g_timeout_add(250,(GSourceFunc)do_login_noprompt,cfg);
75                 return;
76         }
77
78         {
79                 const char *login_image=linphone_gtk_get_ui_config("login_image",NULL);
80                 if (login_image){
81                         GdkPixbuf *pbuf=create_pixbuf (login_image);
82                         gtk_image_set_from_pixbuf (GTK_IMAGE(linphone_gtk_get_widget(mw,"login_image")),
83                                                    pbuf);
84                         g_object_unref(G_OBJECT(pbuf));
85                 }
86         }
87
88         gtk_widget_hide(linphone_gtk_get_widget(mw,"disconnect_item"));
89         gtk_widget_hide(linphone_gtk_get_widget(mw,"main_frame"));
90         gtk_widget_show(linphone_gtk_get_widget(mw,"login_frame"));
91         gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),FALSE);
92         str=g_strdup_printf(_("Please enter login information for %s"),linphone_proxy_config_get_domain(cfg));
93         gtk_label_set_text(GTK_LABEL(label),str);
94         g_object_set_data(G_OBJECT(mw),"login_proxy_config",cfg);
95         g_free(str);
96
97         from=linphone_address_new(linphone_proxy_config_get_identity(cfg));
98         if (linphone_address_get_username(from)[0]=='?'){
99                 const char *username=linphone_gtk_get_ui_config ("login_username",NULL);
100                 if (username)
101                         linphone_address_set_username(from,username);
102         }
103         
104         ai=linphone_core_find_auth_info(lc,linphone_proxy_config_get_domain(cfg),linphone_address_get_username(from));
105         /*display the last entered username, if not '?????'*/
106         if (linphone_address_get_username(from)[0]!='?')
107                 gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_username")),
108                         linphone_address_get_username(from));
109         if (ai) passwd=linphone_auth_info_get_passwd(ai);
110         gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_password")),
111                 passwd!=NULL ? passwd : "");
112         
113         linphone_address_destroy(from);
114 }
115
116 void linphone_gtk_exit_login_frame(void){
117         GtkWidget *mw=linphone_gtk_get_main_window();
118         gtk_widget_show(linphone_gtk_get_widget(mw,"main_frame"));
119         gtk_widget_hide(linphone_gtk_get_widget(mw,"login_frame"));
120         gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),TRUE);
121         gtk_widget_show(linphone_gtk_get_widget(mw,"disconnect_item"));
122 }
123
124 void linphone_gtk_logout_clicked(){
125         LinphoneCore *lc=linphone_gtk_get_core();
126         LinphoneProxyConfig *cfg=NULL;
127         linphone_core_get_default_proxy(lc,&cfg);
128         if (cfg){
129                 SipSetupContext *ss=linphone_proxy_config_get_sip_setup_context(cfg);
130                 if (ss){
131                         sip_setup_context_logout(ss);
132                         linphone_gtk_set_ui_config_int("automatic_login",FALSE);
133                         linphone_gtk_show_login_frame(cfg);
134                 }
135         }
136 }
137
138
139
140 void linphone_gtk_login_frame_connect_clicked(GtkWidget *button){
141         GtkWidget *mw=gtk_widget_get_toplevel(button);
142         const char *username;
143         const char *password;
144         char *identity;
145         gboolean autologin;
146         LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)g_object_get_data(G_OBJECT(mw),"login_proxy_config");
147         LinphoneAddress *from;
148         SipSetupContext *ssctx=linphone_proxy_config_get_sip_setup_context(cfg);
149
150         username=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_username")));
151         password=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_password")));
152
153         if (username==NULL || username[0]=='\0')
154                 return;
155
156         autologin=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(mw,"automatic_login")));
157         linphone_gtk_set_ui_config_int("automatic_login",autologin);
158         linphone_gtk_set_ui_config("login_username",username);
159
160         from=linphone_address_new(linphone_proxy_config_get_identity(cfg));
161         linphone_address_set_username(from,username);
162         identity=linphone_address_as_string(from);
163         do_login(ssctx,identity,password);
164         /*we need to refresh the identities since the proxy config may have changed.*/
165         linphone_gtk_load_identities();
166 }
167
168 void linphone_gtk_internet_kind_changed(GtkWidget *combo){
169         int netkind_id=gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
170         LinphoneCore *lc=linphone_gtk_get_core();
171         if (netkind_id==NetworkKindAdsl){
172                 linphone_core_set_upload_bandwidth(lc,256);
173                 linphone_core_set_download_bandwidth(lc,512);
174         }else if (netkind_id==NetworkKindOpticalFiber){
175                 linphone_core_set_upload_bandwidth(lc,512);
176                 linphone_core_set_download_bandwidth(lc,512);
177         }
178 }