about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-01-27 22:09:16 +0000
committerJames Booth <boothj5@gmail.com>2014-01-27 22:09:16 +0000
commit27293ebbc2171f52d6db6d0075b63db8fcacc0be (patch)
tree0cbcdf0b79c3345cc2f1f4406a242983bbec5934 /src
parent678a5bd05c465e059c17fc94329a9a6620254950 (diff)
downloadprofani-tty-27293ebbc2171f52d6db6d0075b63db8fcacc0be.tar.gz
Added fallback message error handlers
Diffstat (limited to 'src')
-rw-r--r--src/server_events.c12
-rw-r--r--src/server_events.h2
-rw-r--r--src/ui/core.c35
-rw-r--r--src/ui/ui.h2
-rw-r--r--src/xmpp/message.c13
5 files changed, 62 insertions, 2 deletions
diff --git a/src/server_events.c b/src/server_events.c
index 938572a0..e9dd7997 100644
--- a/src/server_events.c
+++ b/src/server_events.c
@@ -62,6 +62,18 @@ handle_recipient_not_found(const char * const recipient, const char * const err_
 }
 
 void
+handle_recipient_error(const char * const recipient, const char * const err_msg)
+{
+    ui_handle_recipient_error(recipient, err_msg);
+}
+
+void
+handle_error(const char * const err_msg)
+{
+    ui_handle_error(err_msg);
+}
+
+void
 handle_login_account_success(char *account_name)
 {
     ProfAccount *account = accounts_get_account(account_name);
diff --git a/src/server_events.h b/src/server_events.h
index 794d96dc..ab2e29fd 100644
--- a/src/server_events.h
+++ b/src/server_events.h
@@ -76,5 +76,7 @@ void handle_roster_remove(const char * const barejid);
 void handle_roster_add(const char * const barejid, const char * const name);
 void handle_autoping_cancel(void);
 void handle_recipient_not_found(const char * const recipient, const char * const err_msg);
+void handle_recipient_error(const char * const recipient, const char * const err_msg);
+void handle_error(const char * const err_msg);
 
 #endif
diff --git a/src/ui/core.c b/src/ui/core.c
index a59225c8..cdac6e8f 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -388,6 +388,39 @@ _ui_handle_recipient_not_found(const char * const recipient, const char * const
 }
 
 static void
+_ui_handle_recipient_error(const char * const recipient, const char * const err_msg)
+{
+    ProfWin *win = wins_get_by_recipient(recipient);
+    GString *msg = g_string_new("");
+    g_string_printf(msg, "Error from %s: %s", recipient, err_msg);
+
+    // always show in console
+    cons_show_error(msg->str);
+
+    // show in window if exists for recipient
+    if (win != NULL)  {
+        win_print_line(win, '!', COLOUR_ERROR, msg->str);
+    }
+
+    wins_refresh_current();
+
+    g_string_free(msg, TRUE);
+}
+
+static void
+_ui_handle_error(const char * const err_msg)
+{
+    GString *msg = g_string_new("");
+    g_string_printf(msg, "Error %s", err_msg);
+
+    cons_show_error(msg->str);
+
+    wins_refresh_current();
+
+    g_string_free(msg, TRUE);
+}
+
+static void
 _ui_disconnected(void)
 {
     wins_lost_connection();
@@ -1752,4 +1785,6 @@ ui_init_module(void)
     ui_chat_win_contact_online = _ui_chat_win_contact_online;
     ui_chat_win_contact_offline = _ui_chat_win_contact_offline;
     ui_handle_recipient_not_found = _ui_handle_recipient_not_found;
+    ui_handle_recipient_error = _ui_handle_recipient_error;
+    ui_handle_error = _ui_handle_error;
 }
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 837a8a3a..9d7ba282 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -131,6 +131,8 @@ void (*ui_group_removed)(const char * const contact, const char * const group);
 void (*ui_chat_win_contact_online)(PContact contact, Resource *resource, GDateTime *last_activity);
 void (*ui_chat_win_contact_offline)(PContact contact, char *resource, char *status);
 void (*ui_handle_recipient_not_found)(const char * const recipient, const char * const err_msg);
+void (*ui_handle_recipient_error)(const char * const recipient, const char * const err_msg);
+void (*ui_handle_error)(const char * const err_msg);
 
 // contact status functions
 void (*ui_status_room)(const char * const contact);
diff --git a/src/xmpp/message.c b/src/xmpp/message.c
index 57699e31..6f340b2d 100644
--- a/src/xmpp/message.c
+++ b/src/xmpp/message.c
@@ -193,9 +193,10 @@ static int
 _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
     void * const userdata)
 {
-    // log message, function never returns NULL
     char *id = xmpp_stanza_get_id(stanza);
     char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
+
+    // stanza_get_error never returns NULL
     char *err_msg = stanza_get_error_message(stanza);
 
     GString *log_msg = g_string_new("Error receievd");
@@ -211,7 +212,7 @@ _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
     }
     g_string_append(log_msg, ", error: ");
     g_string_append(log_msg, err_msg);
-    
+
     log_info(log_msg->str);
 
     g_string_free(log_msg, TRUE);
@@ -225,6 +226,14 @@ _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
     // handle recipient not found ('from' contains a value and type is 'cancel')
     if ((from != NULL) && ((type != NULL && (strcmp(type, "cancel") == 0)))) {
         handle_recipient_not_found(from, err_msg);
+
+    // handle any other error from recipient
+    } else if (from != NULL) {
+        handle_recipient_error(from, err_msg);
+
+    // handle errors from no recipient
+    } else {
+        handle_error(err_msg);
     }
 
     return 1;