diff options
Diffstat (limited to 'src/command')
-rw-r--r-- | src/command/cmd_ac.c | 41 | ||||
-rw-r--r-- | src/command/cmd_funcs.c | 36 |
2 files changed, 60 insertions, 17 deletions
diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index 2ea13e37..f8c0c18a 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -121,6 +121,7 @@ static char* _color_autocomplete(ProfWin *window, const char *const input, gbool static char* _avatar_autocomplete(ProfWin *window, const char *const input, gboolean previous); static char* _correction_autocomplete(ProfWin *window, const char *const input, gboolean previous); static char* _correct_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _software_autocomplete(ProfWin *window, const char *const input, gboolean previous); static char* _script_autocomplete_func(const char *const prefix, gboolean previous, void *context); @@ -1613,7 +1614,7 @@ _cmd_ac_complete_params(ProfWin *window, const char *const input, gboolean previ assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); Autocomplete nick_ac = muc_roster_ac(mucwin->roomjid); if (nick_ac) { - gchar *nick_choices[] = { "/msg", "/info", "/caps", "/software" } ; + gchar *nick_choices[] = { "/msg", "/info", "/caps" } ; // Remove quote character before and after names when doing autocomplete char *unquoted = strip_arg_quotes(input); @@ -1641,7 +1642,7 @@ _cmd_ac_complete_params(ProfWin *window, const char *const input, gboolean previ } free(unquoted); - gchar *resource_choices[] = { "/caps", "/software", "/ping" }; + gchar *resource_choices[] = { "/caps", "/ping" }; for (i = 0; i < ARRAY_SIZE(resource_choices); i++) { result = autocomplete_param_with_func(input, resource_choices[i], roster_fulljid_autocomplete, previous, NULL); if (result) { @@ -1726,6 +1727,7 @@ _cmd_ac_complete_params(ProfWin *window, const char *const input, gboolean previ g_hash_table_insert(ac_funcs, "/avatar", _avatar_autocomplete); g_hash_table_insert(ac_funcs, "/correction", _correction_autocomplete); g_hash_table_insert(ac_funcs, "/correct", _correct_autocomplete); + g_hash_table_insert(ac_funcs, "/software", _software_autocomplete); int len = strlen(input); char parsed[len+1]; @@ -3887,3 +3889,38 @@ _correct_autocomplete(ProfWin *window, const char *const input, gboolean previou return result; } + +static char* +_software_autocomplete(ProfWin *window, const char *const input, gboolean previous) +{ + char *result = NULL; + + if (window->type == WIN_CHAT){ + ProfChatWin *chatwin = (ProfChatWin*)window; + assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); + + GString *search_str = g_string_new("/software "); + g_string_append(search_str, chatwin->barejid); + result = autocomplete_param_with_func(search_str->str, "/software", roster_fulljid_autocomplete, previous, NULL); + g_string_free(search_str, TRUE); + } else if (window->type == WIN_MUC) { + ProfMucWin *mucwin = (ProfMucWin*)window; + assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); + + Autocomplete nick_ac = muc_roster_ac(mucwin->roomjid); + + if (nick_ac) { + result = autocomplete_param_with_ac(input, "/software", nick_ac, TRUE, previous); + if (result) { + return result; + } + } + } else { + result = autocomplete_param_with_func(input, "/software", roster_fulljid_autocomplete, previous, NULL); + if (result) { + return result; + } + } + + return result; +} diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index e5dc987a..d29244a9 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -3427,6 +3427,22 @@ cmd_caps(ProfWin *window, const char *const command, gchar **args) return TRUE; } +static void +_send_software_version_iq_to_fulljid(char *request) +{ + Jid *myJid = jid_create(connection_get_fulljid()); + Jid *jid = jid_create(request); + + if (jid == NULL || jid->fulljid == NULL) { + cons_show("You must provide a full jid to the /software command."); + } else if (g_strcmp0(jid->barejid, myJid->barejid) == 0) { + cons_show("Cannot request software version for yourself."); + } else { + iq_send_software_version(jid->fulljid); + } + jid_destroy(myJid); + jid_destroy(jid); +} gboolean cmd_software(ProfWin *window, const char *const command, gchar **args) @@ -3458,7 +3474,8 @@ cmd_software(ProfWin *window, const char *const command, gchar **args) break; case WIN_CHAT: if (args[0]) { - cons_show("No parameter needed to /software when in chat."); + _send_software_version_iq_to_fulljid(args[0]); + break; } else { ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); @@ -3477,24 +3494,13 @@ cmd_software(ProfWin *window, const char *const command, gchar **args) iq_send_software_version(fulljid->str); g_string_free(fulljid, TRUE); } else { - win_println(window, THEME_DEFAULT, "-", "Unknown resource for /software command."); + win_println(window, THEME_DEFAULT, "-", "Unknown resource for /software command. See /help resource."); } + break; } - break; case WIN_CONSOLE: if (args[0]) { - Jid *myJid = jid_create(connection_get_fulljid()); - Jid *jid = jid_create(args[0]); - - if (jid == NULL || jid->fulljid == NULL) { - cons_show("You must provide a full jid to the /software command."); - } else if (g_strcmp0(jid->barejid, myJid->barejid) == 0) { - cons_show("Cannot request software version for yourself."); - } else { - iq_send_software_version(jid->fulljid); - } - jid_destroy(myJid); - jid_destroy(jid); + _send_software_version_iq_to_fulljid(args[0]); } else { cons_show("You must provide a jid to the /software command."); } |