694
|
1 #ifdef HAVE_CONFIG_H
|
|
2 # include <config.h>
|
|
3 #endif
|
|
4
|
695
|
5 #include "libaudacious/util.h"
|
|
6 #include "libaudacious/configdb.h"
|
|
7
|
694
|
8 #include <sys/types.h>
|
|
9 #include <sys/stat.h>
|
|
10 #include <unistd.h>
|
|
11 #include <string.h>
|
|
12 #include <stdio.h>
|
|
13
|
695
|
14 #include "md5.h"
|
|
15
|
694
|
16 #include <glib.h>
|
|
17 #include <glib/gi18n.h>
|
|
18
|
|
19 #include <gdk/gdkkeysyms.h>
|
|
20 #include <gtk/gtk.h>
|
|
21
|
|
22 #include "configure.h"
|
|
23
|
|
24 #define GLADE_HOOKUP_OBJECT(component,widget,name) \
|
|
25 g_object_set_data_full (G_OBJECT (component), name, \
|
|
26 gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
|
|
27
|
|
28 #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
|
|
29 g_object_set_data (G_OBJECT (component), name, widget)
|
|
30
|
695
|
31 GtkWidget *entry1, *entry2, *cfgdlg;
|
|
32
|
|
33 static char *hexify(char *pass, int len)
|
|
34 {
|
|
35 static char buf[33];
|
|
36 char *bp = buf;
|
|
37 char hexchars[] = "0123456789abcdef";
|
|
38 int i;
|
|
39
|
|
40 memset(buf, 0, sizeof(buf));
|
|
41
|
|
42 for(i = 0; i < len; i++) {
|
|
43 *(bp++) = hexchars[(pass[i] >> 4) & 0x0f];
|
|
44 *(bp++) = hexchars[pass[i] & 0x0f];
|
|
45 }
|
|
46 *bp = 0;
|
|
47 return buf;
|
|
48 }
|
|
49
|
|
50 static void saveconfig(GtkWidget *wid, gpointer data)
|
|
51 {
|
|
52 ConfigDb *cfgfile;
|
|
53
|
|
54 const char *uid = gtk_entry_get_text(GTK_ENTRY(entry1));
|
|
55 const char *pwd = gtk_entry_get_text(GTK_ENTRY(entry2));
|
|
56
|
|
57 if ((cfgfile = bmp_cfg_db_open()))
|
|
58 {
|
|
59 md5_state_t md5state;
|
|
60 unsigned char md5pword[16];
|
|
61
|
|
62 bmp_cfg_db_set_string(cfgfile, "audioscrobbler", "username", (char *)uid);
|
|
63
|
|
64 if (pwd != NULL && pwd[0] != '\0')
|
|
65 {
|
|
66 md5_init(&md5state);
|
|
67 md5_append(&md5state, (unsigned const char *)pwd, strlen(pwd));
|
|
68 md5_finish(&md5state, md5pword);
|
|
69 bmp_cfg_db_set_string(cfgfile, "audioscrobbler", "password",
|
|
70 (char *)hexify(md5pword, sizeof(md5pword)));
|
|
71 }
|
|
72 bmp_cfg_db_close(cfgfile);
|
|
73 }
|
|
74
|
|
75 gtk_widget_destroy(GTK_WIDGET(data));
|
|
76 }
|
|
77
|
|
78 void
|
|
79 configure_dialog(void)
|
|
80 {
|
|
81 ConfigDb *db;
|
|
82
|
|
83 cfgdlg = create_cfgdlg();
|
|
84
|
|
85 gtk_entry_set_text(GTK_ENTRY(entry1), "");
|
|
86 gtk_entry_set_text(GTK_ENTRY(entry2), "");
|
|
87
|
|
88 if ((db = bmp_cfg_db_open())) {
|
|
89 gchar *username = NULL;
|
|
90 bmp_cfg_db_get_string(db, "audioscrobbler", "username",
|
|
91 &username);
|
|
92 if (username) {
|
|
93 gtk_entry_set_text(GTK_ENTRY(entry1), username);
|
|
94 g_free(username);
|
|
95 }
|
|
96 bmp_cfg_db_close(db);
|
|
97 }
|
|
98
|
|
99 gtk_widget_show(GTK_WIDGET(cfgdlg));
|
|
100 }
|
|
101
|
|
102 /* Generated by glade, sorta. */
|
|
103 GtkWidget *
|
|
104 create_cfgdlg(void)
|
694
|
105 {
|
|
106 GtkWidget *window1;
|
|
107 GtkWidget *vbox2;
|
|
108 GtkWidget *table1;
|
|
109 GtkWidget *label3;
|
|
110 GtkWidget *hseparator2;
|
|
111 GtkWidget *hseparator3;
|
|
112 GtkWidget *label1;
|
|
113 GtkWidget *label2;
|
|
114 GtkWidget *hseparator1;
|
|
115 GtkWidget *hbuttonbox1;
|
|
116 GtkWidget *button5;
|
|
117 GtkWidget *button6;
|
|
118
|
|
119 window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
120 gtk_container_set_border_width (GTK_CONTAINER (window1), 12);
|
695
|
121 gtk_window_set_title (GTK_WINDOW (window1), _("Scrobbler Configuration"));
|
694
|
122
|
|
123 vbox2 = gtk_vbox_new (FALSE, 0);
|
|
124 gtk_widget_show (vbox2);
|
|
125 gtk_container_add (GTK_CONTAINER (window1), vbox2);
|
|
126
|
|
127 table1 = gtk_table_new (4, 2, FALSE);
|
|
128 gtk_widget_show (table1);
|
|
129 gtk_box_pack_start (GTK_BOX (vbox2), table1, FALSE, FALSE, 0);
|
|
130
|
|
131 entry2 = gtk_entry_new ();
|
|
132 gtk_widget_show (entry2);
|
|
133 gtk_table_attach (GTK_TABLE (table1), entry2, 1, 2, 3, 4,
|
|
134 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
|
135 (GtkAttachOptions) (0), 0, 0);
|
|
136
|
|
137 label3 = gtk_label_new (_("Password:"));
|
|
138 gtk_widget_show (label3);
|
|
139 gtk_table_attach (GTK_TABLE (table1), label3, 0, 1, 3, 4,
|
|
140 (GtkAttachOptions) (GTK_FILL),
|
|
141 (GtkAttachOptions) (0), 0, 0);
|
|
142 gtk_label_set_justify (GTK_LABEL (label3), GTK_JUSTIFY_RIGHT);
|
|
143 gtk_misc_set_alignment (GTK_MISC (label3), 1, 0.5);
|
|
144
|
|
145 hseparator2 = gtk_hseparator_new ();
|
|
146 gtk_widget_show (hseparator2);
|
|
147 gtk_table_attach (GTK_TABLE (table1), hseparator2, 0, 1, 1, 2,
|
|
148 (GtkAttachOptions) (GTK_FILL),
|
|
149 (GtkAttachOptions) (0), 0, 0);
|
|
150
|
|
151 hseparator3 = gtk_hseparator_new ();
|
|
152 gtk_widget_show (hseparator3);
|
|
153 gtk_table_attach (GTK_TABLE (table1), hseparator3, 1, 2, 1, 2,
|
|
154 (GtkAttachOptions) (GTK_FILL),
|
|
155 (GtkAttachOptions) (0), 0, 0);
|
|
156
|
|
157 label1 = gtk_label_new (_("<b>Scrobbler Preferences</b>"));
|
|
158 gtk_widget_show (label1);
|
|
159 gtk_table_attach (GTK_TABLE (table1), label1, 0, 1, 0, 1,
|
|
160 (GtkAttachOptions) (GTK_FILL),
|
|
161 (GtkAttachOptions) (0), 0, 0);
|
|
162 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
|
|
163 gtk_misc_set_alignment (GTK_MISC (label1), 0, 0.5);
|
|
164
|
|
165 label2 = gtk_label_new (_("Username:"));
|
|
166 gtk_widget_show (label2);
|
|
167 gtk_table_attach (GTK_TABLE (table1), label2, 0, 1, 2, 3,
|
|
168 (GtkAttachOptions) (GTK_FILL),
|
|
169 (GtkAttachOptions) (0), 0, 0);
|
|
170 gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_RIGHT);
|
|
171 gtk_misc_set_alignment (GTK_MISC (label2), 1, 0.5);
|
|
172
|
|
173 entry1 = gtk_entry_new ();
|
|
174 gtk_widget_show (entry1);
|
|
175 gtk_table_attach (GTK_TABLE (table1), entry1, 1, 2, 2, 3,
|
|
176 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
|
177 (GtkAttachOptions) (0), 0, 0);
|
|
178
|
|
179 hseparator1 = gtk_hseparator_new ();
|
|
180 gtk_widget_show (hseparator1);
|
|
181 gtk_box_pack_start (GTK_BOX (vbox2), hseparator1, FALSE, FALSE, 0);
|
|
182
|
|
183 hbuttonbox1 = gtk_hbutton_box_new ();
|
|
184 gtk_widget_show (hbuttonbox1);
|
|
185 gtk_box_pack_start (GTK_BOX (vbox2), hbuttonbox1, FALSE, FALSE, 0);
|
|
186 gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END);
|
|
187 gtk_box_set_spacing (GTK_BOX (hbuttonbox1), 5);
|
|
188
|
|
189 button5 = gtk_button_new_from_stock ("gtk-ok");
|
|
190 gtk_widget_show (button5);
|
|
191 gtk_container_add (GTK_CONTAINER (hbuttonbox1), button5);
|
|
192 GTK_WIDGET_SET_FLAGS (button5, GTK_CAN_DEFAULT);
|
|
193
|
695
|
194 gtk_signal_connect(GTK_OBJECT(button5), "clicked",
|
|
195 GTK_SIGNAL_FUNC(saveconfig), GTK_OBJECT(window1));
|
|
196
|
694
|
197 button6 = gtk_button_new_from_stock ("gtk-close");
|
|
198 gtk_widget_show (button6);
|
|
199 gtk_container_add (GTK_CONTAINER (hbuttonbox1), button6);
|
|
200 GTK_WIDGET_SET_FLAGS (button6, GTK_CAN_DEFAULT);
|
|
201
|
695
|
202 gtk_signal_connect(GTK_OBJECT(button6), "clicked",
|
|
203 GTK_SIGNAL_FUNC(gtk_widget_destroyed), GTK_OBJECT(window1));
|
|
204
|
694
|
205 /* Store pointers to all widgets, for use by lookup_widget(). */
|
|
206 GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
|
|
207 GLADE_HOOKUP_OBJECT (window1, vbox2, "vbox2");
|
|
208 GLADE_HOOKUP_OBJECT (window1, table1, "table1");
|
|
209 GLADE_HOOKUP_OBJECT (window1, entry2, "entry2");
|
|
210 GLADE_HOOKUP_OBJECT (window1, label3, "label3");
|
|
211 GLADE_HOOKUP_OBJECT (window1, hseparator2, "hseparator2");
|
|
212 GLADE_HOOKUP_OBJECT (window1, hseparator3, "hseparator3");
|
|
213 GLADE_HOOKUP_OBJECT (window1, label1, "label1");
|
|
214 GLADE_HOOKUP_OBJECT (window1, label2, "label2");
|
|
215 GLADE_HOOKUP_OBJECT (window1, entry1, "entry1");
|
|
216 GLADE_HOOKUP_OBJECT (window1, hseparator1, "hseparator1");
|
|
217 GLADE_HOOKUP_OBJECT (window1, hbuttonbox1, "hbuttonbox1");
|
|
218 GLADE_HOOKUP_OBJECT (window1, button5, "button5");
|
|
219 GLADE_HOOKUP_OBJECT (window1, button6, "button6");
|
|
220
|
|
221 return window1;
|
|
222 }
|
|
223
|