aboutsummaryrefslogtreecommitdiff
path: root/src/main_window_adv_pseudonym.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main_window_adv_pseudonym.c')
-rw-r--r--src/main_window_adv_pseudonym.c493
1 files changed, 493 insertions, 0 deletions
diff --git a/src/main_window_adv_pseudonym.c b/src/main_window_adv_pseudonym.c
new file mode 100644
index 00000000..238b937f
--- /dev/null
+++ b/src/main_window_adv_pseudonym.c
@@ -0,0 +1,493 @@
1/*
2 This file is part of GNUnet
3 (C) 2005, 2006, 2010 Christian Grothoff (and other contributing authors)
4
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 2, or (at your
8 option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
19*/
20
21/**
22 * @file src/main_window_adv_pseudonym.c
23 * @author Christian Grothoff
24 */
25#include "common.h"
26
27static GtkBuilder *builder;
28
29
30
31void
32GNUNET_GTK_advertise_pseudonym_keyword_list_normalize_button_clicked_cb ()
33{
34 GNUNET_break (0);
35}
36
37void
38GNUNET_GTK_advertise_pseudonym_keyword_list_del_button_clicked_cb ()
39{
40 GtkTreeView *tv;
41 GtkTreeSelection *sel;
42 GtkTreeModel *tm;
43 GtkTreeIter iter;
44
45 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
46 "GNUNET_GTK_advertise_pseudonym_keyword_list_tree_view"));
47 sel = gtk_tree_view_get_selection (tv);
48 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
49 {
50 GNUNET_break (0);
51 return;
52 }
53 gtk_list_store_remove (GTK_LIST_STORE (tm),
54 &iter);
55}
56
57void
58GNUNET_GTK_advertise_pseudonym_keyword_list_add_button_clicked_cb ()
59{
60 const char *keyword;
61 GtkEntry *entry;
62 GtkListStore *ls;
63 GtkTreeIter iter;
64
65 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
66 "GNUNET_GTK_keyword_list_store"));
67 entry = GTK_ENTRY (gtk_builder_get_object (builder,
68 "GNUNET_GTK_advertise_pseudonym_keyword_entry"));
69 keyword = gtk_entry_get_text (entry);
70 if (strlen (keyword) > 0)
71 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, keyword, -1);
72 gtk_entry_set_text (entry, "");
73}
74
75
76void
77GNUNET_GTK_advertise_pseudonym_keyword_entry_changed_cb ()
78{
79 const char *keyword;
80 GtkEntry *entry;
81 GtkWidget *button;
82
83 button = GTK_WIDGET (gtk_builder_get_object (builder,
84 "GNUNET_GTK_advertise_pseudonym_keyword_list_add_button"));
85 entry = GTK_ENTRY (gtk_builder_get_object (builder,
86 "GNUNET_GTK_advertise_pseudonym_keyword_entry"));
87 keyword = gtk_entry_get_text (entry);
88 gtk_widget_set_sensitive (button,
89 (strlen (keyword) > 0) ? TRUE : FALSE);
90}
91
92
93static void
94metadata_selection_changed_cb (GtkTreeSelection *ts,
95 gpointer user_data)
96{
97 GtkTreeView *tv;
98 GtkTreeSelection *sel;
99 GtkWidget *button;
100
101 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
102 "GNUNET_GTK_advertise_pseudonym_metadata_tree_view"));
103 sel = gtk_tree_view_get_selection (tv);
104 button = GTK_WIDGET (gtk_builder_get_object (builder,
105 "GNUNET_GTK_advertise_pseudonym_metadata_delete_button"));
106 gtk_widget_set_sensitive (button,
107 gtk_tree_selection_get_selected (sel, NULL, NULL));
108}
109
110
111static void
112keyword_selection_changed_cb (GtkTreeSelection *ts,
113 gpointer user_data)
114{
115 GtkTreeView *tv;
116 GtkTreeSelection *sel;
117 GtkWidget *button;
118
119 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
120 "GNUNET_GTK_advertise_pseudonym_keyword_list_tree_view"));
121 sel = gtk_tree_view_get_selection (tv);
122 button = GTK_WIDGET (gtk_builder_get_object (builder,
123 "GNUNET_GTK_advertise_pseudonym_keyword_list_del_button"));
124
125 gtk_widget_set_sensitive (button,
126 gtk_tree_selection_get_selected (sel, NULL, NULL));
127 button = GTK_WIDGET (gtk_builder_get_object (builder,
128 "GNUNET_GTK_advertise_pseudonym_keyword_list_normalize_button"));
129 gtk_widget_set_sensitive (button,
130 gtk_tree_selection_get_selected (sel, NULL, NULL));
131}
132
133
134void
135GNUNET_GTK_advertise_pseudonym_metadata_value_entry_changed_cb ()
136{
137 GtkTreeView *tv;
138 GtkTreeSelection *sel;
139 const char *value;
140 GtkEntry *entry;
141 GtkWidget *button;
142
143 entry = GTK_ENTRY (gtk_builder_get_object (builder,
144 "GNUNET_GTK_advertise_pseudonym_metadata_value_entry"));
145 value = gtk_entry_get_text (entry);
146 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
147 "GNUNET_GTK_advertise_pseudonym_metadata_type_tree_view"));
148 sel = gtk_tree_view_get_selection (tv);
149 button = GTK_WIDGET (gtk_builder_get_object (builder,
150 "GNUNET_GTK_advertise_pseudonym_metadata_add_button"));
151 gtk_widget_set_sensitive (button,
152 (strlen (value) > 0)
153 ? gtk_tree_selection_get_selected (sel, NULL, NULL)
154 : FALSE);
155}
156
157
158void
159GNUNET_GTK_advertise_pseudonym_keyword_entry_activate_cb ()
160{
161 GNUNET_GTK_advertise_pseudonym_keyword_list_add_button_clicked_cb ();
162}
163
164
165void
166GNUNET_GTK_advertise_pseudonym_metadata_preview_file_chooser_button_file_set_cb ()
167{
168 GNUNET_break (0);
169}
170
171void
172GNUNET_GTK_advertise_pseudonym_metadata_delete_button_clicked_cb()
173{
174 GtkTreeView *tv;
175 GtkTreeSelection *sel;
176 GtkTreeModel *tm;
177 GtkTreeIter iter;
178
179 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
180 "GNUNET_GTK_advertise_pseudonym_metadata_tree_view"));
181 sel = gtk_tree_view_get_selection (tv);
182 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
183 {
184 GNUNET_break (0);
185 return;
186 }
187 gtk_list_store_remove (GTK_LIST_STORE (tm),
188 &iter);
189}
190
191
192void
193GNUNET_GTK_advertise_pseudonym_metadata_add_button_clicked_cb ()
194{
195 const char *value;
196 char *avalue;
197 const char *ivalue;
198 GtkEntry *entry;
199 GtkListStore *ls;
200 GtkTreeModel *tm;
201 GtkTreeView *tv;
202 GtkTreeSelection *sel;
203 GtkTreeIter iter;
204 guint type;
205 size_t slen;
206 char *pos;
207
208 entry = GTK_ENTRY (gtk_builder_get_object (builder,
209 "GNUNET_GTK_advertise_pseudonym_metadata_value_entry"));
210 value = gtk_entry_get_text (entry);
211 if ((value == NULL) || (strlen (value) == 0))
212 {
213 GNUNET_break (0);
214 return;
215 }
216 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
217 "GNUNET_GTK_advertise_pseudonym_metadata_type_tree_view"));
218 tm = gtk_tree_view_get_model (tv);
219 sel = gtk_tree_view_get_selection (tv);
220 if (TRUE != gtk_tree_selection_get_selected (sel,
221 &tm,
222 &iter))
223 {
224 GNUNET_break (0);
225 return;
226 }
227 gtk_tree_model_get (tm,
228 &iter,
229 1, &type, -1);
230 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
231 "GNUNET_GTK_meta_data_list_store"));
232 if ( (type == EXTRACTOR_METATYPE_FILENAME) &&
233 (value[strlen(value)-1] != '/') )
234 {
235 GNUNET_asprintf (&avalue,
236 "%s/",
237 value);
238 /* if user typed '\' instead of '/', change it! */
239 slen = strlen (avalue);
240 while ( (slen > 1) &&
241 (avalue[slen-2] == '\\') )
242 {
243 avalue[slen-2] = '/';
244 avalue[slen-1] = '\0';
245 slen--;
246 }
247 while (NULL != (pos = strstr (avalue, "\\")))
248 *pos = '/';
249 /* remove '../' everywhere */
250 while (NULL != (pos = strstr (avalue, "../")))
251 {
252 pos[0] = '_';
253 pos[1] = '_';
254 pos[2] = '_';
255 }
256 ivalue = avalue;
257 }
258 else
259 {
260 ivalue = value;
261 avalue = NULL;
262 }
263
264 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT,
265 0, type,
266 1, (guint) EXTRACTOR_METAFORMAT_UTF8,
267 2, EXTRACTOR_metatype_to_string (type),
268 3, ivalue,
269 -1);
270 GNUNET_free_non_null (avalue);
271 gtk_entry_set_text (GTK_ENTRY (entry), "");
272}
273
274
275/**
276 * Callback with information about local (!) namespaces.
277 * Contains the names of the local namespace and the global
278 * ID. Adds the to the list store.
279 *
280 * @param cls closure, the list store.
281 * @param name human-readable identifier of the namespace
282 * @param id hash identifier for the namespace
283 */
284static void
285add_to_list (void *cls,
286 const char *name,
287 const GNUNET_HashCode *id)
288{
289 GtkListStore *ls = cls;
290 GtkTreeIter iter;
291
292 gtk_list_store_insert_with_values (ls,
293 &iter,
294 -1,
295 0, name,
296 1, GNUNET_FS_namespace_create (GNUNET_GTK_get_fs_handle (),
297 name),
298 -1);
299
300}
301
302
303static void
304selection_changed_cb (GtkTreeSelection *ts,
305 gpointer user_data)
306{
307 GtkTreeIter iter;
308 GtkWidget *ok_button;
309
310 ok_button = GTK_WIDGET (gtk_builder_get_object (builder,
311 "GNUNET_GTK_select_pseudonym_dialog_ok_button"));
312 if (TRUE == gtk_tree_selection_get_selected (ts, NULL, &iter))
313 gtk_widget_set_sensitive (ok_button, TRUE);
314 else
315 gtk_widget_set_sensitive (ok_button, FALSE);
316}
317
318
319
320
321
322/**
323 * Advertise pseudonym selected.
324 */
325void
326GNUNET_GTK_main_menu_file_advertise_pseudonym_activate_cb (GtkWidget * dummy,
327 gpointer data)
328{
329 GtkWidget *ad;
330 struct GNUNET_FS_Namespace *ns;
331 GtkListStore *ls;
332 GtkTreeView *tv;
333 GtkTreeIter iter;
334 GtkTreeSelection *sel;
335 GtkTreeModel *tm;
336 uint32_t anonymity_level;
337 uint32_t priority;
338 struct GNUNET_FS_Uri *nxt;
339 struct GNUNET_FS_Uri *mrg;
340 struct GNUNET_FS_Uri *uri;
341 struct GNUNET_CONTAINER_MetaData *nm;
342 struct GNUNET_TIME_Absolute expiration;
343 const char *root;
344 char *value;
345 guint ntype;
346 guint nformat;
347
348 builder = GNUNET_GTK_get_new_builder ("select_pseudonym_dialog.glade");
349 if (builder == NULL)
350 {
351 GNUNET_break (0);
352 return;
353 }
354 ad = GTK_WIDGET (gtk_builder_get_object (builder,
355 "GNUNET_GTK_select_pseudonym_dialog"));
356 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
357 "GNUNET_GTK_select_pseudonym_liststore"));
358 GNUNET_FS_namespace_list (GNUNET_GTK_get_fs_handle (),
359 &add_to_list,
360 ls);
361 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
362 "GNUNET_GTK_master_publish_dialog_file_information_tree_view"));
363 sel = gtk_tree_view_get_selection (tv);
364 g_signal_connect(G_OBJECT(sel), "changed",
365 G_CALLBACK(selection_changed_cb), NULL);
366 if (GTK_RESPONSE_OK != gtk_dialog_run (GTK_DIALOG (ad)))
367 {
368 gtk_widget_destroy (ad);
369 g_object_unref (G_OBJECT (builder));
370 builder = NULL;
371 return;
372 }
373 GNUNET_assert (TRUE == gtk_tree_selection_get_selected (sel,
374 &tm,
375 &iter));
376 gtk_tree_model_get (tm,
377 &iter,
378 1, &ns,
379 -1);
380 /* FIXME: free all namespaces from list store except "ns" */
381 gtk_widget_destroy (ad);
382 g_object_unref (G_OBJECT (builder));
383 builder = NULL;
384
385
386 builder = GNUNET_GTK_get_new_builder ("advertise_pseudonym_dialog.glade");
387 if (builder == NULL)
388 {
389 GNUNET_break (0);
390 return;
391 }
392 ad = GTK_WIDGET (gtk_builder_get_object (builder,
393 "GNUNET_GTK_advertise_pseudonym_dialog"));
394
395 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
396 "GNUNET_GTK_advertise_pseudonym_metadata_type_tree_view"));
397 sel = gtk_tree_view_get_selection (tv);
398 g_signal_connect(G_OBJECT(sel), "changed",
399 G_CALLBACK(GNUNET_GTK_advertise_pseudonym_metadata_value_entry_changed_cb), NULL);
400
401 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
402 "GNUNET_GTK_advertise_pseudonym_metadata_tree_view"));
403 sel = gtk_tree_view_get_selection (tv);
404 g_signal_connect(G_OBJECT(sel), "changed",
405 G_CALLBACK(metadata_selection_changed_cb), NULL);
406
407 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
408 "GNUNET_GTK_advertise_pseudonym_keyword_list_tree_view"));
409 sel = gtk_tree_view_get_selection (tv);
410 g_signal_connect(G_OBJECT(sel), "changed",
411 G_CALLBACK(keyword_selection_changed_cb), NULL);
412 if (GTK_RESPONSE_OK != gtk_dialog_run (GTK_DIALOG (ad)))
413 {
414 gtk_widget_destroy (ad);
415 g_object_unref (G_OBJECT (builder));
416 builder = NULL;
417 return;
418 }
419 /* get keywords from list store */
420 nxt = NULL;
421 mrg = NULL;
422 uri = NULL;
423 tm = GTK_TREE_MODEL (gtk_builder_get_object (builder,
424 "GNUNET_GTK_keyword_list_store"));
425 if (TRUE ==
426 gtk_tree_model_get_iter_first (tm, &iter))
427 {
428 do
429 {
430 gtk_tree_model_get (tm, &iter,
431 0, &value,
432 -1);
433 nxt = GNUNET_FS_uri_ksk_create_from_args (1, (const char**) &value);
434 mrg = GNUNET_FS_uri_ksk_merge (nxt, uri);
435 GNUNET_FS_uri_destroy (nxt);
436 if (NULL != uri)
437 GNUNET_FS_uri_destroy (uri);
438 uri = mrg;
439 g_free (value);
440 }
441 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
442 }
443 /* get meta */
444 nm = GNUNET_CONTAINER_meta_data_create ();
445 tm = GTK_TREE_MODEL (gtk_builder_get_object (builder,
446 "GNUNET_GTK_meta_data_list_store"));
447 if (TRUE ==
448 gtk_tree_model_get_iter_first (tm, &iter))
449 {
450 do
451 {
452 gtk_tree_model_get (tm, &iter,
453 0, &ntype,
454 1, &nformat,
455 3, &value,
456 -1);
457 GNUNET_CONTAINER_meta_data_insert (nm,
458 "<user>",
459 ntype,
460 nformat,
461 "text/plain",
462 value,
463 strlen (value)+1);
464 g_free (value);
465 }
466 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
467 }
468 anonymity_level = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
469 "GNUNET_GTK_advertise_pseudonym_anonymity_spin_button")));
470 priority = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
471 "GNUNET_GTK_advertise_pseudonym_priority_spin_button")));
472 expiration = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_YEARS);
473 root = gtk_entry_get_text (GTK_ENTRY (gtk_builder_get_object (builder,
474 "GNUNET_GTK_advertise_pseudonym_root_entry")));
475 GNUNET_FS_namespace_advertise (GNUNET_GTK_get_fs_handle (),
476 uri,
477 ns,
478 nm,
479 anonymity_level,
480 priority,
481 expiration,
482 root,
483 NULL, NULL);
484 GNUNET_CONTAINER_meta_data_destroy (nm);
485 if (NULL != uri)
486 GNUNET_FS_uri_destroy (uri);
487 gtk_widget_destroy (ad);
488 g_object_unref (G_OBJECT (builder));
489 builder = NULL;
490}
491
492
493/* end of main_window_adv_pseudonym.c */