about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-11-28 01:05:37 +0000
committerJames Booth <boothj5@gmail.com>2012-11-28 01:05:37 +0000
commitce0e96edf51d2ee2bc8bbe55520893741668cde1 (patch)
tree3cbde4077556839b1ff41fb0edb1988b21d8cf37
parent3462b5afd623cb11c07c49251a7009bdc006f461 (diff)
parent80c2209bbda6a5624ca8ab63645d144252befb26 (diff)
downloadprofani-tty-ce0e96edf51d2ee2bc8bbe55520893741668cde1.tar.gz
Merge branch 'master' into sublist
-rw-r--r--src/contact_list.c10
-rw-r--r--src/contact_list.h1
-rw-r--r--src/jabber.c5
3 files changed, 15 insertions, 1 deletions
diff --git a/src/contact_list.c b/src/contact_list.c
index ddbe969c..5eb43324 100644
--- a/src/contact_list.c
+++ b/src/contact_list.c
@@ -72,6 +72,12 @@ contact_list_add(const char * const jid, const char * const name,
     return added;
 }
 
+void
+contact_list_remove(const char * const jid)
+{
+    g_hash_table_remove(contacts, jid);
+}
+
 gboolean
 contact_list_update_contact(const char * const jid, const char * const presence,
     const char * const status)
@@ -103,7 +109,9 @@ contact_list_update_subscription(const char * const jid,
     PContact contact = g_hash_table_lookup(contacts, jid);
 
     if (contact == NULL) {
-        return;
+        contact = p_contact_new(jid, NULL, "offline", NULL, subscription,
+            pending_out);
+        g_hash_table_insert(contacts, strdup(jid), contact);
     } else {
         p_contact_set_subscription(contact, subscription);
         p_contact_set_pending_out(contact, pending_out);
diff --git a/src/contact_list.h b/src/contact_list.h
index 44322048..062cfa65 100644
--- a/src/contact_list.h
+++ b/src/contact_list.h
@@ -30,6 +30,7 @@
 void contact_list_init(void);
 void contact_list_clear(void);
 void contact_list_reset_search_attempts(void);
+void contact_list_remove(const char * const jid);
 gboolean contact_list_add(const char * const jid, const char * const name,
     const char * const presence, const char * const status,
     const char * const subscription, gboolean pending_out);
diff --git a/src/jabber.c b/src/jabber.c
index 3dd4eb77..e03f1e2b 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -802,6 +802,11 @@ _iq_handler(xmpp_conn_t * const conn,
         const char *jid = xmpp_stanza_get_attribute(item, STANZA_ATTR_JID);
         const char *sub = xmpp_stanza_get_attribute(item, STANZA_ATTR_SUBSCRIPTION);
 
+        if (g_strcmp0(sub, "remove") == 0) {
+            contact_list_remove(jid);
+            return TRUE;
+        }
+
         gboolean pending_out = FALSE;
         const char *ask = xmpp_stanza_get_attribute(item, STANZA_ATTR_ASK);
         if ((ask != NULL) && (strcmp(ask, "subscribe") == 0)) {