gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r29945 - in gnunet-gtk: contrib src/peerinfo src/setup


From: gnunet
Subject: [GNUnet-SVN] r29945 - in gnunet-gtk: contrib src/peerinfo src/setup
Date: Mon, 7 Oct 2013 21:28:26 +0200

Author: grothoff
Date: 2013-10-07 21:28:26 +0200 (Mon, 07 Oct 2013)
New Revision: 29945

Modified:
   gnunet-gtk/contrib/gnunet_peerinfo_gtk_main_window.glade
   gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c
   gnunet-gtk/src/setup/gnunet-setup-hostlist-editing.c
Log:
-enable friends editing

Modified: gnunet-gtk/contrib/gnunet_peerinfo_gtk_main_window.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_peerinfo_gtk_main_window.glade    2013-10-07 
19:28:15 UTC (rev 29944)
+++ gnunet-gtk/contrib/gnunet_peerinfo_gtk_main_window.glade    2013-10-07 
19:28:26 UTC (rev 29945)
@@ -24,6 +24,8 @@
       <column type="gboolean"/>
       <!-- column-name is_friend -->
       <column type="gboolean"/>
+      <!-- column-name peerinfo -->
+      <column type="gpointer"/>
     </columns>
   </object>
   <object class="GtkWindow" id="GNUNET_PEERINFO_GTK_main_window">

Modified: gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c
===================================================================
--- gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c       2013-10-07 19:28:15 UTC 
(rev 29944)
+++ gnunet-gtk/src/peerinfo/gnunet-peerinfo-gtk.c       2013-10-07 19:28:26 UTC 
(rev 29945)
@@ -88,7 +88,12 @@
   /**
    * A gboolean
    */
-  PEERINFO_MC_IS_FRIEND = 9
+  PEERINFO_MC_IS_FRIEND = 9,
+
+  /**
+   * A `struct PeerInfo *`
+   */
+  PEERINFO_MC_PEERINFO = 10
 };
 
 
@@ -113,6 +118,11 @@
   struct GNUNET_TRANSPORT_AddressToStringContext *tos;
 
   /**
+   * Identity of the peer for this entry.
+   */
+  struct GNUNET_PeerIdentity pid;
+
+  /**
    * Did we get any address?
    */
   int got_address;
