1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Merge branch 'master' into winbuffers

This commit is contained in:
James Booth 2014-07-22 23:37:21 +01:00
commit 3eaebeb002

View File

@ -61,6 +61,8 @@ 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);
static void _who_roster(const char * const group, const char * const presence);
extern GHashTable *commands;
@ -711,42 +713,9 @@ cmd_theme(gchar **args, struct cmd_help_t help)
return TRUE;
}
gboolean
cmd_who(gchar **args, struct cmd_help_t help)
static void
_who_room(const char * const presence)
{
jabber_conn_status_t conn_status = jabber_get_connection_status();
win_type_t win_type = ui_current_win_type();
if (conn_status != JABBER_CONNECTED) {
cons_show("You are not currently connected.");
} else {
char *presence = args[0];
char *group = NULL;
if ((g_strv_length(args) == 2) && (args[1] != NULL)) {
group = args[1];
}
// bad arg
if ((presence != NULL)
&& (strcmp(presence, "online") != 0)
&& (strcmp(presence, "available") != 0)
&& (strcmp(presence, "unavailable") != 0)
&& (strcmp(presence, "offline") != 0)
&& (strcmp(presence, "away") != 0)
&& (strcmp(presence, "chat") != 0)
&& (strcmp(presence, "xa") != 0)
&& (strcmp(presence, "dnd") != 0)
&& (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);
@ -824,33 +793,47 @@ cmd_who(gchar **args, struct cmd_help_t help)
ui_room_roster(room, filtered, presence);
}
}
// not in groupchat window
} else {
static void
_who_roster(const char * const group, const char * const presence)
{
cons_show("");
GSList *list = NULL;
if (group != NULL) {
list = roster_get_group(group);
if (list == NULL) {
cons_show("No such group: %s.", group);
return;
}
} else {
list = roster_get_contacts();
if (list == NULL) {
cons_show("No contacts in roster.");
return;
}
}
// no arg, show all contacts
if ((presence == NULL) || (g_strcmp0(presence, "any") == 0)) {
if (group != NULL) {
if (list == NULL) {
cons_show("No contacts in group %s.", group);
} else {
cons_show("%s:", group);
cons_show_contacts(list);
}
} else {
if (list == NULL) {
cons_show("You have no contacts.");
} else {
cons_show("All contacts:");
}
cons_show_contacts(list);
}
}
// available
} else if (strcmp("available", presence) == 0) {
if (group != NULL) {
cons_show("%s (%s):", group, presence);
} else {
cons_show("Contacts (%s):", presence);
}
GSList *filtered = NULL;
while (list != NULL) {
@ -861,15 +844,24 @@ cmd_who(gchar **args, struct cmd_help_t help)
list = g_slist_next(list);
}
if (group != NULL) {
if (filtered == NULL) {
cons_show("No contacts in group %s are %s.", group, presence);
} else {
cons_show("%s (%s):", group, presence);
cons_show_contacts(filtered);
}
} else {
if (filtered == NULL) {
cons_show("No contacts are %s.", presence);
} else {
cons_show("Contacts (%s):", presence);
cons_show_contacts(filtered);
}
}
// unavailable
} else if (strcmp("unavailable", presence) == 0) {
if (group != NULL) {
cons_show("%s (%s):", group, presence);
} else {
cons_show("Contacts (%s):", presence);
}
GSList *filtered = NULL;
while (list != NULL) {
@ -880,15 +872,24 @@ cmd_who(gchar **args, struct cmd_help_t help)
list = g_slist_next(list);
}
if (group != NULL) {
if (filtered == NULL) {
cons_show("No contacts in group %s are %s.", group, presence);
} else {
cons_show("%s (%s):", group, presence);
cons_show_contacts(filtered);
}
} else {
if (filtered == NULL) {
cons_show("No contacts are %s.", presence);
} else {
cons_show("Contacts (%s):", presence);
cons_show_contacts(filtered);
}
}
// online, available resources
} else if (strcmp("online", presence) == 0) {
if (group != NULL) {
cons_show("%s (%s):", group, presence);
} else {
cons_show("Contacts (%s):", presence);
}
GSList *filtered = NULL;
while (list != NULL) {
@ -899,15 +900,24 @@ cmd_who(gchar **args, struct cmd_help_t help)
list = g_slist_next(list);
}
if (group != NULL) {
if (filtered == NULL) {
cons_show("No contacts in group %s are %s.", group, presence);
} else {
cons_show("%s (%s):", group, presence);
cons_show_contacts(filtered);
}
} else {
if (filtered == NULL) {
cons_show("No contacts are %s.", presence);
} else {
cons_show("Contacts (%s):", presence);
cons_show_contacts(filtered);
}
}
// offline, no available resources
} else if (strcmp("offline", presence) == 0) {
if (group != NULL) {
cons_show("%s (%s):", group, presence);
} else {
cons_show("Contacts (%s):", presence);
}
GSList *filtered = NULL;
while (list != NULL) {
@ -918,15 +928,24 @@ cmd_who(gchar **args, struct cmd_help_t help)
list = g_slist_next(list);
}
if (group != NULL) {
if (filtered == NULL) {
cons_show("No contacts in group %s are %s.", group, presence);
} else {
cons_show("%s (%s):", group, presence);
cons_show_contacts(filtered);
}
} else {
if (filtered == NULL) {
cons_show("No contacts are %s.", presence);
} else {
cons_show("Contacts (%s):", presence);
cons_show_contacts(filtered);
}
}
// show specific status
} else {
if (group != NULL) {
cons_show("%s (%s):", group, presence);
} else {
cons_show("Contacts (%s):", presence);
}
GSList *filtered = NULL;
while (list != NULL) {
@ -937,8 +956,62 @@ cmd_who(gchar **args, struct cmd_help_t help)
list = g_slist_next(list);
}
if (group != NULL) {
if (filtered == NULL) {
cons_show("No contacts in group %s are %s.", group, presence);
} else {
cons_show("%s (%s):", group, presence);
cons_show_contacts(filtered);
}
} else {
if (filtered == NULL) {
cons_show("No contacts are %s.", presence);
} else {
cons_show("Contacts (%s):", presence);
cons_show_contacts(filtered);
}
}
}
}
gboolean
cmd_who(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();
if (conn_status != JABBER_CONNECTED) {
cons_show("You are not currently connected.");
} else {
char *presence = args[0];
char *group = NULL;
if ((g_strv_length(args) == 2) && (args[1] != NULL)) {
group = args[1];
}
// bad arg
if ((presence != NULL)
&& (strcmp(presence, "online") != 0)
&& (strcmp(presence, "available") != 0)
&& (strcmp(presence, "unavailable") != 0)
&& (strcmp(presence, "offline") != 0)
&& (strcmp(presence, "away") != 0)
&& (strcmp(presence, "chat") != 0)
&& (strcmp(presence, "xa") != 0)
&& (strcmp(presence, "dnd") != 0)
&& (strcmp(presence, "any") != 0)) {
cons_show("Usage: %s", help.usage);
} else {
if (win_type == WIN_MUC) {
if (group != NULL) {
cons_show("The group argument is not valid when in a chat room.");
} else {
_who_room(presence);
}
} else {
_who_roster(group, presence);
}
}
}