gnunet-svn
[Top][All Lists]
Advanced

[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, &not_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,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]