@@ -379,6 +389,8 @@
   info = GNUNET_CONTAINER_multipeermap_get (peer2info, peer);
   if (NULL == info)
   {
+    info = GNUNET_new (struct PeerInfo);
+    info->pid = *peer;
     gtk_list_store_append (ls, &iter);
     gtk_list_store_set (ls, &iter,
                        PEERINFO_MC_PEER_IDENTITY_STRING, GNUNET_i2s (peer),
@@ -392,9 +404,9 @@
                        PEERINFO_MC_CONNECTED_STATUS, FALSE,
                         PEERINFO_MC_IS_FRIEND, 
GNUNET_CONTAINER_multipeermap_contains (friends,
                                                                                
        peer),
+                        PEERINFO_MC_PEERINFO, info,
                         -1);
     path = gtk_tree_model_get_path (GTK_TREE_MODEL (ls), &iter);
-    info = GNUNET_malloc (sizeof (struct PeerInfo));
     info->rr = gtk_tree_row_reference_new (GTK_TREE_MODEL (ls), path);
     GNUNET_assert (NULL != info->rr);
     gtk_tree_path_free (path);
@@ -454,6 +466,51 @@
 
 
 /**
+ * Write a friend to the friends file.
+ *
+ * @param cls the `struct GNUNET_FRIENDS_Writer`
+ * @param friend friend to write to file
+ * @param value unused
+ * @return #GNUNET_OK if the writing succeeded
+ */
+static int
+write_friend (void *cls,
+              const struct GNUNET_PeerIdentity *friend,
+              void *value)
+{
+  struct GNUNET_FRIENDS_Writer *w = cls;
+
+  return GNUNET_FRIENDS_write (w, friend);
+}
+
+
+/**
+ * Write an updated friends file out to disk.
+ */
+static void
+write_friends ()
+{
+  struct GNUNET_FRIENDS_Writer *w;
+
+  w = GNUNET_FRIENDS_write_start (get_configuration ());
+  if (NULL == w)
+  {
+    GNUNET_break (0);
+    return;
+  }
+  GNUNET_CONTAINER_multipeermap_iterate (friends,
+                                         &write_friend,
+                                         w);
+  if (GNUNET_OK !=
+      GNUNET_FRIENDS_write_stop (w))
+  {
+    GNUNET_break (0);
+    return;
+  }
+}
+
+
+/**
  * The user has toggled the 'is friend' column for one of the peers.
  * Update everything.
  *
@@ -466,7 +523,46 @@
                                                                        gchar 
*path,
                                                                        
gpointer user_data)
 {
-  GNUNET_break (0); // not implemented
+  GtkListStore *ls;
+  GtkTreeIter old;
+  struct PeerInfo *info;
+  gboolean oldvalue;
+
+  ls = GTK_LIST_STORE (get_object ("GNUNET_PEERINFO_GTK_list_store"));
+  if (NULL == ls)
+  {
+    GNUNET_break (0);
+    return;
+  }
+  if (TRUE !=
+      gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ls), &old, path))
+  {
+    GNUNET_break (0);
+    return;
+  }
+  gtk_tree_model_get (GTK_TREE_MODEL (ls), &old,
+                      PEERINFO_MC_PEERINFO, &info,
+                      PEERINFO_MC_IS_FRIEND, &oldvalue,
+                      -1);
+  gtk_list_store_set (ls, &old,
+                      PEERINFO_MC_IS_FRIEND, ! oldvalue,
+                      -1);
+  if (oldvalue)
+  {
+    GNUNET_break (1 ==
+                  GNUNET_CONTAINER_multipeermap_remove_all (friends,
+                                                            &info->pid));
+  }
+  else
+  {
+    GNUNET_break (GNUNET_YES ==
+                  GNUNET_CONTAINER_multipeermap_put (friends,
+                                                     &info->pid,
+                                                     "true",
+                                                     
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+
+  }
+  write_friends ();
 }
 
 

Modified: gnunet-gtk/src/setup/gnunet-setup-hostlist-editing.c
===================================================================
--- gnunet-gtk/src/setup/gnunet-setup-hostlist-editing.c        2013-10-07 
19:28:15 UTC (rev 29944)
+++ gnunet-gtk/src/setup/gnunet-setup-hostlist-editing.c        2013-10-07 
19:28:26 UTC (rev 29945)
@@ -36,8 +36,8 @@
  * @param user_data not used
  */
 void
-GNUNET_setup_hostlist_url_cellrenderertext_edited_cb (GtkCellRendererText *
-                                                      renderer, gchar * path,
+GNUNET_setup_hostlist_url_cellrenderertext_edited_cb (GtkCellRendererText 
*renderer,
+                                                      gchar * path,
                                                       gchar * new_text,
                                                       gpointer user_data)
 {
@@ -48,20 +48,20 @@
 
   ls = GTK_LIST_STORE (GNUNET_SETUP_get_object
                        ("GNUNET_setup_hostlist_url_liststore"));
-  if (ls == NULL)
+  if (NULL == ls)
   {
     GNUNET_break (0);
     return;
   }
-  if (TRUE !=
-      gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ls), &old, path))
+  if (! gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ls), &old, path))
   {
     GNUNET_break (0);
     return;
   }
-  gtk_tree_model_get (GTK_TREE_MODEL (ls), &old, 0, &oldtext, -1);
-  fprintf (stderr, "Edited to `%s'\n", new_text);
-  if (strlen (oldtext) == 0)
+  gtk_tree_model_get (GTK_TREE_MODEL (ls), &old,
+                      GNUNET_GTK_SETUP_HOSTLIST_URL_MC_URL, &oldtext,
+                      -1);
+  if (0 == strlen (oldtext))
   {
     gtk_list_store_insert_before (ls, &iter, &old);
     gtk_list_store_set (ls, &iter,




reply via email to

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