about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-10-18 01:07:25 +0100
committerJames Booth <boothj5@gmail.com>2014-10-18 01:07:25 +0100
commit3790b16299efb29843d4a221c41047d094616b5e (patch)
tree3cbc4de1f087cb895f82bf3fbe96836bc0093bc7 /src
parent9134a65e973c97231fe9d5b80e92ed90f980f1cb (diff)
downloadprofani-tty-3790b16299efb29843d4a221c41047d094616b5e.tar.gz
Add output for when both role and affiliation changed at same time
Diffstat (limited to 'src')
-rw-r--r--src/server_events.c12
-rw-r--r--src/ui/core.c8
-rw-r--r--src/ui/ui.h2
3 files changed, 19 insertions, 3 deletions
diff --git a/src/server_events.c b/src/server_events.c
index 3916fc41..631a190d 100644
--- a/src/server_events.c
+++ b/src/server_events.c
@@ -719,10 +719,16 @@ handle_muc_self_online(const char * const room, const char * const nick, gboolea
 
     // check for change in role/affiliation
     } else {
-        if (g_strcmp0(role, old_role) != 0) {
+        // both changed
+        if ((g_strcmp0(role, old_role) != 0) && (g_strcmp0(affiliation, old_affiliation) != 0)) {
+            ui_room_role_and_affiliation_change(room, role, affiliation);
+
+        // role changed
+        } else if (g_strcmp0(role, old_role) != 0) {
             ui_room_role_change(room, role);
-        }
-        if (g_strcmp0(affiliation, old_affiliation) != 0) {
+
+        // affiliation changed
+        } else if (g_strcmp0(affiliation, old_affiliation) != 0) {
             ui_room_affiliation_change(room, affiliation);
         }
     }
diff --git a/src/ui/core.c b/src/ui/core.c
index eed865bb..5331e91f 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -1352,6 +1352,13 @@ _ui_room_affiliation_change(const char * const room, const char * const affiliat
 }
 
 static void
+_ui_room_role_and_affiliation_change(const char * const room, const char * const role, const char * const affiliation)
+{
+    ProfWin *window = wins_get_by_recipient(room);
+    win_save_vprint(window, '!', NULL, 0, COLOUR_ROOMINFO, "", "Your role and affiliation have been changed, role: %s, affiliation: %s", role, affiliation);
+}
+
+static void
 _ui_handle_room_info_error(const char * const room, const char * const error)
 {
     ProfWin *window = wins_get_by_recipient(room);
@@ -3076,5 +3083,6 @@ ui_init_module(void)
     ui_room_role_change = _ui_room_role_change;
     ui_room_affiliation_change = _ui_room_affiliation_change;
     ui_switch_to_room = _ui_switch_to_room;
+    ui_room_role_and_affiliation_change = _ui_room_role_and_affiliation_change;
 }
 
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 46582549..ed0f5764 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -133,6 +133,8 @@ void (*ui_room_join)(const char * const room, gboolean focus);
 void (*ui_switch_to_room)(const char * const room);
 void (*ui_room_role_change)(const char * const room, const char * const role);
 void (*ui_room_affiliation_change)(const char * const room, const char * const affiliation);
+void (*ui_room_role_and_affiliation_change)(const char * const room, const char * const role,
+    const char * const affiliation);
 void (*ui_room_roster)(const char * const room, GList *roster, const char * const presence);
 void (*ui_room_history)(const char * const room_jid, const char * const nick,
     GTimeVal tv_stamp, const char * const message);