comparison src/scrobbler/configure.c @ 2943:d3e42ee17c93

added password prompt
author Andrew O. Shadoura <bugzilla@tut.by>
date Sun, 28 Sep 2008 19:12:11 +0300
parents 19fb7d7dcf4e
children d93a97ce253d
comparison
equal deleted inserted replaced
2942:233cb5dffbf7 2943:d3e42ee17c93
18 18
19 #include "configure.h" 19 #include "configure.h"
20 #include "plugin.h" 20 #include "plugin.h"
21 21
22 GtkWidget *entry1, *entry2, *ge_entry1, *ge_entry2, *cfgdlg; 22 GtkWidget *entry1, *entry2, *ge_entry1, *ge_entry2, *cfgdlg;
23 static GdkColor disabled_color;
23 guint apply_timeout = 0; /* ID of timeout to save new config */ 24 guint apply_timeout = 0; /* ID of timeout to save new config */
24 gboolean running = TRUE; /* if plugin threads are running */ 25 gboolean running = TRUE; /* if plugin threads are running */
25 26
26 static char *hexify(char *pass, int len) 27 static char *hexify(char *pass, int len)
27 { 28 {
38 } 39 }
39 *bp = 0; 40 *bp = 0;
40 return buf; 41 return buf;
41 } 42 }
42 43
44 static char *pwd = NULL;
45 static char *ge_pwd = NULL;
46
43 static void saveconfig(void) 47 static void saveconfig(void)
44 { 48 {
45 mcs_handle_t *cfgfile; 49 mcs_handle_t *cfgfile;
46 50
47 const char *uid = gtk_entry_get_text(GTK_ENTRY(entry1)); 51 const char *uid = gtk_entry_get_text(GTK_ENTRY(entry1));
48 const char *pwd = gtk_entry_get_text(GTK_ENTRY(entry2));
49 const char *ge_uid = gtk_entry_get_text(GTK_ENTRY(ge_entry1)); 52 const char *ge_uid = gtk_entry_get_text(GTK_ENTRY(ge_entry1));
50 const char *ge_pwd = gtk_entry_get_text(GTK_ENTRY(ge_entry2));
51 53
52 if ((cfgfile = aud_cfg_db_open())) { 54 if ((cfgfile = aud_cfg_db_open())) {
53 aud_md5state_t md5state; 55 aud_md5state_t md5state;
54 unsigned char md5pword[16], ge_md5pword[16]; 56 unsigned char md5pword[16], ge_md5pword[16];
55 57
97 if (apply_timeout) { /* config has been changed, but wasn't saved yet */ 99 if (apply_timeout) { /* config has been changed, but wasn't saved yet */
98 g_source_remove(apply_timeout); 100 g_source_remove(apply_timeout);
99 apply_timeout = 0; 101 apply_timeout = 0;
100 saveconfig(); 102 saveconfig();
101 } 103 }
104 g_free(pwd);
105 g_free(ge_pwd);
102 } 106 }
103 107
104 static void 108 static void
105 entry_changed(GtkWidget *widget, gpointer data) 109 entry_changed(GtkWidget *widget, gpointer data)
106 { 110 {
111 115
112 if (apply_timeout) 116 if (apply_timeout)
113 g_source_remove(apply_timeout); 117 g_source_remove(apply_timeout);
114 118
115 apply_timeout = g_timeout_add_seconds(10, (GSourceFunc) apply_config_changes, NULL); 119 apply_timeout = g_timeout_add_seconds(10, (GSourceFunc) apply_config_changes, NULL);
120 }
121
122 static void entry_focus_in(GtkWidget *widget, gpointer data)
123 {
124 gtk_entry_set_text(GTK_ENTRY(widget), "");
125 gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);
126 gtk_widget_modify_text(widget, GTK_STATE_NORMAL, NULL);
127 }
128
129 static void entry_focus_out(GtkWidget *widget, gpointer data)
130 {
131 if (widget == entry2)
132 {
133 g_free(pwd);
134 pwd = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry2)));
135 }
136 if (widget == ge_entry2)
137 {
138 g_free(ge_pwd);
139 ge_pwd = g_strdup(gtk_entry_get_text(GTK_ENTRY(ge_entry2)));
140 }
141 entry_changed(widget, data);
142 gtk_entry_set_text(GTK_ENTRY(widget), "Change password");
143 gtk_widget_modify_text(widget, GTK_STATE_NORMAL, &disabled_color);
144 gtk_entry_set_visibility(GTK_ENTRY(widget), TRUE);
116 } 145 }
117 146
118 /* Generated by glade, sorta. */ 147 /* Generated by glade, sorta. */
119 GtkWidget * 148 GtkWidget *
120 create_cfgdlg(void) 149 create_cfgdlg(void)
126 GtkWidget *label1; 155 GtkWidget *label1;
127 GtkWidget *label2; 156 GtkWidget *label2;
128 GtkWidget *himage1; 157 GtkWidget *himage1;
129 GtkWidget *align1; 158 GtkWidget *align1;
130 GtkWidget *notebook1; 159 GtkWidget *notebook1;
160 GtkStyle *style;
131 161
132 vbox2 = gtk_vbox_new (FALSE, 0); 162 vbox2 = gtk_vbox_new (FALSE, 0);
133 163
134 label1 = gtk_label_new (_("<b>Services</b>")); 164 label1 = gtk_label_new (_("<b>Services</b>"));
135 gtk_widget_show (label1); 165 gtk_widget_show (label1);
170 entry1 = gtk_entry_new (); 200 entry1 = gtk_entry_new ();
171 gtk_widget_show (entry1); 201 gtk_widget_show (entry1);
172 gtk_table_attach_defaults (GTK_TABLE (table1), entry1, 1, 2, 2, 3); 202 gtk_table_attach_defaults (GTK_TABLE (table1), entry1, 1, 2, 2, 3);
173 203
174 entry2 = gtk_entry_new (); 204 entry2 = gtk_entry_new ();
175 gtk_entry_set_visibility(GTK_ENTRY(entry2), FALSE); 205
206 style = gtk_widget_get_style(entry2);
207 memcpy(&disabled_color, &(style->text[GTK_STATE_INSENSITIVE]), sizeof(GdkColor));
208 gtk_widget_modify_text(entry2, GTK_STATE_NORMAL, &disabled_color);
209
210 gtk_entry_set_text(GTK_ENTRY(entry2), "Change password");
211 g_signal_connect(G_OBJECT(entry2), "focus-in-event",
212 G_CALLBACK(entry_focus_in),
213 NULL);
214 g_signal_connect(G_OBJECT(entry2), "focus-out-event",
215 G_CALLBACK(entry_focus_out),
216 NULL);
176 gtk_widget_show (entry2); 217 gtk_widget_show (entry2);
177 gtk_table_attach_defaults (GTK_TABLE (table1), entry2, 1, 2, 3, 4); 218 gtk_table_attach_defaults (GTK_TABLE (table1), entry2, 1, 2, 3, 4);
178 219
179 label1 = gtk_label_new (_("<b>Last.FM</b>")); 220 label1 = gtk_label_new (_("<b>Last.FM</b>"));
180 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE); 221 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
209 ge_entry1 = gtk_entry_new (); 250 ge_entry1 = gtk_entry_new ();
210 gtk_widget_show (ge_entry1); 251 gtk_widget_show (ge_entry1);
211 gtk_table_attach_defaults (GTK_TABLE (table1), ge_entry1, 1, 2, 2, 3); 252 gtk_table_attach_defaults (GTK_TABLE (table1), ge_entry1, 1, 2, 2, 3);
212 253
213 ge_entry2 = gtk_entry_new (); 254 ge_entry2 = gtk_entry_new ();
214 gtk_entry_set_visibility(GTK_ENTRY(ge_entry2), FALSE); 255 gtk_widget_modify_text(ge_entry2, GTK_STATE_NORMAL, &disabled_color);
256
257 gtk_entry_set_text(GTK_ENTRY(ge_entry2), "Change password");
258 g_signal_connect(G_OBJECT(ge_entry2), "focus-in-event",
259 G_CALLBACK(entry_focus_in),
260 NULL);
261 g_signal_connect(G_OBJECT(ge_entry2), "focus-out-event",
262 G_CALLBACK(entry_focus_out),
263 NULL);
264
215 gtk_widget_show (ge_entry2); 265 gtk_widget_show (ge_entry2);
216 gtk_table_attach_defaults (GTK_TABLE (table1), ge_entry2, 1, 2, 3, 4); 266 gtk_table_attach_defaults (GTK_TABLE (table1), ge_entry2, 1, 2, 3, 4);
217 267
218 label1 = gtk_label_new (_("<b>Gerpok</b>")); 268 label1 = gtk_label_new (_("<b>Gerpok</b>"));
219 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE); 269 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
226 gtk_widget_show (himage1); 276 gtk_widget_show (himage1);
227 gtk_box_pack_start (GTK_BOX (vbox2), himage1, FALSE, FALSE, 0); 277 gtk_box_pack_start (GTK_BOX (vbox2), himage1, FALSE, FALSE, 0);
228 gtk_misc_set_alignment (GTK_MISC (himage1), 1, 0.5); 278 gtk_misc_set_alignment (GTK_MISC (himage1), 1, 0.5);
229 279
230 gtk_entry_set_text(GTK_ENTRY(entry1), ""); 280 gtk_entry_set_text(GTK_ENTRY(entry1), "");
231 gtk_entry_set_text(GTK_ENTRY(entry2), ""); 281 gtk_entry_set_text(GTK_ENTRY(ge_entry), "");
232 282
233 if ((db = aud_cfg_db_open())) { 283 if ((db = aud_cfg_db_open())) {
234 gchar *username = NULL; 284 gchar *username = NULL;
235 // last fm 285 // last fm
236 aud_cfg_db_get_string(db, "audioscrobbler", "username", 286 aud_cfg_db_get_string(db, "audioscrobbler", "username",
251 301
252 aud_cfg_db_close(db); 302 aud_cfg_db_close(db);
253 } 303 }
254 304
255 g_signal_connect(entry1, "changed", G_CALLBACK(entry_changed), NULL); 305 g_signal_connect(entry1, "changed", G_CALLBACK(entry_changed), NULL);
256 g_signal_connect(entry2, "changed", G_CALLBACK(entry_changed), NULL);
257 g_signal_connect(ge_entry1, "changed", G_CALLBACK(entry_changed), NULL); 306 g_signal_connect(ge_entry1, "changed", G_CALLBACK(entry_changed), NULL);
258 g_signal_connect(ge_entry2, "changed", G_CALLBACK(entry_changed), NULL);
259 307
260 return vbox2; 308 return vbox2;
261 } 309 }
262 310