about summary refs log tree commit diff stats
path: root/src/command
diff options
context:
space:
mode:
Diffstat (limited to 'src/command')
-rw-r--r--src/command/commands.c85
1 files changed, 32 insertions, 53 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index 828604ba..2b8a0d2c 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -737,9 +737,9 @@ _who_room(const char * const presence)
         GList *filtered = NULL;
 
         while (list != NULL) {
-            PContact contact = list->data;
-            if (p_contact_is_available(contact)) {
-                filtered = g_list_append(filtered, contact);
+            Occupant *occupant = list->data;
+            if (muc_occupant_available(occupant)) {
+                filtered = g_list_append(filtered, occupant);
             }
             list = g_list_next(list);
         }
@@ -751,51 +751,24 @@ _who_room(const char * const presence)
         GList *filtered = NULL;
 
         while (list != NULL) {
-            PContact contact = list->data;
-            if (!p_contact_is_available(contact)) {
-                filtered = g_list_append(filtered, contact);
+            Occupant *occupant = list->data;
+            if (!muc_occupant_available(occupant)) {
+                filtered = g_list_append(filtered, occupant);
             }
             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);
+            Occupant *occupant = list->data;
+            const char *presence_str = string_from_resource_presence(occupant->presence);
+            if (strcmp(presence_str, presence) == 0) {
+                filtered = g_list_append(filtered, occupant);
             }
             list = g_list_next(list);
         }
@@ -1464,6 +1437,7 @@ cmd_info(gchar **args, struct cmd_help_t help)
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     win_type_t win_type = ui_current_win_type();
     PContact pcontact = NULL;
+    Occupant *occupant = NULL;
 
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
@@ -1473,28 +1447,34 @@ cmd_info(gchar **args, struct cmd_help_t help)
     switch (win_type)
     {
         case WIN_MUC:
-            if (usr != NULL) {
-                ui_info_room(usr);
+            if (usr) {
+                char *room = ui_current_recipient();
+                occupant = muc_roster_item(room, usr);
+                if (occupant) {
+                    ui_info_room(room, occupant);
+                } else {
+                    ui_current_print_line("No such occupant \"%s\" in room.", usr);
+                }
             } else {
                 ui_current_print_line("You must specify a nickname.");
             }
             break;
         case WIN_CHAT:
-            if (usr != NULL) {
+            if (usr) {
                 ui_current_print_line("No parameter required when in chat.");
             } else {
                 ui_info();
             }
             break;
         case WIN_PRIVATE:
-            if (usr != NULL) {
+            if (usr) {
                 ui_current_print_line("No parameter required when in chat.");
             } else {
                 ui_info_private();
             }
             break;
         case WIN_CONSOLE:
-            if (usr != NULL) {
+            if (usr) {
                 char *usr_jid = roster_barejid_from_name(usr);
                 if (usr_jid == NULL) {
                     usr_jid = usr;
@@ -1522,6 +1502,7 @@ cmd_caps(gchar **args, struct cmd_help_t help)
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     win_type_t win_type = ui_current_win_type();
     PContact pcontact = NULL;
+    Occupant *occupant = NULL;
 
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
@@ -1533,11 +1514,10 @@ cmd_caps(gchar **args, struct cmd_help_t help)
         case WIN_MUC:
             if (args[0] != NULL) {
                 char *room = ui_current_recipient();
-                pcontact = muc_roster_item(room, args[0]);
-                if (pcontact != NULL) {
+                occupant = muc_roster_item(room, args[0]);
+                if (occupant) {
                     Jid *jidp = jid_create_from_bare_and_resource(room, args[0]);
-                    Resource *resource = p_contact_get_resource(pcontact, args[0]);
-                    cons_show_caps(jidp->fulljid, resource);
+                    cons_show_caps(jidp->fulljid, occupant->presence);
                     jid_destroy(jidp);
                 } else {
                     cons_show("No such participant \"%s\" in room.", args[0]);
@@ -1562,7 +1542,7 @@ cmd_caps(gchar **args, struct cmd_help_t help)
                         if (resource == NULL) {
                             cons_show("Could not find resource %s, for contact %s", jid->barejid, jid->resourcepart);
                         } else {
-                            cons_show_caps(jid->fulljid, resource);
+                            cons_show_caps(jid->fulljid, resource->presence);
                         }
                     }
                 }
@@ -1578,9 +1558,8 @@ cmd_caps(gchar **args, struct cmd_help_t help)
                 char *recipient = ui_current_recipient();
                 Jid *jid = jid_create(recipient);
                 if (jid) {
-                    pcontact = muc_roster_item(jid->barejid, jid->resourcepart);
-                    Resource *resource = p_contact_get_resource(pcontact, jid->resourcepart);
-                    cons_show_caps(jid->resourcepart, resource);
+                    occupant = muc_roster_item(jid->barejid, jid->resourcepart);
+                    cons_show_caps(jid->resourcepart, occupant->presence);
                     jid_destroy(jid);
                 }
             }
@@ -1598,7 +1577,7 @@ cmd_software(gchar **args, struct cmd_help_t help)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     win_type_t win_type = ui_current_win_type();
-    PContact pcontact = NULL;
+    Occupant *occupant = NULL;
     char *recipient;
 
     if (conn_status != JABBER_CONNECTED) {
@@ -1611,8 +1590,8 @@ cmd_software(gchar **args, struct cmd_help_t help)
         case WIN_MUC:
             if (args[0] != NULL) {
                 recipient = ui_current_recipient();
-                pcontact = muc_roster_item(recipient, args[0]);
-                if (pcontact != NULL) {
+                occupant = muc_roster_item(recipient, args[0]);
+                if (occupant) {
                     Jid *jid = jid_create_from_bare_and_resource(recipient, args[0]);
                     iq_send_software_version(jid->fulljid);
                     jid_destroy(jid);