about summary refs log tree commit diff stats
path: root/src/server_events.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server_events.c')
-rw-r--r--src/server_events.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/server_events.c b/src/server_events.c
index afb29bcd..79cc0e26 100644
--- a/src/server_events.c
+++ b/src/server_events.c
@@ -36,23 +36,22 @@
 
 #include "ui/ui.h"
 
+void
+handle_room_join_error(const char * const room, const char * const err)
+{
+    if (muc_room_is_active(room)) {
+        muc_leave_room(room);
+    }
+    ui_handle_room_join_error(room, err);
+}
+
 // handle presence stanza errors
 void
 handle_presence_error(const char *from, const char * const type,
     const char *err_msg)
 {
-    // handle nickname conflict on entering room
-    if ((from != NULL) && g_strcmp0(err_msg, "conflict") == 0) {
-        // remove the room from muc
-        Jid *room_jid = jid_create(from);
-        if (!muc_get_roster_received(room_jid->barejid)) {
-            muc_leave_room(room_jid->barejid);
-            ui_handle_recipient_error(room_jid->barejid, err_msg);
-        }
-        jid_destroy(room_jid);
-
-    // handle any other error from recipient
-    } else if (from != NULL) {
+    // handle error from recipient
+    if (from != NULL) {
         ui_handle_recipient_error(from, err_msg);
 
     // handle errors from no recipient
@@ -404,6 +403,12 @@ handle_room_nick_change(const char * const room,
 void
 handle_room_roster_complete(const char * const room)
 {
+    if (muc_room_is_autojoin(room)) {
+        ui_room_join(room, FALSE);
+    } else {
+        ui_room_join(room, TRUE);
+    }
+    muc_remove_invite(room);
     muc_set_roster_received(room);
     GList *roster = muc_get_roster(room);
     ui_room_roster(room, roster, NULL);
@@ -500,13 +505,6 @@ handle_autoping_cancel(void)
 }
 
 void
-handle_bookmark_autojoin(char *jid)
-{
-    ui_room_join(jid, FALSE);
-    muc_remove_invite(jid);
-}
-
-void
 handle_xmpp_stanza(const char * const msg)
 {
     ui_handle_stanza(msg);