From 597510a370e10e4f3afd3347aee0f3a27a397ba7 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 26 May 2014 13:46:08 +0000 Subject: -finish update logic --- .../gnunet-conversation-gtk_contacts.c | 39 ++++++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/conversation/gnunet-conversation-gtk_contacts.c b/src/conversation/gnunet-conversation-gtk_contacts.c index aee03604..76be3909 100644 --- a/src/conversation/gnunet-conversation-gtk_contacts.c +++ b/src/conversation/gnunet-conversation-gtk_contacts.c @@ -365,6 +365,8 @@ display_record (void *cls, GtkTreeIter iter; gboolean do_display; const char *type; + gchar *lname; + gboolean update; if (NULL == zone_key) { @@ -390,14 +392,45 @@ display_record (void *cls, break; } } - /* FIXME: check if exists, if so, update or delete */ + /* check if exists, if so, update or remove */ + update = FALSE; + if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (contacts_liststore), + &iter)) + { + do + { + gtk_tree_model_get (GTK_TREE_MODEL(contacts_liststore), + &iter, + CONTACTS_LS_NAME, &lname, + -1); + if (0 == strcmp (lname, + rname)) + { + if (! do_display) + { + /* remove */ + gtk_list_store_remove (contacts_liststore, + &iter); + g_free (lname); + return; + } + /* update */ + update = TRUE; + break; + } + g_free (lname); + } + while (gtk_tree_model_iter_next (GTK_TREE_MODEL(contacts_liststore), + &iter)); + } /* insert new record */ if (! do_display) return; - gtk_list_store_append (contacts_liststore, - &iter); + if (! update) + gtk_list_store_append (contacts_liststore, + &iter); gtk_list_store_set (contacts_liststore, &iter, CONTACTS_LS_NAME, rname, -- cgit v1.2.3