[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20635 - gnunet-gtk/src/gns
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20635 - gnunet-gtk/src/gns |
Date: |
Tue, 20 Mar 2012 18:37:54 +0100 |
Author: wachs
Date: 2012-03-20 18:37:54 +0100 (Tue, 20 Mar 2012)
New Revision: 20635
Modified:
gnunet-gtk/src/gns/gnunet-gns-gtk.c
gnunet-gtk/src/gns/gnunet-gns-gtk.h
gnunet-gtk/src/gns/gnunet-gns-gtk_zone.c
Log:
- more changes
Modified: gnunet-gtk/src/gns/gnunet-gns-gtk.c
===================================================================
--- gnunet-gtk/src/gns/gnunet-gns-gtk.c 2012-03-20 15:27:38 UTC (rev 20634)
+++ gnunet-gtk/src/gns/gnunet-gns-gtk.c 2012-03-20 17:37:54 UTC (rev 20635)
@@ -48,8 +48,6 @@
*/
static char *zonekey_directory;
-static GtkWidget *main_window;
-
/**
* Get cfg.
*/
@@ -77,11 +75,12 @@
int32_t success,
const char *emsg)
{
+ struct GNUNET_GNS_Context *gns = cls;
GtkWidget *dialog;
if (GNUNET_SYSERR == success)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("New Pseudonym could not be set:
`%s'\n"), emsg);
- dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
+ dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
@@ -189,7 +188,7 @@
if (GNUNET_SYSERR == GNUNET_CONFIGURATION_write(cfg, cfgfile))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Changes to autoshorten could not
be written to configuration file: `%s'\n"), cfgfile);
- dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
+ dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
@@ -369,11 +368,13 @@
char *label;
char *keyfile;
+ gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context));
+
if ((tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT) != 0)
{
char * message = _("Namestore service is not running!\n");
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, message);
- dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
+ dialog = gtk_message_dialog_new (GTK_WINDOW (gns->main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
@@ -386,7 +387,6 @@
}
/* setup crypto keys */
- gns = GNUNET_malloc (sizeof (struct GNUNET_GNS_Context));
if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (get_configuration
(),
"gns",
"ZONEKEY",
@@ -431,6 +431,7 @@
return;
}
gns->builder = GNUNET_GTK_main_loop_get_builder(ml);
+ gns->main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window"));
gns->ts = GTK_TREE_STORE (gtk_builder_get_object (gns->builder,
"GNUNET_GNS_GTK_treestore"));
gns->ls = GTK_LIST_STORE (gtk_builder_get_object (gns->builder,
"GNUNET_GNS_GTK_type_liststore"));
gns->shorten_menu = GTK_CHECK_MENU_ITEM(gtk_builder_get_object
(gns->builder, "GNUNET_GNS_GTK_autoshort_imagemenuitem"));
@@ -451,16 +452,15 @@
GNUNET_GTK_set_icon_search_path ();
GNUNET_GTK_setup_nls ();
/* setup main window */
- main_window = GTK_WIDGET (get_object ("GNUNET_GNS_GTK_main_window"));
- GNUNET_GTK_tray_icon_create (GTK_WINDOW (main_window),
+ GNUNET_GTK_tray_icon_create (GTK_WINDOW (gns->main_window),
"gnunet-gtk" /* FIXME: different icon? */ ,
"gnunet-gns-gtk");
/* make GUI visible */
if (!tray_only)
{
- gtk_widget_show (main_window);
- gtk_window_present (GTK_WINDOW (main_window));
+ gtk_widget_show (gns->main_window);
+ gtk_window_present (GTK_WINDOW (gns->main_window));
}
}
Modified: gnunet-gtk/src/gns/gnunet-gns-gtk.h
===================================================================
--- gnunet-gtk/src/gns/gnunet-gns-gtk.h 2012-03-20 15:27:38 UTC (rev 20634)
+++ gnunet-gtk/src/gns/gnunet-gns-gtk.h 2012-03-20 17:37:54 UTC (rev 20635)
@@ -38,6 +38,8 @@
GtkBuilder *builder;
+ GtkWidget *main_window;
+
GtkTreeStore *ts;
GtkListStore *ls;
Modified: gnunet-gtk/src/gns/gnunet-gns-gtk_zone.c
===================================================================
--- gnunet-gtk/src/gns/gnunet-gns-gtk_zone.c 2012-03-20 15:27:38 UTC (rev
20634)
+++ gnunet-gtk/src/gns/gnunet-gns-gtk_zone.c 2012-03-20 17:37:54 UTC (rev
20635)
@@ -99,10 +99,12 @@
else if ((NULL != name_str) && (0 != strcmp (NEW_NAME_STR, name_str)))
{
/* Adding a new record */
- GNUNET_break (0);
gtk_tree_store_insert_with_values(gns->ts, &child , &it, 0,
TREE_COL_RECORD_TYPE, type,
TREE_COL_RECORD_TYPE_AS_STR, type_str,
+ TREE_COL_EXP_TIME_AS_STR, GNUNET_STRINGS_absolute_time_to_string
(GNUNET_TIME_absolute_get_forever()),
+ TREE_COL_EXP_TIME, GNUNET_TIME_absolute_get_forever(),
+ TREE_COL_EXP_TIME_IS_REL, FALSE,
TREE_COL_IS_RECORD_ROW, GNUNET_YES,
TREE_COL_NOT_DUMMY_ROW, GNUNET_YES,
-1);
@@ -128,7 +130,6 @@
else if (NULL == value_str)
{
/* Empty value field */
- GNUNET_break (0);
if (GNUNET_YES == record_row)
gtk_tree_store_set (gns->ts, &it, TREE_COL_VAL_COLOR, "red", -1);
else
@@ -343,21 +344,157 @@
struct GNUNET_NAMESTORE_ZoneIterator * it;
};
+struct Remove_Context
+{
+ struct GNUNET_GNS_Context *gns;
+ char *path;
+ char *parent;
+ GtkTreeModel *tm;
+};
+
+void
+remove_proc (void *cls,
+ int32_t success,
+ const char *emsg)
+{
+ struct Remove_Context *rcc = cls;
+ GtkWidget *dialog;
+ GtkTreeIter iter;
+ if (GNUNET_SYSERR == success)
+ {
+ char * message = _("Record could not be deleted: ");
+ dialog = gtk_message_dialog_new (GTK_WINDOW (rcc->gns->main_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("%s %s\n"),
+ message,
+ emsg);
+
+ g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy),
rcc->gns);
+ gtk_widget_show_all (dialog);
+ }
+ else
+ {
+ gtk_tree_model_get_iter_from_string(rcc->tm, &iter, rcc->path);
+ gtk_tree_store_remove (rcc->gns->ts, &iter);
+ }
+ GNUNET_free(rcc);
+}
+
+struct GNUNET_NAMESTORE_RecordData *
+build_rd_from_datastore (GtkTreeModel *tm, GtkTreeIter *it)
+{
+ struct GNUNET_NAMESTORE_RecordData *rd;
+ gboolean exp_is_relative;
+ gboolean public;
+ guint64 exp;
+ guint type;
+ char * value;
+ size_t value_len;
+
+ gtk_tree_model_get(tm, it, TREE_COL_EXP_TIME_IS_REL, &exp_is_relative,
+ TREE_COL_EXP_TIME, &exp,
+ TREE_COL_RECORD_TYPE, &type,
+ TREE_COL_IS_PUBLIC, &public,
+ TREE_COL_VAL_AS_STR, &value,
+ -1);
+
+ if (value != NULL)
+ value_len = strlen(value) + 1;
+ else
+ value_len = 0;
+
+ rd = GNUNET_malloc (sizeof (struct GNUNET_NAMESTORE_RecordData) + value_len);
+
+ if (exp_is_relative)
+ {
+ struct GNUNET_TIME_Relative rel_t;
+ rel_t.rel_value = exp;
+ rd->expiration = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(),
rel_t);
+ }
+ else
+ {
+ rd->expiration.abs_value = exp;
+ }
+ if (TRUE == public)
+ rd->flags = GNUNET_NAMESTORE_RF_NONE;
+ else
+ rd->flags = GNUNET_NAMESTORE_RF_PRIVATE;
+ rd->record_type = type;
+ rd->data_size = value_len;
+ rd->data = (char *) &rd[1];
+ memcpy ((void *) rd->data, value, value_len);
+ return rd;
+}
+
void GNUNET_GNS_GTK_delete_popup_menu_delete_cb (GtkMenuItem *menuitem,
gpointer user_data)
{
struct GNUNET_GNS_Context *gns = user_data;
GtkTreeIter it;
+ GtkTreeIter parent;
+ GtkTreeIter child;
int not_dummy;
+ int children;
+ int c;
+ gboolean has_parent;
+ char *name = "";
+ char *path;
+ struct GNUNET_NAMESTORE_RecordData *rd;
+ struct Remove_Context *rcc;
+
GtkTreeView *tv = GTK_TREE_VIEW(gtk_builder_get_object (gns->builder,
"GNUNET_GNS_GTK_main_treeview"));
GtkTreeModel *tm;
GtkTreeSelection * ts = gtk_tree_view_get_selection(tv);
gtk_tree_selection_get_selected (ts, &tm, &it);
gtk_tree_model_get(tm, &it, TREE_COL_NOT_DUMMY_ROW, ¬_dummy, -1);
- if (GNUNET_YES == not_dummy)
+ if (GNUNET_NO == not_dummy)
+ return;
+
+ /* Has parent? */
+ has_parent = gtk_tree_model_iter_parent (tm, &parent, &it);
+ if (TRUE == has_parent)
+ {
+ /* this is a single record */
+ gtk_tree_model_get(tm, &parent, TREE_COL_NAME, &name, -1);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Deleting single record for name
`%s'\n", name);
+ rd = build_rd_from_datastore (tm, &it);
+ rcc= GNUNET_malloc (sizeof (struct Remove_Context));
+ rcc->gns = gns;
+ rcc->tm = tm;
+ rcc->path = gtk_tree_model_get_string_from_iter (tm, &it);
+ GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, name,(const struct
GNUNET_NAMESTORE_RecordData *) rd, &remove_proc, rcc);
+ GNUNET_free (rd);
+
+ }
+ else
+ {
+ /* this is a whole name */
+ gtk_tree_model_get(tm, &it, TREE_COL_NAME, &name, -1);
+ children = gtk_tree_model_iter_n_children (tm, &it);
+ //path = gtk_tree_model_get_string_from_iter(tm, &it);
+ path = gtk_tree_model_get_string_from_iter (tm, &it);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Deleting name `%s' with %u
children\n", name, children);
+ gtk_tree_model_iter_children (tm, &child, &it);
+ for (c = 0; c < children; c++)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Deleting %u record for name
`%s'\n", c, name);
+
+ rd = build_rd_from_datastore (tm, &child);
+ rcc= GNUNET_malloc (sizeof (struct Remove_Context));
+ rcc->gns = gns;
+ rcc->tm = tm;
+ rcc->path = gtk_tree_model_get_string_from_iter (tm, &child);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "CALLING\n");
+ GNUNET_NAMESTORE_record_remove(gns->ns, gns->pkey, name,(const struct
GNUNET_NAMESTORE_RecordData *) rd, &remove_proc, rcc);
+ gtk_tree_model_iter_next (tm, &child);
+ }
+ gtk_tree_model_get_iter_from_string(tm, &it, path);
gtk_tree_store_remove (gns->ts, &it);
+ }
}
void zone_iteration_proc (void *cls,
@@ -378,6 +515,7 @@
char *exp;
char *val;
int public;
+ guint64 exp_t;
GNUNET_assert (zc_ctx != NULL);
if ((NULL == zone_key) && (NULL == name))
@@ -416,6 +554,7 @@
return;
}
gtk_entry_set_text (pseu_entry, (char *)rd[0].data);
+ GNUNET_NAMESTORE_zone_iterator_next(zc_ctx->it);
return;
}
@@ -437,10 +576,10 @@
c, rd[c].record_type, rd[c].flags, rd[c].expiration, rd[c].data_size);
/* Set public toggle */
- if (rd[c].flags != GNUNET_NAMESTORE_RF_PRIVATE)
+ if (rd[c].flags == GNUNET_NAMESTORE_RF_PRIVATE)
+ public = GNUNET_NO;
+ else
public = GNUNET_YES;
- else
- public = GNUNET_NO;
/* Expiration time */
time_is_relative = GNUNET_NO;
@@ -449,10 +588,17 @@
{
/* FIX THIS WHEN WE HAVE RELATIVE TIME */
struct GNUNET_TIME_Relative rel_time = GNUNET_TIME_relative_get_zero();
- exp = GNUNET_STRINGS_absolute_time_to_string
(GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), rel_time));
+ struct GNUNET_TIME_Absolute exp_abs;
+ exp_abs = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), rel_time);
+ exp_t = exp_abs.abs_value;
+ exp = GNUNET_STRINGS_absolute_time_to_string (exp_abs);
}
else
- exp = GNUNET_STRINGS_absolute_time_to_string (rd[c].expiration);
+ {
+ struct GNUNET_TIME_Absolute exp_abs = rd[c].expiration;
+ exp_t = exp_abs.abs_value;
+ exp = GNUNET_STRINGS_absolute_time_to_string (exp_abs);
+ }
/* value */
val = GNUNET_NAMESTORE_value_to_string (rd[c].record_type,
rd[c].data,
@@ -462,6 +608,7 @@
TREE_COL_RECORD_TYPE, rd[c].record_type,
TREE_COL_RECORD_TYPE_AS_STR,
GNUNET_NAMESTORE_number_to_typename(rd[c].record_type),
TREE_COL_IS_PUBLIC, public,
+ TREE_COL_EXP_TIME, exp_t,
TREE_COL_EXP_TIME_AS_STR, exp,
TREE_COL_EXP_TIME_IS_REL,
time_is_relative,
TREE_COL_VAL_AS_STR, val,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20635 - gnunet-gtk/src/gns,
gnunet <=