Commit ceb21257 authored by Yann Leboulanger's avatar Yann Leboulanger

add /ping command in groupchat to ping occupants

parent 7c1e34d6
......@@ -208,11 +208,6 @@ def _nec_ping_sent(self, obj):
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
......@@ -2850,6 +2845,15 @@ def _nec_caps_received(self, obj):
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 @@ def block(self, who):
@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)
......@@ -1551,10 +1551,11 @@ def _on_xmpp_ping_answer(self, iq_obj):
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
......@@ -1577,7 +1578,7 @@ def _on_response(resp):
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)
......
......@@ -1375,6 +1375,15 @@ def _nec_decrypted_message_received(self, obj):
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:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment