about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-09-22 01:26:40 +0100
committerJames Booth <boothj5@gmail.com>2013-09-22 01:26:40 +0100
commitd70245c8870426382959d9d23199a34e72fc7aa5 (patch)
tree73b0fb53284c0d55eea358e98d18d834cf29ebf0
parentd0c8ed462ddd32ca23a8162a0e5c21f1f25c887b (diff)
downloadprofani-tty-d70245c8870426382959d9d23199a34e72fc7aa5.tar.gz
Fixe rejoining room after nickname conflict
fixes #241
-rw-r--r--src/muc.c4
-rw-r--r--src/profanity.c5
-rw-r--r--src/xmpp/presence.c10
3 files changed, 14 insertions, 5 deletions
diff --git a/src/muc.c b/src/muc.c
index 93202a54..1dcc457f 100644
--- a/src/muc.c
+++ b/src/muc.c
@@ -145,7 +145,9 @@ muc_join_room(const char * const room, const char * const nick)
 void
 muc_leave_room(const char * const room)
 {
-    g_hash_table_remove(rooms, room);
+    if (rooms != NULL) {
+        g_hash_table_remove(rooms, room);
+    }
 }
 
 /*
diff --git a/src/profanity.c b/src/profanity.c
index b18cbe91..bcb59395 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -196,6 +196,11 @@ prof_handle_error_message(const char *from, const char *err_msg)
         } else {
             cons_show_error("Error received from server: %s", err_msg);
         }
+        // remove the room from muc
+        Jid *room_jid = jid_create(from);
+        muc_leave_room(room_jid->barejid);
+        jid_destroy(room_jid);
+
     } else {
         cons_show_error("Error received from server: %s", err_msg);
     }
diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c
index 809ddf6f..ba9c6c02 100644
--- a/src/xmpp/presence.c
+++ b/src/xmpp/presence.c
@@ -320,10 +320,12 @@ presence_leave_chat_room(const char * const room_jid)
     xmpp_conn_t *conn = connection_get_conn();
     char *nick = muc_get_room_nick(room_jid);
 
-    xmpp_stanza_t *presence = stanza_create_room_leave_presence(ctx, room_jid,
-        nick);
-    xmpp_send(conn, presence);
-    xmpp_stanza_release(presence);
+    if (nick != NULL) {
+        xmpp_stanza_t *presence = stanza_create_room_leave_presence(ctx, room_jid,
+            nick);
+        xmpp_send(conn, presence);
+        xmpp_stanza_release(presence);
+    }
 }
 
 static int