about summary refs log tree commit diff stats
path: root/src/ui/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/core.c')
-rw-r--r--src/ui/core.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/ui/core.c b/src/ui/core.c
index 5502f972..be1afd03 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -403,6 +403,32 @@ ui_group_removed(const char * const contact, const char * const group)
 }
 
 void
+ui_handle_error_message(const char * const from, const char * const err_msg)
+{
+    win_type_t win_type = ui_current_win_type();
+    if (err_msg == NULL) {
+        cons_show_error("Unknown error received from service.");
+    } else if (strcmp(err_msg, "conflict") == 0) {
+        if (win_type == WIN_MUC) {
+            ui_current_print_line("Nickname already in use.");
+        } else {
+            cons_show_error("Error received from server: %s", err_msg);
+        }
+        // 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);
+        }
+        jid_destroy(room_jid);
+
+    } else {
+        cons_show_error("Error received from server: %s", err_msg);
+    }
+
+    ui_print_error_from_recipient(from, err_msg);
+}
+
+void
 ui_contact_online(const char * const barejid, const char * const resource,
     const char * const show, const char * const status, GDateTime *last_activity)
 {