Show software version result in current window

This commit is contained in:
James Booth
2015-08-06 01:56:52 +01:00
parent b75bc660b4
commit 406b821b35
9 changed files with 146 additions and 34 deletions

View File

@@ -2104,6 +2104,30 @@ 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.");
} else {
ProfChatWin *chatwin = (ProfChatWin*)window;
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
char *resource = NULL;
ChatSession *session = chat_session_get(chatwin->barejid);
if (chatwin->resource_override) {
resource = chatwin->resource_override;
} else if (session && session->resource) {
resource = session->resource;
}
if (resource) {
GString *fulljid = g_string_new(chatwin->barejid);
g_string_append_printf(fulljid, "/%s", resource);
iq_send_software_version(fulljid->str);
g_string_free(fulljid, TRUE);
} else {
win_println(window, 0, "Unknown resource for /software command.");
}
}
break;
case WIN_CONSOLE:
if (args[0]) {
Jid *myJid = jid_create(jabber_get_fulljid());

View File

@@ -421,30 +421,6 @@ cons_show_caps(const char * const fulljid, resource_presence_t presence)
cons_alert();
}
void
cons_show_software_version(const char * const jid, const char * const presence,
const char * const name, const char * const version, const char * const os)
{
ProfWin *console = wins_get_console();
if (name || version || os) {
cons_show("");
theme_item_t presence_colour = theme_main_presence_attrs(presence);
win_vprint(console, '-', 0, NULL, NO_EOL, presence_colour, "", "%s", jid);
win_print(console, '-', 0, NULL, NO_DATE, 0, "", ":");
}
if (name) {
cons_show("Name : %s", name);
}
if (version) {
cons_show("Version : %s", version);
}
if (os) {
cons_show("OS : %s", os);
}
cons_alert();
}
void
cons_show_received_subs(void)
{

View File

@@ -2810,6 +2810,57 @@ ui_handle_software_version_error(const char * const roomjid, const char * const
g_string_free(message_str, TRUE);
}
void
ui_show_software_version(const char * const jid, const char * const presence,
const char * const name, const char * const version, const char * const os)
{
Jid *jidp = jid_create(jid);
ProfWin *window = NULL;
ProfWin *chatwin = (ProfWin*)wins_get_chat(jidp->barejid);
ProfWin *mucwin = (ProfWin*)wins_get_muc(jidp->barejid);
ProfWin *privwin = (ProfWin*)wins_get_private(jidp->fulljid);
ProfWin *console = wins_get_console();
jid_destroy(jidp);
if (chatwin) {
if (wins_is_current(chatwin)) {
window = chatwin;
} else {
window = console;
}
} else if (privwin) {
if (wins_is_current(privwin)) {
window = privwin;
} else {
window = console;
}
} else if (mucwin) {
if (wins_is_current(mucwin)) {
window = mucwin;
} else {
window = console;
}
} else {
window = console;
}
if (name || version || os) {
win_println(window, 0, "");
theme_item_t presence_colour = theme_main_presence_attrs(presence);
win_vprint(window, '-', 0, NULL, NO_EOL, presence_colour, "", "%s", jid);
win_print(window, '-', 0, NULL, NO_DATE, 0, "", ":");
}
if (name) {
win_vprint(window, '-', 0, NULL, 0, 0, "", "Name : %s", name);
}
if (version) {
win_vprint(window, '-', 0, NULL, 0, 0, "", "Version : %s", version);
}
if (os) {
win_vprint(window, '-', 0, NULL, 0, 0, "", "OS : %s", os);
}
}
static void
_win_show_history(ProfChatWin *chatwin, const char * const contact)
{

View File

@@ -204,6 +204,8 @@ void ui_show_all_room_rosters(void);
void ui_hide_all_room_rosters(void);
gboolean ui_chat_win_exists(const char * const barejid);
void ui_handle_software_version_error(const char * const roomjid, const char * const message);
void ui_show_software_version(const char * const jid, const char * const presence,
const char * const name, const char * const version, const char * const os);
gboolean ui_tidy_wins(void);
void ui_prune_wins(void);

View File

@@ -905,7 +905,7 @@ _version_result_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
presence = string_from_resource_presence(resource->presence);
}
cons_show_software_version(jidp->fulljid, presence, name_str, version_str, os_str);
ui_show_software_version(jidp->fulljid, presence, name_str, version_str, os_str);
jid_destroy(jidp);
free(userdata);