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.c587
1 files changed, 0 insertions, 587 deletions
diff --git a/src/main_window_adv_pseudonym.c b/src/main_window_adv_pseudonym.c
deleted file mode 100644
index 7a139332..00000000
--- a/src/main_window_adv_pseudonym.c
+++ /dev/null
@@ -1,587 +0,0 @@
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/**
31 * Canonicalize spelling of currently selected keyword.
32 */
33void
34GNUNET_GTK_advertise_pseudonym_keyword_list_normalize_button_clicked_cb ()
35{
36 GtkTreeView *tv;
37 GtkTreeSelection *sel;
38 GtkTreeModel *tm;
39 GtkTreeIter iter;
40 gchar *value;
41 struct GNUNET_FS_Uri *uri;
42 struct GNUNET_FS_Uri *nuri;
43 char *nvalue;
44 char *emsg;
45
46 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
47 "GNUNET_GTK_advertise_pseudonym_keyword_list_tree_view"));
48 sel = gtk_tree_view_get_selection (tv);
49 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
50 {
51 GNUNET_break (0);
52 return;
53 }
54 gtk_tree_model_get (tm, &iter,
55 0, &value,
56 -1);
57 emsg = NULL;
58 uri = GNUNET_FS_uri_ksk_create (value, &emsg);
59 if (uri == NULL)
60 {
61 GNUNET_break (0);
62 GNUNET_free (emsg);
63 g_free (value);
64 return;
65 }
66 nuri = GNUNET_FS_uri_ksk_canonicalize (uri);
67 nvalue = GNUNET_FS_uri_ksk_to_string_fancy (nuri);
68 gtk_list_store_set (GTK_LIST_STORE (tm), &iter,
69 0, nvalue,
70 -1);
71 GNUNET_FS_uri_destroy (nuri);
72 GNUNET_FS_uri_destroy (uri);
73 GNUNET_free (nvalue);
74 g_free (value);
75}
76
77
78/**
79 * Remove the currently selected keyword from the list.
80 */
81void
82GNUNET_GTK_advertise_pseudonym_keyword_list_del_button_clicked_cb ()
83{
84 GtkTreeView *tv;
85 GtkTreeSelection *sel;
86 GtkTreeModel *tm;
87 GtkTreeIter iter;
88
89 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
90 "GNUNET_GTK_advertise_pseudonym_keyword_list_tree_view"));
91 sel = gtk_tree_view_get_selection (tv);
92 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
93 {
94 GNUNET_break (0);
95 return;
96 }
97 gtk_list_store_remove (GTK_LIST_STORE (tm),
98 &iter);
99}
100
101
102/**
103 * Add keyword from entry line to keyword list.
104 */
105void
106GNUNET_GTK_advertise_pseudonym_keyword_list_add_button_clicked_cb ()
107{
108 const char *keyword;
109 GtkEntry *entry;
110 GtkListStore *ls;
111 GtkTreeIter iter;
112
113 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
114 "GNUNET_GTK_keyword_list_store"));
115 entry = GTK_ENTRY (gtk_builder_get_object (builder,
116 "GNUNET_GTK_advertise_pseudonym_keyword_entry"));
117 keyword = gtk_entry_get_text (entry);
118 if (strlen (keyword) > 0)
119 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT, 0, keyword, -1);
120 gtk_entry_set_text (entry, "");
121}
122
123
124/**
125 * Update sensitivity of keyword add button.
126 */
127void
128GNUNET_GTK_advertise_pseudonym_keyword_entry_changed_cb ()
129{
130 const char *keyword;
131 GtkEntry *entry;
132 GtkWidget *button;
133
134 button = GTK_WIDGET (gtk_builder_get_object (builder,
135 "GNUNET_GTK_advertise_pseudonym_keyword_list_add_button"));
136 entry = GTK_ENTRY (gtk_builder_get_object (builder,
137 "GNUNET_GTK_advertise_pseudonym_keyword_entry"));
138 keyword = gtk_entry_get_text (entry);
139 gtk_widget_set_sensitive (button,
140 (strlen (keyword) > 0) ? TRUE : FALSE);
141}
142
143/**
144 * Update sensitivity of metadata delete button.
145 */
146static void
147metadata_selection_changed_cb (GtkTreeSelection *ts,
148 gpointer user_data)
149{
150 GtkTreeView *tv;
151 GtkTreeSelection *sel;
152 GtkWidget *button;
153
154 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
155 "GNUNET_GTK_advertise_pseudonym_metadata_tree_view"));
156 sel = gtk_tree_view_get_selection (tv);
157 button = GTK_WIDGET (gtk_builder_get_object (builder,
158 "GNUNET_GTK_advertise_pseudonym_metadata_delete_button"));
159 gtk_widget_set_sensitive (button,
160 gtk_tree_selection_get_selected (sel, NULL, NULL));
161}
162
163
164/**
165 * Update sensitivity of keyword delete and normalize button.
166 */
167static void
168keyword_selection_changed_cb (GtkTreeSelection *ts,
169 gpointer user_data)
170{
171 GtkTreeView *tv;
172 GtkTreeSelection *sel;
173 GtkWidget *button;
174
175 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
176 "GNUNET_GTK_advertise_pseudonym_keyword_list_tree_view"));
177 sel = gtk_tree_view_get_selection (tv);
178 button = GTK_WIDGET (gtk_builder_get_object (builder,
179 "GNUNET_GTK_advertise_pseudonym_keyword_list_del_button"));
180
181 gtk_widget_set_sensitive (button,
182 gtk_tree_selection_get_selected (sel, NULL, NULL));
183 button = GTK_WIDGET (gtk_builder_get_object (builder,
184 "GNUNET_GTK_advertise_pseudonym_keyword_list_normalize_button"));
185 gtk_widget_set_sensitive (button,
186 gtk_tree_selection_get_selected (sel, NULL, NULL));
187}
188
189
190/**
191 * Update sensitivity of metadata add button.
192 */
193void
194GNUNET_GTK_advertise_pseudonym_metadata_value_entry_changed_cb ()
195{
196 GtkTreeView *tv;
197 GtkTreeSelection *sel;
198 const char *value;
199 GtkEntry *entry;
200 GtkWidget *button;
201
202 entry = GTK_ENTRY (gtk_builder_get_object (builder,
203 "GNUNET_GTK_advertise_pseudonym_metadata_value_entry"));
204 value = gtk_entry_get_text (entry);
205 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
206 "GNUNET_GTK_advertise_pseudonym_metadata_type_tree_view"));
207 sel = gtk_tree_view_get_selection (tv);
208 button = GTK_WIDGET (gtk_builder_get_object (builder,
209 "GNUNET_GTK_advertise_pseudonym_metadata_add_button"));
210 gtk_widget_set_sensitive (button,
211 (strlen (value) > 0)
212 ? gtk_tree_selection_get_selected (sel, NULL, NULL)
213 : FALSE);
214}
215
216
217/**
218 * Add keyword to keyword list.
219 */
220void
221GNUNET_GTK_advertise_pseudonym_keyword_entry_activate_cb ()
222{
223 GNUNET_GTK_advertise_pseudonym_keyword_list_add_button_clicked_cb ();
224}
225
226
227void
228GNUNET_GTK_advertise_pseudonym_metadata_preview_file_chooser_button_file_set_cb ()
229{
230 GNUNET_break (0);
231}
232
233/**
234 * Delete currently selected item from meta data list.
235 */
236void
237GNUNET_GTK_advertise_pseudonym_metadata_delete_button_clicked_cb()
238{
239 GtkTreeView *tv;
240 GtkTreeSelection *sel;
241 GtkTreeModel *tm;
242 GtkTreeIter iter;
243
244 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
245 "GNUNET_GTK_advertise_pseudonym_metadata_tree_view"));
246 sel = gtk_tree_view_get_selection (tv);
247 if (TRUE != gtk_tree_selection_get_selected (sel, &tm, &iter))
248 {
249 GNUNET_break (0);
250 return;
251 }
252 gtk_list_store_remove (GTK_LIST_STORE (tm),
253 &iter);
254}
255
256
257/**
258 * Add metadata to metadata list.
259 */
260void
261GNUNET_GTK_advertise_pseudonym_metadata_add_button_clicked_cb ()
262{
263 const char *value;
264 char *avalue;
265 const char *ivalue;
266 GtkEntry *entry;
267 GtkListStore *ls;
268 GtkTreeModel *tm;
269 GtkTreeView *tv;
270 GtkTreeSelection *sel;
271 GtkTreeIter iter;
272 guint type;
273 size_t slen;
274 char *pos;
275
276 entry = GTK_ENTRY (gtk_builder_get_object (builder,
277 "GNUNET_GTK_advertise_pseudonym_metadata_value_entry"));
278 value = gtk_entry_get_text (entry);
279 if ((value == NULL) || (strlen (value) == 0))
280 {
281 GNUNET_break (0);
282 return;
283 }
284 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
285 "GNUNET_GTK_advertise_pseudonym_metadata_type_tree_view"));
286 tm = gtk_tree_view_get_model (tv);
287 sel = gtk_tree_view_get_selection (tv);
288 if (TRUE != gtk_tree_selection_get_selected (sel,
289 &tm,
290 &iter))
291 {
292 GNUNET_break (0);
293 return;
294 }
295 gtk_tree_model_get (tm,
296 &iter,
297 1, &type, -1);
298 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
299 "GNUNET_GTK_meta_data_list_store"));
300 if ( (type == EXTRACTOR_METATYPE_FILENAME) &&
301 (value[strlen(value)-1] != '/') )
302 {
303 GNUNET_asprintf (&avalue,
304 "%s/",
305 value);
306 /* if user typed '\' instead of '/', change it! */
307 slen = strlen (avalue);
308 while ( (slen > 1) &&
309 (avalue[slen-2] == '\\') )
310 {
311 avalue[slen-2] = '/';
312 avalue[slen-1] = '\0';
313 slen--;
314 }
315 while (NULL != (pos = strstr (avalue, "\\")))
316 *pos = '/';
317 /* remove '../' everywhere */
318 while (NULL != (pos = strstr (avalue, "../")))
319 {
320 pos[0] = '_';
321 pos[1] = '_';
322 pos[2] = '_';
323 }
324 ivalue = avalue;
325 }
326 else
327 {
328 ivalue = value;
329 avalue = NULL;
330 }
331
332 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT,
333 0, type,
334 1, (guint) EXTRACTOR_METAFORMAT_UTF8,
335 2, EXTRACTOR_metatype_to_string (type),
336 3, ivalue,
337 -1);
338 GNUNET_free_non_null (avalue);
339 gtk_entry_set_text (GTK_ENTRY (entry), "");
340}
341
342
343/**
344 * Callback with information about local (!) namespaces.
345 * Contains the names of the local namespace and the global
346 * ID. Adds the to the list store.
347 *
348 * @param cls closure, the list store.
349 * @param name human-readable identifier of the namespace
350 * @param id hash identifier for the namespace
351 */
352static void
353add_to_list (void *cls,
354 const char *name,
355 const GNUNET_HashCode *id)
356{
357 GtkListStore *ls = cls;
358 GtkTreeIter iter;
359
360 gtk_list_store_insert_with_values (ls,
361 &iter,
362 -1,
363 0, name,
364 1, GNUNET_FS_namespace_create (GNUNET_GTK_get_fs_handle (),
365 name),
366 -1);
367
368}
369
370
371static void
372selection_changed_cb (GtkTreeSelection *ts,
373 gpointer user_data)
374{
375 GtkTreeIter iter;
376 GtkWidget *ok_button;
377
378 ok_button = GTK_WIDGET (gtk_builder_get_object (builder,
379 "GNUNET_GTK_select_pseudonym_ok_button"));
380 if (TRUE == gtk_tree_selection_get_selected (ts, NULL, &iter))
381 gtk_widget_set_sensitive (ok_button, TRUE);
382 else
383 gtk_widget_set_sensitive (ok_button, FALSE);
384}
385
386
387/**
388 * Advertise pseudonym selected.
389 */
390void
391GNUNET_GTK_main_menu_file_advertise_pseudonym_activate_cb (GtkWidget * dummy,
392 gpointer data)
393{
394 GtkWidget *ad;
395 struct GNUNET_FS_Namespace *ns;
396 struct GNUNET_FS_Namespace *nso;
397 GtkListStore *ls;
398 GtkTreeView *tv;
399 GtkTreeIter iter;
400 GtkTreeSelection *sel;
401 GtkTreeModel *tm;
402 GtkSpinButton *sb;
403 struct GNUNET_FS_BlockOptions bo;
404 struct GNUNET_FS_Uri *nxt;
405 struct GNUNET_FS_Uri *mrg;
406 struct GNUNET_FS_Uri *uri;
407 struct GNUNET_CONTAINER_MetaData *nm;
408 const char *root;
409 char *value;
410 guint ntype;
411 guint nformat;
412 guint type;
413 guint max_type;
414
415 builder = GNUNET_GTK_get_new_builder ("select_pseudonym_dialog.glade");
416 if (builder == NULL)
417 {
418 GNUNET_break (0);
419 return;
420 }
421 ad = GTK_WIDGET (gtk_builder_get_object (builder,
422 "GNUNET_GTK_select_pseudonym_dialog"));
423 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
424 "GNUNET_GTK_select_pseudonym_liststore"));
425 GNUNET_FS_namespace_list (GNUNET_GTK_get_fs_handle (),
426 &add_to_list,
427 ls);
428 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
429 "GNUNET_GTK_select_pseudonym_tree_view"));
430 sel = gtk_tree_view_get_selection (tv);
431 g_signal_connect(G_OBJECT(sel), "changed",
432 G_CALLBACK(selection_changed_cb), NULL);
433 if (GTK_RESPONSE_OK != gtk_dialog_run (GTK_DIALOG (ad)))
434 {
435 gtk_widget_destroy (ad);
436 g_object_unref (G_OBJECT (builder));
437 builder = NULL;
438 return;
439 }
440 GNUNET_assert (TRUE == gtk_tree_selection_get_selected (sel,
441 &tm,
442 &iter));
443 gtk_tree_model_get (tm,
444 &iter,
445 1, &ns,
446 -1);
447 /* free all namespaces from list store except "ns" */
448 if (TRUE ==
449 gtk_tree_model_get_iter_first (tm, &iter))
450 {
451 do
452 {
453 gtk_tree_model_get (tm, &iter,
454 1, &nso,
455 -1);
456 if (ns != nso)
457 GNUNET_FS_namespace_delete (nso, GNUNET_NO);
458 }
459 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
460 }
461 gtk_widget_destroy (ad);
462 g_object_unref (G_OBJECT (builder));
463 builder = NULL;
464
465
466 builder = GNUNET_GTK_get_new_builder ("advertise_pseudonym_dialog.glade");
467 if (builder == NULL)
468 {
469 GNUNET_break (0);
470 return;
471 }
472 GNUNET_GTK_setup_expiration_year_adjustment (builder);
473 ad = GTK_WIDGET (gtk_builder_get_object (builder,
474 "GNUNET_GTK_advertise_pseudonym_dialog"));
475 ls = GTK_LIST_STORE (gtk_builder_get_object (builder,
476 "GNUNET_GTK_metatype_list_store"));
477 max_type = EXTRACTOR_metatype_get_max ();
478 type = 1;
479 while (type < max_type - 1)
480 {
481 gtk_list_store_insert_with_values (ls, &iter, G_MAXINT,
482 0, EXTRACTOR_metatype_to_string (type),
483 1, type,
484 2, EXTRACTOR_metatype_to_description (type),
485 -1);
486 type++;
487 }
488 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
489 "GNUNET_GTK_advertise_pseudonym_metadata_type_tree_view"));
490 sel = gtk_tree_view_get_selection (tv);
491 g_signal_connect(G_OBJECT(sel), "changed",
492 G_CALLBACK(GNUNET_GTK_advertise_pseudonym_metadata_value_entry_changed_cb), NULL);
493
494 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
495 "GNUNET_GTK_advertise_pseudonym_metadata_tree_view"));
496 sel = gtk_tree_view_get_selection (tv);
497 g_signal_connect(G_OBJECT(sel), "changed",
498 G_CALLBACK(metadata_selection_changed_cb), NULL);
499
500 tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
501 "GNUNET_GTK_advertise_pseudonym_keyword_list_tree_view"));
502 sel = gtk_tree_view_get_selection (tv);
503 g_signal_connect(G_OBJECT(sel), "changed",
504 G_CALLBACK(keyword_selection_changed_cb), NULL);
505 if (GTK_RESPONSE_OK != gtk_dialog_run (GTK_DIALOG (ad)))
506 {
507 gtk_widget_destroy (ad);
508 g_object_unref (G_OBJECT (builder));
509 builder = NULL;
510 return;
511 }
512 /* get keywords from list store */
513 nxt = NULL;
514 mrg = NULL;
515 uri = NULL;
516 tm = GTK_TREE_MODEL (gtk_builder_get_object (builder,
517 "GNUNET_GTK_keyword_list_store"));
518 if (TRUE ==
519 gtk_tree_model_get_iter_first (tm, &iter))
520 {
521 do
522 {
523 gtk_tree_model_get (tm, &iter,
524 0, &value,
525 -1);
526 nxt = GNUNET_FS_uri_ksk_create_from_args (1, (const char**) &value);
527 mrg = GNUNET_FS_uri_ksk_merge (nxt, uri);
528 GNUNET_FS_uri_destroy (nxt);
529 if (NULL != uri)
530 GNUNET_FS_uri_destroy (uri);
531 uri = mrg;
532 g_free (value);
533 }
534 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
535 }
536 /* get meta */
537 nm = GNUNET_CONTAINER_meta_data_create ();
538 tm = GTK_TREE_MODEL (gtk_builder_get_object (builder,
539 "GNUNET_GTK_meta_data_list_store"));
540 if (TRUE ==
541 gtk_tree_model_get_iter_first (tm, &iter))
542 {
543 do
544 {
545 gtk_tree_model_get (tm, &iter,
546 0, &ntype,
547 1, &nformat,
548 3, &value,
549 -1);
550 GNUNET_CONTAINER_meta_data_insert (nm,
551 "<user>",
552 ntype,
553 nformat,
554 "text/plain",
555 value,
556 strlen (value)+1);
557 g_free (value);
558 }
559 while (TRUE == gtk_tree_model_iter_next (tm, &iter));
560 }
561 bo.anonymity_level = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
562 "GNUNET_GTK_advertise_pseudonym_anonymity_spin_button")));
563 bo.content_priority = gtk_spin_button_get_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
564 "GNUNET_GTK_advertise_pseudonym_priority_spin_button")));
565 sb = GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
566 "GNUNET_GTK_advertise_pseudonym_expiration_year_spin_button"));
567 bo.expiration_time = GNUNET_GTK_get_expiration_time (sb);
568 root = gtk_entry_get_text (GTK_ENTRY (gtk_builder_get_object (builder,
569 "GNUNET_GTK_advertise_pseudonym_root_entry")));
570 GNUNET_FS_namespace_advertise (GNUNET_GTK_get_fs_handle (),
571 uri,
572 ns,
573 nm,
574 &bo,
575 root,
576 NULL, NULL);
577 GNUNET_FS_namespace_delete (ns, GNUNET_NO);
578 GNUNET_CONTAINER_meta_data_destroy (nm);
579 if (NULL != uri)
580 GNUNET_FS_uri_destroy (uri);
581 gtk_widget_destroy (ad);
582 g_object_unref (G_OBJECT (builder));
583 builder = NULL;
584}
585
586
587/* end of main_window_adv_pseudonym.c */