aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-03-20 17:37:54 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-03-20 17:37:54 +0000
commit81779f543d47a3df0cd52f6c2811fae261f0cedf (patch)
tree18186cdb6dca5fcf71831087f87ddd594f96352d
parente2ee8e49abdcf7a2b432024b47c2527a57b17576 (diff)
downloadgnunet-gtk-81779f543d47a3df0cd52f6c2811fae261f0cedf.tar.gz
gnunet-gtk-81779f543d47a3df0cd52f6c2811fae261f0cedf.zip
- more changes
-rw-r--r--src/gns/gnunet-gns-gtk.c20
-rw-r--r--src/gns/gnunet-gns-gtk.h2
-rw-r--r--src/gns/gnunet-gns-gtk_zone.c163
3 files changed, 167 insertions, 18 deletions
diff --git a/src/gns/gnunet-gns-gtk.c b/src/gns/gnunet-gns-gtk.c
index 74437215..dbcdaa76 100644
--- a/src/gns/gnunet-gns-gtk.c
+++ b/src/gns/gnunet-gns-gtk.c
@@ -48,8 +48,6 @@ static char *zone_as_string;
48 */ 48 */
49static char *zonekey_directory; 49static char *zonekey_directory;
50 50
51static GtkWidget *main_window;
52
53/** 51/**
54 * Get cfg. 52 * Get cfg.
55 */ 53 */
@@ -77,11 +75,12 @@ void pseu_change_cont (void *cls,
77 int32_t success, 75 int32_t success,
78 const char *emsg) 76 const char *emsg)
79{ 77{
78 struct GNUNET_GNS_Context *gns = cls;
80 GtkWidget *dialog; 79 GtkWidget *dialog;
81 if (GNUNET_SYSERR == success) 80 if (GNUNET_SYSERR == success)
82 { 81 {
83 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("New Pseudonym could not be set: `%s'\n"), emsg); 82 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("New Pseudonym could not be set: `%s'\n"), emsg);
84 dialog = gtk_message_dialog_new (GTK_WINDOW (main_window), 83 dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window),
85 GTK_DIALOG_DESTROY_WITH_PARENT, 84 GTK_DIALOG_DESTROY_WITH_PARENT,
86 GTK_MESSAGE_ERROR, 85 GTK_MESSAGE_ERROR,
87 GTK_BUTTONS_CLOSE, 86 GTK_BUTTONS_CLOSE,
@@ -189,7 +188,7 @@ GNUNET_GNS_GTK_autoshort_imagemenuitem_toggled_cb (GtkCheckMenuItem *checkmenuit
189 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_write(cfg, cfgfile)) 188 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_write(cfg, cfgfile))
190 { 189 {
191 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Changes to autoshorten could not be written to configuration file: `%s'\n"), cfgfile); 190 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Changes to autoshorten could not be written to configuration file: `%s'\n"), cfgfile);
192 dialog = gtk_message_dialog_new (GTK_WINDOW (main_window), 191 dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window),
193 GTK_DIALOG_DESTROY_WITH_PARENT, 192 GTK_DIALOG_DESTROY_WITH_PARENT,
194 GTK_MESSAGE_ERROR, 193 GTK_MESSAGE_ERROR,
195 GTK_BUTTONS_CLOSE, 194 GTK_BUTTONS_CLOSE,
@@ -369,11 +368,13 @@ namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *t
369 char *label; 368 char *label;
370 char *keyfile; 369 char *keyfile;
371 370
371 gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context));
372
372 if ((tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT) != 0) 373 if ((tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT) != 0)
373 { 374 {
374 char * message = _("Namestore service is not running!\n"); 375 char * message = _("Namestore service is not running!\n");
375 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, message); 376 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, message);
376 dialog = gtk_message_dialog_new (GTK_WINDOW (main_window), 377 dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window),
377 GTK_DIALOG_DESTROY_WITH_PARENT, 378 GTK_DIALOG_DESTROY_WITH_PARENT,
378 GTK_MESSAGE_ERROR, 379 GTK_MESSAGE_ERROR,
379 GTK_BUTTONS_CLOSE, 380 GTK_BUTTONS_CLOSE,
@@ -386,7 +387,6 @@ namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *t
386 } 387 }
387 388
388 /* setup crypto keys */ 389 /* setup crypto keys */
389 gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context));
390 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (), 390 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration (),
391 "gns", 391 "gns",
392 "ZONEKEY", 392 "ZONEKEY",
@@ -431,6 +431,7 @@ namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *t
431 return; 431 return;
432 } 432 }
433 gns->builder = GNUNET_GTK_main_loop_get_builder(ml); 433 gns->builder = GNUNET_GTK_main_loop_get_builder(ml);
434 gns->main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window"));
434 gns->ts = GTK_TREE_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_treestore")); 435 gns->ts = GTK_TREE_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_treestore"));
435 gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_type_liststore")); 436 gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_type_liststore"));
436 gns->shorten_menu = GTK_CHECK_MENU_ITEM(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_autoshort_imagemenuitem")); 437 gns->shorten_menu = GTK_CHECK_MENU_ITEM(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_autoshort_imagemenuitem"));
@@ -451,16 +452,15 @@ namestore_service_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *t
451 GNUNET_GTK_set_icon_search_path (); 452 GNUNET_GTK_set_icon_search_path ();
452 GNUNET_GTK_setup_nls (); 453 GNUNET_GTK_setup_nls ();
453 /* setup main window */ 454 /* setup main window */
454 main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window")); 455 GNUNET_GTK_tray_icon_create (GTK_WINDOW (gns->main_window),
455 GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window),
456 "gnunet-gtk" /* FIXME: different icon? */ , 456 "gnunet-gtk" /* FIXME: different icon? */ ,
457 "gnunet-gns-gtk"); 457 "gnunet-gns-gtk");
458 458
459 /* make GUI visible */ 459 /* make GUI visible */
460 if (!tray_only) 460 if (!tray_only)
461 { 461 {
462 gtk_widget_show (main_window); 462 gtk_widget_show (gns->main_window);
463 gtk_window_present (GTK_WINDOW (main_window)); 463 gtk_window_present (GTK_WINDOW (gns->main_window));
464 } 464 }
465} 465}
466 466
diff --git a/src/gns/gnunet-gns-gtk.h b/src/gns/gnunet-gns-gtk.h
index ad6e749d..24f82398 100644
--- a/src/gns/gnunet-gns-gtk.h
+++ b/src/gns/gnunet-gns-gtk.h
@@ -38,6 +38,8 @@ struct GNUNET_GNS_Context
38 38
39 GtkBuilder *builder; 39 GtkBuilder *builder;
40 40
41 GtkWidget *main_window;
42
41 GtkTreeStore *ts; 43 GtkTreeStore *ts;
42 GtkListStore *ls; 44 GtkListStore *ls;
43 45
diff --git a/src/gns/gnunet-gns-gtk_zone.c b/src/gns/gnunet-gns-gtk_zone.c
index 0c8af816..d0561530 100644
--- a/src/gns/gnunet-gns-gtk_zone.c
+++ b/src/gns/gnunet-gns-gtk_zone.c
@@ -99,10 +99,12 @@ GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo,
99 else if ((NULL != name_str) && (0 != strcmp (NEW_NAME_STR, name_str))) 99 else if ((NULL != name_str) && (0 != strcmp (NEW_NAME_STR, name_str)))
100 { 100 {
101 /* Adding a new record */ 101 /* Adding a new record */
102 GNUNET_break (0);
103 gtk_tree_store_insert_with_values(gns->ts, &child , &it, 0, 102 gtk_tree_store_insert_with_values(gns->ts, &child , &it, 0,
104 TREE_COL_RECORD_TYPE, type, 103 TREE_COL_RECORD_TYPE, type,
105 TREE_COL_RECORD_TYPE_AS_STR, type_str, 104 TREE_COL_RECORD_TYPE_AS_STR, type_str,
105 TREE_COL_EXP_TIME_AS_STR, GNUNET_STRINGS_absolute_time_to_string (GNUNET_TIME_absolute_get_forever()),
106 TREE_COL_EXP_TIME, GNUNET_TIME_absolute_get_forever(),
107 TREE_COL_EXP_TIME_IS_REL, FALSE,
106 TREE_COL_IS_RECORD_ROW, GNUNET_YES, 108 TREE_COL_IS_RECORD_ROW, GNUNET_YES,
107 TREE_COL_NOT_DUMMY_ROW, GNUNET_YES, 109 TREE_COL_NOT_DUMMY_ROW, GNUNET_YES,
108 -1); 110 -1);
@@ -128,7 +130,6 @@ GNUNET_GNS_GTK_type_cellrenderercombo_changed_cb (GtkCellRendererCombo *combo,
128 else if (NULL == value_str) 130 else if (NULL == value_str)
129 { 131 {
130 /* Empty value field */ 132 /* Empty value field */
131 GNUNET_break (0);
132 if (GNUNET_YES == record_row) 133 if (GNUNET_YES == record_row)
133 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_COLOR, "red", -1); 134 gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_COLOR, "red", -1);
134 else 135 else
@@ -343,12 +344,106 @@ struct ZoneIteration_Context
343 struct GNUNET_NAMESTORE_ZoneIterator * it; 344 struct GNUNET_NAMESTORE_ZoneIterator * it;
344}; 345};
345 346
347struct Remove_Context
348{
349 struct GNUNET_GNS_Context *gns;
350 char *path;
351 char *parent;
352 GtkTreeModel *tm;
353};
354
355void
356remove_proc (void *cls,
357 int32_t success,
358 const char *emsg)
359{
360 struct Remove_Context *rcc = cls;
361 GtkWidget *dialog;
362 GtkTreeIter iter;
363 if (GNUNET_SYSERR == success)
364 {
365 char * message = _("Record could not be deleted: ");
366 dialog = gtk_message_dialog_new (GTK_WINDOW (rcc->gns->main_window),
367 GTK_DIALOG_DESTROY_WITH_PARENT,
368 GTK_MESSAGE_ERROR,
369 GTK_BUTTONS_CLOSE,
370 _("%s %s\n"),
371 message,
372 emsg);
373
374 g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), rcc->gns);
375 gtk_widget_show_all (dialog);
376 }
377 else
378 {
379 gtk_tree_model_get_iter_from_string(rcc->tm, &iter, rcc->path);
380 gtk_tree_store_remove (rcc->gns->ts, &iter);
381 }
382 GNUNET_free(rcc);
383}
384
385struct GNUNET_NAMESTORE_RecordData *
386build_rd_from_datastore (GtkTreeModel *tm, GtkTreeIter *it)
387{
388 struct GNUNET_NAMESTORE_RecordData *rd;
389 gboolean exp_is_relative;
390 gboolean public;
391 guint64 exp;
392 guint type;
393 char * value;
394 size_t value_len;
395
396 gtk_tree_model_get(tm, it, TREE_COL_EXP_TIME_IS_REL, &exp_is_relative,
397 TREE_COL_EXP_TIME, &exp,
398 TREE_COL_RECORD_TYPE, &type,
399 TREE_COL_IS_PUBLIC, &public,
400 TREE_COL_VAL_AS_STR, &value,
401 -1);
402
403 if (value != NULL)
404 value_len = strlen(value) + 1;
405 else
406 value_len = 0;
407
408 rd = GNUNET_malloc (sizeof (struct GNUNET_NAMESTORE_RecordData) + value_len);
409
410 if (exp_is_relative)
411 {
412 struct GNUNET_TIME_Relative rel_t;
413 rel_t.rel_value = exp;
414 rd->expiration = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), rel_t);
415 }
416 else
417 {
418 rd->expiration.abs_value = exp;
419 }
420 if (TRUE == public)
421 rd->flags = GNUNET_NAMESTORE_RF_NONE;
422 else
423 rd->flags = GNUNET_NAMESTORE_RF_PRIVATE;
424 rd->record_type = type;
425 rd->data_size = value_len;
426 rd->data = (char *) &rd[1];
427 memcpy ((void *) rd->data, value, value_len);
428 return rd;
429}
430
346void GNUNET_GNS_GTK_delete_popup_menu_delete_cb (GtkMenuItem *menuitem, 431void GNUNET_GNS_GTK_delete_popup_menu_delete_cb (GtkMenuItem *menuitem,
347 gpointer user_data) 432 gpointer user_data)
348{ 433{
349 struct GNUNET_GNS_Context *gns = user_data; 434 struct GNUNET_GNS_Context *gns = user_data;
350 GtkTreeIter it; 435 GtkTreeIter it;
436 GtkTreeIter parent;
437 GtkTreeIter child;
351 int not_dummy; 438 int not_dummy;
439 int children;
440 int c;
441 gboolean has_parent;
442
443 char *name = "";
444 char *path;
445 struct GNUNET_NAMESTORE_RecordData *rd;
446 struct Remove_Context *rcc;
352 447
353 GtkTreeView *tv = GTK_TREE_VIEW(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_main_treeview")); 448 GtkTreeView *tv = GTK_TREE_VIEW(gtk_builder_get_object (gns->builder, "GNUNET_GNS_GTK_main_treeview"));
354 GtkTreeModel *tm; 449 GtkTreeModel *tm;
@@ -356,8 +451,50 @@ void GNUNET_GNS_GTK_delete_popup_menu_delete_cb (GtkMenuItem *menuitem,
356 451
357 gtk_tree_selection_get_selected (ts, &tm, &it); 452 gtk_tree_selection_get_selected (ts, &tm, &it);
358 gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, &not_dummy, -1); 453 gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, &not_dummy, -1);
359 if (GNUNET_YES == not_dummy) 454 if (GNUNET_NO == not_dummy)
455 return;
456
457 /* Has parent? */
458 has_parent = gtk_tree_model_iter_parent (tm, &parent, &it);
459 if (TRUE == has_parent)
460 {
461 /* this is a single record */
462 gtk_tree_model_get(tm, &parent, TREE_COL_NAME, &name, -1);
463 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Deleting single record for name `%s'\n", name);
464 rd = build_rd_from_datastore (tm, &it);
465 rcc= GNUNET_malloc (sizeof (struct Remove_Context));
466 rcc->gns = gns;
467 rcc->tm = tm;
468 rcc->path = gtk_tree_model_get_string_from_iter (tm, &it);
469 GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, name,(const struct GNUNET_NAMESTORE_RecordData *) rd, &remove_proc, rcc);
470 GNUNET_free (rd);
471
472 }
473 else
474 {
475 /* this is a whole name */
476 gtk_tree_model_get(tm, &it, TREE_COL_NAME, &name, -1);
477 children = gtk_tree_model_iter_n_children (tm, &it);
478 //path = gtk_tree_model_get_string_from_iter(tm, &it);
479 path = gtk_tree_model_get_string_from_iter (tm, &it);
480 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Deleting name `%s' with %u children\n", name, children);
481 gtk_tree_model_iter_children (tm, &child, &it);
482 for (c = 0; c < children; c++)
483 {
484 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Deleting %u record for name `%s'\n", c, name);
485
486 rd = build_rd_from_datastore (tm, &child);
487 rcc= GNUNET_malloc (sizeof (struct Remove_Context));
488 rcc->gns = gns;
489 rcc->tm = tm;
490 rcc->path = gtk_tree_model_get_string_from_iter (tm, &child);
491 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "CALLING\n");
492 GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, name,(const struct GNUNET_NAMESTORE_RecordData *) rd, &remove_proc, rcc);
493 gtk_tree_model_iter_next (tm, &child);
494 }
495 gtk_tree_model_get_iter_from_string(tm, &it, path);
360 gtk_tree_store_remove (gns->ts, &it); 496 gtk_tree_store_remove (gns->ts, &it);
497 }
361} 498}
362 499
363void zone_iteration_proc (void *cls, 500void zone_iteration_proc (void *cls,
@@ -378,6 +515,7 @@ void zone_iteration_proc (void *cls,
378 char *exp; 515 char *exp;
379 char *val; 516 char *val;
380 int public; 517 int public;
518 guint64 exp_t;
381 519
382 GNUNET_assert (zc_ctx != NULL); 520 GNUNET_assert (zc_ctx != NULL);
383 if ((NULL == zone_key) && (NULL == name)) 521 if ((NULL == zone_key) && (NULL == name))
@@ -416,6 +554,7 @@ void zone_iteration_proc (void *cls,
416 return; 554 return;
417 } 555 }
418 gtk_entry_set_text (pseu_entry, (char *)rd[0].data); 556 gtk_entry_set_text (pseu_entry, (char *)rd[0].data);
557 GNUNET_NAMESTORE_zone_iterator_next(zc_ctx->it);
419 return; 558 return;
420 } 559 }
421 560
@@ -437,10 +576,10 @@ void zone_iteration_proc (void *cls,
437 c, rd[c].record_type, rd[c].flags, rd[c].expiration, rd[c].data_size); 576 c, rd[c].record_type, rd[c].flags, rd[c].expiration, rd[c].data_size);
438 577
439 /* Set public toggle */ 578 /* Set public toggle */
440 if (rd[c].flags != GNUNET_NAMESTORE_RF_PRIVATE) 579 if (rd[c].flags == GNUNET_NAMESTORE_RF_PRIVATE)
441 public = GNUNET_YES;
442 else
443 public = GNUNET_NO; 580 public = GNUNET_NO;
581 else
582 public = GNUNET_YES;
444 583
445 /* Expiration time */ 584 /* Expiration time */
446 time_is_relative = GNUNET_NO; 585 time_is_relative = GNUNET_NO;
@@ -449,10 +588,17 @@ void zone_iteration_proc (void *cls,
449 { 588 {
450 /* FIX THIS WHEN WE HAVE RELATIVE TIME */ 589 /* FIX THIS WHEN WE HAVE RELATIVE TIME */
451 struct GNUNET_TIME_Relative rel_time = GNUNET_TIME_relative_get_zero(); 590 struct GNUNET_TIME_Relative rel_time = GNUNET_TIME_relative_get_zero();
452 exp = GNUNET_STRINGS_absolute_time_to_string (GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), rel_time)); 591 struct GNUNET_TIME_Absolute exp_abs;
592 exp_abs = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), rel_time);
593 exp_t = exp_abs.abs_value;
594 exp = GNUNET_STRINGS_absolute_time_to_string (exp_abs);
453 } 595 }
454 else 596 else
455 exp = GNUNET_STRINGS_absolute_time_to_string (rd[c].expiration); 597 {
598 struct GNUNET_TIME_Absolute exp_abs = rd[c].expiration;
599 exp_t = exp_abs.abs_value;
600 exp = GNUNET_STRINGS_absolute_time_to_string (exp_abs);
601 }
456 /* value */ 602 /* value */
457 val = GNUNET_NAMESTORE_value_to_string (rd[c].record_type, 603 val = GNUNET_NAMESTORE_value_to_string (rd[c].record_type,
458 rd[c].data, 604 rd[c].data,
@@ -462,6 +608,7 @@ void zone_iteration_proc (void *cls,
462 TREE_COL_RECORD_TYPE, rd[c].record_type, 608 TREE_COL_RECORD_TYPE, rd[c].record_type,
463 TREE_COL_RECORD_TYPE_AS_STR, GNUNET_NAMESTORE_number_to_typename(rd[c].record_type), 609 TREE_COL_RECORD_TYPE_AS_STR, GNUNET_NAMESTORE_number_to_typename(rd[c].record_type),
464 TREE_COL_IS_PUBLIC, public, 610 TREE_COL_IS_PUBLIC, public,
611 TREE_COL_EXP_TIME, exp_t,
465 TREE_COL_EXP_TIME_AS_STR, exp, 612 TREE_COL_EXP_TIME_AS_STR, exp,
466 TREE_COL_EXP_TIME_IS_REL, time_is_relative, 613 TREE_COL_EXP_TIME_IS_REL, time_is_relative,
467 TREE_COL_VAL_AS_STR, val, 614 TREE_COL_VAL_AS_STR, val,