about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-07-22 23:22:50 +0100
committerJames Booth <boothj5@gmail.com>2014-07-22 23:22:50 +0100
commit6a1975f65bdbd59575bca75c09d4a14430284b69 (patch)
tree5022926dfd234bdf55dba41d15a6adc3abc250c2
parent1aee7ce4bf1958ad81c271cde6ccb5ace0452fe0 (diff)
downloadprofani-tty-6a1975f65bdbd59575bca75c09d4a14430284b69.tar.gz
Added _who_room function
-rw-r--r--src/command/commands.c164
1 files changed, 84 insertions, 80 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index b8d9b96c..b6f168b1 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -61,6 +61,7 @@ static gboolean _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
 static int _strtoi(char *str, int *saveptr, int min, int max);
 static void _cmd_show_filtered_help(char *heading, gchar *cmd_filter[], int filter_size);
 static gint _compare_commands(Command *a, Command *b);
+static void _who_room(const char * const presence);
 
 extern GHashTable *commands;
 
@@ -711,6 +712,88 @@ cmd_theme(gchar **args, struct cmd_help_t help)
     return TRUE;
 }
 
+static void
+_who_room(const char * const presence)
+{
+    char *room = ui_current_recipient();
+    GList *list = muc_get_roster(room);
+
+    // no arg, show all contacts
+    if ((presence == NULL) || (g_strcmp0(presence, "any") == 0)) {
+        ui_room_roster(room, list, NULL);
+
+    // available
+    } else if (strcmp("available", presence) == 0) {
+        GList *filtered = NULL;
+
+        while (list != NULL) {
+            PContact contact = list->data;
+            if (p_contact_is_available(contact)) {
+                filtered = g_list_append(filtered, contact);
+            }
+            list = g_list_next(list);
+        }
+
+        ui_room_roster(room, filtered, "available");
+
+    // unavailable
+    } else if (strcmp("unavailable", presence) == 0) {
+        GList *filtered = NULL;
+
+        while (list != NULL) {
+            PContact contact = list->data;
+            if (!p_contact_is_available(contact)) {
+                filtered = g_list_append(filtered, contact);
+            }
+            list = g_list_next(list);
+        }
+
+        ui_room_roster(room, filtered, "unavailable");
+
+    // online, available resources
+    } else if (strcmp("online", presence) == 0) {
+        GList *filtered = NULL;
+
+        while (list != NULL) {
+            PContact contact = list->data;
+            if (p_contact_has_available_resource(contact)) {
+                filtered = g_list_append(filtered, contact);
+            }
+            list = g_list_next(list);
+        }
+
+        ui_room_roster(room, filtered, "online");
+
+    // offline, no available resources
+    } else if (strcmp("offline", presence) == 0) {
+        GList *filtered = NULL;
+
+        while (list != NULL) {
+            PContact contact = list->data;
+            if (!p_contact_has_available_resource(contact)) {
+                filtered = g_list_append(filtered, contact);
+            }
+            list = g_list_next(list);
+        }
+
+        ui_room_roster(room, filtered, "offline");
+
+    // show specific status
+    } else {
+        GList *filtered = NULL;
+
+        while (list != NULL) {
+            PContact contact = list->data;
+            if (strcmp(p_contact_presence(contact), presence) == 0) {
+                filtered = g_list_append(filtered, contact);
+            }
+            list = g_list_next(list);
+        }
+
+        ui_room_roster(room, filtered, presence);
+    }
+}
+
 gboolean
 cmd_who(gchar **args, struct cmd_help_t help)
 {
@@ -739,93 +822,14 @@ cmd_who(gchar **args, struct cmd_help_t help)
                 && (strcmp(presence, "any") != 0)) {
             cons_show("Usage: %s", help.usage);
 
-        // valid arg
         } else {
             if (win_type == WIN_MUC) {
                 if (group != NULL) {
                     cons_show("The group argument is not valid when in a chat room.");
-                    return TRUE;
-                }
-
-                char *room = ui_current_recipient();
-                GList *list = muc_get_roster(room);
-
-                // no arg, show all contacts
-                if ((presence == NULL) || (g_strcmp0(presence, "any") == 0)) {
-                    ui_room_roster(room, list, NULL);
-
-                // available
-                } else if (strcmp("available", presence) == 0) {
-                    GList *filtered = NULL;
-
-                    while (list != NULL) {
-                        PContact contact = list->data;
-                        if (p_contact_is_available(contact)) {
-                            filtered = g_list_append(filtered, contact);
-                        }
-                        list = g_list_next(list);
-                    }
-
-                    ui_room_roster(room, filtered, "available");
-
-                // unavailable
-                } else if (strcmp("unavailable", presence) == 0) {
-                    GList *filtered = NULL;
-
-                    while (list != NULL) {
-                        PContact contact = list->data;
-                        if (!p_contact_is_available(contact)) {
-                            filtered = g_list_append(filtered, contact);
-                        }
-                        list = g_list_next(list);
-                    }
-
-                    ui_room_roster(room, filtered, "unavailable");
-
-                // online, available resources
-                } else if (strcmp("online", presence) == 0) {
-                    GList *filtered = NULL;
-
-                    while (list != NULL) {
-                        PContact contact = list->data;
-                        if (p_contact_has_available_resource(contact)) {
-                            filtered = g_list_append(filtered, contact);
-                        }
-                        list = g_list_next(list);
-                    }
-
-                    ui_room_roster(room, filtered, "online");
-
-                // offline, no available resources
-                } else if (strcmp("offline", presence) == 0) {
-                    GList *filtered = NULL;
-
-                    while (list != NULL) {
-                        PContact contact = list->data;
-                        if (!p_contact_has_available_resource(contact)) {
-                            filtered = g_list_append(filtered, contact);
-                        }
-                        list = g_list_next(list);
-                    }
-
-                    ui_room_roster(room, filtered, "offline");
-
-                // show specific status
                 } else {
-                    GList *filtered = NULL;
-
-                    while (list != NULL) {
-                        PContact contact = list->data;
-                        if (strcmp(p_contact_presence(contact), presence) == 0) {
-                            filtered = g_list_append(filtered, contact);
-                        }
-                        list = g_list_next(list);
-                    }
-
-                    ui_room_roster(room, filtered, presence);
+                    _who_room(presence);
                 }
 
-            // not in groupchat window
             } else {
                 cons_show("");
                 GSList *list = NULL;