about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/core.c26
-rw-r--r--src/ui/ui.h1
2 files changed, 27 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)
 {
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 4d4ead7b..7fff0703 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -59,6 +59,7 @@ void ui_reset_idle_time(void);
 void ui_new_chat_win(const char * const to);
 void ui_print_error_from_recipient(const char * const from, const char *err_msg);
 void ui_print_system_msg_from_recipient(const char * const from, const char *message);
+void ui_handle_error_message(const char * const from, const char * const err_msg);
 gint ui_unread(void);
 void ui_close_connected_win(int index);
 int ui_close_all_wins(void);