diff options
author | James Booth <boothj5@gmail.com> | 2012-11-08 00:22:15 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2012-11-08 00:22:15 +0000 |
commit | c967cd9dc9aad708c30b1be16cc3fa65f2581216 (patch) | |
tree | 020b71b71657ecf93f514a274d57c9278ecff2dd /src | |
parent | 181669a8cb20d385e3635a7c1a23972a673db3fd (diff) | |
download | profani-tty-c967cd9dc9aad708c30b1be16cc3fa65f2581216.tar.gz |
Using /who in chat room shows room occupants
Diffstat (limited to 'src')
-rw-r--r-- | src/command.c | 75 | ||||
-rw-r--r-- | src/windows.c | 25 |
2 files changed, 53 insertions, 47 deletions
diff --git a/src/command.c b/src/command.c index 785b133c..e0f2edef 100644 --- a/src/command.c +++ b/src/command.c @@ -896,47 +896,52 @@ _cmd_who(const char * const inp, struct cmd_help_t help) // valid arg } else { - GSList *list = get_contact_list(); - - // no arg, show all contacts - if (presence == NULL) { - cons_show("All contacts:"); - cons_show_contacts(list); - - // online, show all status that indicate online - } else if (strcmp("online", presence) == 0) { - cons_show("Contacts (%s):", presence); - GSList *filtered = NULL; - - while (list != NULL) { - PContact contact = list->data; - const char * const contact_presence = (p_contact_presence(contact)); - if ((strcmp(contact_presence, "online") == 0) - || (strcmp(contact_presence, "away") == 0) - || (strcmp(contact_presence, "dnd") == 0) - || (strcmp(contact_presence, "xa") == 0) - || (strcmp(contact_presence, "chat") == 0)) { - filtered = g_slist_append(filtered, contact); + if (win_in_groupchat()) { + char *room = win_get_recipient(); + win_show_room_roster(room); + } else { + GSList *list = get_contact_list(); + + // no arg, show all contacts + if (presence == NULL) { + cons_show("All contacts:"); + cons_show_contacts(list); + + // online, show all status that indicate online + } else if (strcmp("online", presence) == 0) { + cons_show("Contacts (%s):", presence); + GSList *filtered = NULL; + + while (list != NULL) { + PContact contact = list->data; + const char * const contact_presence = (p_contact_presence(contact)); + if ((strcmp(contact_presence, "online") == 0) + || (strcmp(contact_presence, "away") == 0) + || (strcmp(contact_presence, "dnd") == 0) + || (strcmp(contact_presence, "xa") == 0) + || (strcmp(contact_presence, "chat") == 0)) { + filtered = g_slist_append(filtered, contact); + } + list = g_slist_next(list); } - list = g_slist_next(list); - } - cons_show_contacts(filtered); + cons_show_contacts(filtered); - // show specific status - } else { - cons_show("Contacts (%s):", presence); - GSList *filtered = NULL; + // show specific status + } else { + cons_show("Contacts (%s):", presence); + GSList *filtered = NULL; - while (list != NULL) { - PContact contact = list->data; - if (strcmp(p_contact_presence(contact), presence) == 0) { - filtered = g_slist_append(filtered, contact); + while (list != NULL) { + PContact contact = list->data; + if (strcmp(p_contact_presence(contact), presence) == 0) { + filtered = g_slist_append(filtered, contact); + } + list = g_slist_next(list); } - list = g_slist_next(list); - } - cons_show_contacts(filtered); + cons_show_contacts(filtered); + } } } } diff --git a/src/windows.c b/src/windows.c index 8f3bd19a..d51d7b5d 100644 --- a/src/windows.c +++ b/src/windows.c @@ -502,22 +502,23 @@ win_show_room_roster(const char * const room) GList *roster = room_get_roster(room); - if (roster != NULL) { + if ((roster == NULL) || (g_list_length(roster) == 0)) { + wprintw(win, "You are alone!\n"); + } else { wprintw(win, "Room occupants:\n"); - } - - wattron(win, COLOUR_ONLINE); + wattron(win, COLOUR_ONLINE); - while (roster != NULL) { - wprintw(win, "%s", roster->data); - if (roster->next != NULL) { - wprintw(win, ", "); + while (roster != NULL) { + wprintw(win, "%s", roster->data); + if (roster->next != NULL) { + wprintw(win, ", "); + } + roster = g_list_next(roster); } - roster = g_list_next(roster); - } - wprintw(win, "\n"); - wattroff(win, COLOUR_ONLINE); + wprintw(win, "\n"); + wattroff(win, COLOUR_ONLINE); + } if (win_index == _curr_prof_win) dirty = TRUE; |