add /ping command in groupchat to ping occupants
This commit is contained in:
parent
ae8c6a644e
commit
1b6550a0e3
|
@ -211,11 +211,6 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
|
|||
return
|
||||
self.print_conversation(_('Ping?'), 'status')
|
||||
|
||||
def _nec_ping_reply(self, obj):
|
||||
if self.contact != obj.contact:
|
||||
return
|
||||
self.print_conversation(_('Pong! (%s s.)') % obj.seconds, 'status')
|
||||
|
||||
def _nec_ping_error(self, obj):
|
||||
if self.contact != obj.contact:
|
||||
return
|
||||
|
@ -2884,6 +2879,15 @@ class ChatControl(ChatControlBase):
|
|||
return
|
||||
self.update_ui()
|
||||
|
||||
def _nec_ping_reply(self, obj):
|
||||
if obj.control:
|
||||
if obj.control != self:
|
||||
return
|
||||
else:
|
||||
if self.contact != obj.contact:
|
||||
return
|
||||
self.print_conversation(_('Pong! (%s s.)') % obj.seconds, 'status')
|
||||
|
||||
def set_control_active(self, state):
|
||||
ChatControlBase.set_control_active(self, state)
|
||||
# send chatstate inactive to the one we're leaving
|
||||
|
|
|
@ -410,3 +410,12 @@ class StandardGroupChatCommands(CommandContainer):
|
|||
@doc(_("Allow an occupant to send you public or private messages"))
|
||||
def unblock(self, who):
|
||||
self.on_unblock(None, who)
|
||||
|
||||
@command
|
||||
@doc(_("Send a ping to the contact"))
|
||||
def ping(self, nick):
|
||||
if self.account == gajim.ZEROCONF_ACC_NAME:
|
||||
raise CommandError(_('Command is not supported for zeroconf accounts'))
|
||||
gc_c = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick)
|
||||
gajim.connections[self.account].sendPing(gc_c, self)
|
||||
|
||||
|
|
|
@ -1569,10 +1569,11 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
assert id_ == self.awaiting_xmpp_ping_id
|
||||
self.awaiting_xmpp_ping_id = None
|
||||
|
||||
def sendPing(self, pingTo=None):
|
||||
def sendPing(self, pingTo=None, control=None):
|
||||
"""
|
||||
Send XMPP Ping (XEP-0199) request. If pingTo is not set, ping is sent to
|
||||
server to detect connection failure at application level
|
||||
If control is set, display result there
|
||||
"""
|
||||
if not gajim.account_is_connected(self.name):
|
||||
return
|
||||
|
@ -1595,7 +1596,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
return
|
||||
timeDiff = round(timePong - timePing, 2)
|
||||
gajim.nec.push_incoming_event(PingReplyEvent(None, conn=self,
|
||||
contact=pingTo, seconds=timeDiff))
|
||||
contact=pingTo, seconds=timeDiff, control=control))
|
||||
if pingTo:
|
||||
timePing = time_time()
|
||||
self.connection.SendAndCallForResponse(iq, _on_response)
|
||||
|
|
|
@ -1374,6 +1374,15 @@ class GroupchatControl(ChatControlBase):
|
|||
obj.xhtml, self.session, msg_id=obj.msg_id,
|
||||
encrypted=obj.encrypted, displaymarking=obj.displaymarking)
|
||||
|
||||
def _nec_ping_reply(self, obj):
|
||||
if obj.control:
|
||||
if obj.control != self:
|
||||
return
|
||||
else:
|
||||
if self.contact != obj.contact:
|
||||
return
|
||||
self.print_conversation(_('Pong! (%s s.)') % obj.seconds)
|
||||
|
||||
def got_connected(self):
|
||||
# Make autorejoin stop.
|
||||
if self.autorejoin:
|
||||
|
|
Loading…
Reference in New Issue