diff options
Diffstat (limited to 'src/command/commands.c')
-rw-r--r-- | src/command/commands.c | 117 |
1 files changed, 52 insertions, 65 deletions
diff --git a/src/command/commands.c b/src/command/commands.c index 045ad00a..2b8a0d2c 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -476,7 +476,7 @@ cmd_disconnect(gchar **args, struct cmd_help_t help) cons_show("%s logged out successfully.", jid); jabber_disconnect(); roster_clear(); - muc_clear_invites(); + muc_invites_clear(); chat_sessions_clear(); ui_disconnected(); free(jid); @@ -726,7 +726,7 @@ static void _who_room(const char * const presence) { char *room = ui_current_recipient(); - GList *list = muc_get_roster(room); + GList *list = muc_roster(room); // no arg, show all contacts if ((presence == NULL) || (g_strcmp0(presence, "any") == 0)) { @@ -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); } @@ -1048,7 +1021,7 @@ cmd_msg(gchar **args, struct cmd_help_t help) if (win_type == WIN_MUC) { char *room_name = ui_current_recipient(); - if (muc_nick_in_roster(room_name, usr)) { + if (muc_roster_contains_nick(room_name, usr)) { GString *full_jid = g_string_new(room_name); g_string_append(full_jid, "/"); g_string_append(full_jid, usr); @@ -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_get_participant(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_get_participant(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_get_participant(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); @@ -1715,10 +1694,10 @@ cmd_join(gchar **args, struct cmd_help_t help) nick = account->muc_nick; } - if (!muc_room_is_active(room)) { + if (!muc_active(room)) { presence_join_room(room, nick, passwd); - muc_join_room(room, nick, passwd, FALSE); - } else if (muc_get_roster_received(room)) { + muc_join(room, nick, passwd, FALSE); + } else if (muc_roster_complete(room)) { ui_room_join(room, TRUE); } @@ -1767,7 +1746,7 @@ cmd_invite(gchar **args, struct cmd_help_t help) gboolean cmd_invites(gchar **args, struct cmd_help_t help) { - GSList *invites = muc_get_invites(); + GSList *invites = muc_invites(); cons_show_room_invites(invites); g_slist_free_full(invites, g_free); return TRUE; @@ -1776,10 +1755,10 @@ cmd_invites(gchar **args, struct cmd_help_t help) gboolean cmd_decline(gchar **args, struct cmd_help_t help) { - if (!muc_invites_include(args[0])) { + if (!muc_invites_contain(args[0])) { cons_show("No such invite exists."); } else { - muc_remove_invite(args[0]); + muc_invites_remove(args[0]); cons_show("Declined invite to %s.", args[0]); } @@ -2083,7 +2062,8 @@ cmd_room(gchar **args, struct cmd_help_t help) if ((g_strcmp0(args[0], "accept") != 0) && (g_strcmp0(args[0], "destroy") != 0) && - (g_strcmp0(args[0], "config") != 0)) { + (g_strcmp0(args[0], "config") != 0) && + (g_strcmp0(args[0], "info") != 0)) { cons_show("Usage: %s", help.usage); return TRUE; } @@ -2097,6 +2077,13 @@ cmd_room(gchar **args, struct cmd_help_t help) ui_index = 0; } + if (g_strcmp0(args[0], "info") == 0) { + char *role = muc_role_str(room); + char *affiliation = muc_affiliation_str(room); + ui_current_print_line("Affiliation: %s, Role: %s", affiliation, role); + return TRUE; + } + if (g_strcmp0(args[0], "accept") == 0) { gboolean requires_config = muc_requires_config(room); if (!requires_config) { @@ -2171,8 +2158,8 @@ cmd_bookmark(gchar **args, struct cmd_help_t help) // default to current nickname, password, and autojoin "on" if (cmd == NULL) { char *jid = ui_current_recipient(); - char *nick = muc_get_room_nick(jid); - char *password = muc_get_room_password(jid); + char *nick = muc_nick(jid); + char *password = muc_password(jid); gboolean added = bookmark_add(jid, nick, password, "on"); if (added) { ui_current_print_formatted_line('!', 0, "Bookmark added for %s.", jid); |