about summary refs log tree commit diff stats
path: root/src/ui/core.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-10-01 00:46:58 +0100
committerJames Booth <boothj5@gmail.com>2014-10-01 00:46:58 +0100
commitc90f4a37a312ecf7c60e3ed9757735d7bad39798 (patch)
tree4eadf445a726a8d13f21d9457c39c5464ecef616 /src/ui/core.c
parent5879f497ad7bdd9abd7e7c419c1d8c503d6d14d6 (diff)
downloadprofani-tty-c90f4a37a312ecf7c60e3ed9757735d7bad39798.tar.gz
Added /room <affiliation> command
Diffstat (limited to 'src/ui/core.c')
-rw-r--r--src/ui/core.c59
1 files changed, 56 insertions, 3 deletions
diff --git a/src/ui/core.c b/src/ui/core.c
index 512cd10f..3995d60d 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -1892,7 +1892,6 @@ _ui_show_room_info(ProfWin *window, const char * const room)
     char *role = muc_role_str(room);
     char *affiliation = muc_affiliation_str(room);
 
-    win_save_print(window, '-', NULL, 0, 0, "", "");
     win_save_vprint(window, '!', NULL, 0, 0, "", "Room: %s", room);
     win_save_vprint(window, '!', NULL, 0, 0, "", "  Affiliation: %s", affiliation);
     win_save_vprint(window, '!', NULL, 0, 0, "", "  Role: %s", role);
@@ -1905,7 +1904,6 @@ _ui_show_room_role_list(ProfWin *window, const char * const room, muc_role_t rol
     GSList *occupants = muc_occupants_by_role(room, role);
 
     if (!occupants) {
-        win_save_print(window, '-', NULL, 0, 0, "", "");
         switch (role) {
             case MUC_ROLE_MODERATOR:
                 win_save_print(window, '!', NULL, 0, 0, "", "No moderators found.");
@@ -1921,7 +1919,6 @@ _ui_show_room_role_list(ProfWin *window, const char * const room, muc_role_t rol
         }
         win_save_print(window, '-', NULL, 0, 0, "", "");
     } else {
-        win_save_print(window, '-', NULL, 0, 0, "", "");
         switch (role) {
             case MUC_ROLE_MODERATOR:
                 win_save_print(window, '!', NULL, 0, 0, "", "Moderators:");
@@ -1951,6 +1948,61 @@ _ui_show_room_role_list(ProfWin *window, const char * const room, muc_role_t rol
 }
 
 static void
+_ui_show_room_affiliation_list(ProfWin *window, const char * const room, muc_affiliation_t affiliation)
+{
+    GSList *occupants = muc_occupants_by_affiliation(room, affiliation);
+
+    if (!occupants) {
+        switch (affiliation) {
+            case MUC_AFFILIATION_OWNER:
+                win_save_print(window, '!', NULL, 0, 0, "", "No owners found.");
+                break;
+            case MUC_AFFILIATION_ADMIN:
+                win_save_print(window, '!', NULL, 0, 0, "", "No admins found.");
+                break;
+            case MUC_AFFILIATION_MEMBER:
+                win_save_print(window, '!', NULL, 0, 0, "", "No members found.");
+                break;
+            case MUC_AFFILIATION_OUTCAST:
+                win_save_print(window, '!', NULL, 0, 0, "", "No outcasts found.");
+                break;
+            default:
+                break;
+        }
+        win_save_print(window, '-', NULL, 0, 0, "", "");
+    } else {
+        switch (affiliation) {
+            case MUC_AFFILIATION_OWNER:
+                win_save_print(window, '!', NULL, 0, 0, "", "Owners:");
+                break;
+            case MUC_AFFILIATION_ADMIN:
+                win_save_print(window, '!', NULL, 0, 0, "", "Admins:");
+                break;
+            case MUC_AFFILIATION_MEMBER:
+                win_save_print(window, '!', NULL, 0, 0, "", "Members:");
+                break;
+            case MUC_AFFILIATION_OUTCAST:
+                win_save_print(window, '!', NULL, 0, 0, "", "Outcasts:");
+                break;
+            default:
+                break;
+        }
+
+        GSList *curr_occupant = occupants;
+        while(curr_occupant) {
+            Occupant *occupant = curr_occupant->data;
+            if (occupant->affiliation == affiliation) {
+                win_save_vprint(window, '!', NULL, 0, 0, "", "  %s", occupant->nick);
+            }
+
+            curr_occupant = g_slist_next(curr_occupant);
+        }
+
+        win_save_print(window, '-', NULL, 0, 0, "", "");
+    }
+}
+
+static void
 _ui_handle_form_field(ProfWin *window, char *tag, FormField *field)
 {
     win_save_vprint(window, '-', NULL, NO_EOL, COLOUR_AWAY, "", "[%s] ", tag);
@@ -2579,4 +2631,5 @@ ui_init_module(void)
     ui_handle_room_configuration_form_error = _ui_handle_room_configuration_form_error;
     ui_show_room_info = _ui_show_room_info;
     ui_show_room_role_list = _ui_show_room_role_list;
+    ui_show_room_affiliation_list = _ui_show_room_affiliation_list;
 }