diff --git a/js/core/chat.js b/js/core/chat.js index 26d8bc5..2180874 100644 --- a/js/core/chat.js +++ b/js/core/chat.js @@ -481,28 +481,27 @@ var chat = { */ ping: function(arg) { arg = arg.trim(); - if (!arg) return ui.messageAddInfo(strings.error.noArgument, 'error'); - var room = xmpp.room.available[xmpp.room.current]; - var roster = xmpp.roster[xmpp.room.current]; - var absent = false; - - if (!arg) arg = config.xmpp.domain; - else if (arg.indexOf('@') < 0 && roster) { - var user = roster[arg]; - if (!user) return ui.messageAddInfo(strings.error.unknownUser, {nick: arg}, 'error'); - if (!user.jid) return ui.messageAddInfo(strings.error.unknownJid, {user: user}, 'error'); - arg = user.jid; - } - + var jid = arg.indexOf('@') >= 0; + var target = arg && (jid ? {jid: arg} : {nick: arg}); + var user = !jid && xmpp.roster[xmpp.room.current][arg] || target; var time = (new Date()).getTime(); - xmpp.ping(arg, function(stanza) { + xmpp.ping(target, function(stanza) { var elapsed = ((new Date()).getTime() - time).toString(); - ui.messageAddInfo(strings.info.pong, {jid: arg, delay: elapsed}); + ui.messageAddInfo(strings.info.pong[+!!user], {user: user, delay: elapsed}); }, function(error) { var elapsed = ((new Date()).getTime() - time).toString(); - if (error) ui.messageAddInfo(strings.info.pongError, {jid: arg, delay: elapsed}); - else ui.messageAddInfo(strings.error.pingTimeout, {jid: arg, delay: elapsed}, 'error'); + if (error) { + if ($('item-not-found', error)) { + ui.messageAddInfo(strings.error.unknownUser, {nick: arg}, 'error'); + } + else { + ui.messageAddInfo(strings.error.pingError, 'error'); + } + } + else { + ui.messageAddInfo(strings.error.pingTimeout[+!!user], {user: user, delay: elapsed}, 'error'); + } } ); }, diff --git a/js/core/strings.js b/js/core/strings.js index 96da30b..fc08a59 100644 --- a/js/core/strings.js +++ b/js/core/strings.js @@ -144,8 +144,10 @@ var strings = { nickPrejoin: 'Your preferred nickname is now {nick}', nickRegistered: 'Switching to registered nick {nick}.', noUsers: 'No users are online in {room}.', - pong: 'Ping to {jid}: Pong ({delay} ms).', - pongError: 'Ping to {jid}: Target does not support ping ({delay} ms).', + pong: [ + 'Ping: Pong ({delay} ms).', + 'Ping to {user}: Pong ({delay} ms).' + ], rejoinNick: 'Rejoining as {nick} ...', roomConf: 'Room configuration of {room} has been altered.', roomsAvailable: 'Available rooms: {raw:rooms}', @@ -212,7 +214,11 @@ var strings = { noArgument: 'This command requires more arguments.', noCreate: 'You are not allowed to create rooms.', noRoom: 'You are not in a room and did not specify one.', - pingTimeout: 'Ping to {jid} timed out ({delay} ms).', + pingError: 'Ping: Target does not support ping.', + pingTimeout: [ + 'Ping timed out ({delay} ms).', + 'Ping to {user} timed out ({delay} ms).' + ], roomConf: 'Failed to configure {room}.', roomConfDenied: 'You lack the authority to configure {room}.', roomConfOptions: 'The allowed values for {field} are: {options}', diff --git a/js/core/ui.js b/js/core/ui.js index 269bdf2..af4b887 100644 --- a/js/core/ui.js +++ b/js/core/ui.js @@ -456,8 +456,8 @@ var ui = { ping: { name: labels.ping, icon: 'ping', - disabled: !c('ping') || !jid, - callback: function() { chat.commands.ping(jid); } + disabled: !c('ping'), + callback: function() { chat.commands.ping(nick || jid); } } } diff --git a/js/core/xmpp.js b/js/core/xmpp.js index 3ee2b3b..7dca717 100644 --- a/js/core/xmpp.js +++ b/js/core/xmpp.js @@ -344,15 +344,15 @@ var xmpp = { /** * Send a ping. * - * @param {string} to The ping target. + * @param {object} target The ping target. * @param {function} success The success callback. * @param {function} error The error callback. This will receive an error stanza * if the server responded, or null if the ping timed out. */ - ping: function(to, success, error) { - this.connection.sendIQ(this.iq('get', {jid: to}) - .c('ping', {xmlns: 'urn:xmpp:ping'} - ), success, error, 15000); + ping: function(target, success, error) { + this.connection.sendIQ(this.iq('get', target || {}) + .c('ping', {xmlns: 'urn:xmpp:ping'}), + success, error, 15000); }, /**