Commit 46d90bf8 authored by mathieui's avatar mathieui Committed by Link Mauve

plugins: remove callbacks

parent e2224b93
Pipeline #3625 passed with stages
in 4 minutes and 57 seconds
......@@ -51,9 +51,9 @@ class Plugin(BasePlugin):
else:
self.api.information('No Contact Addresses for %s' % iq['from'], 'Error')
def command_disco(self, jid):
async def command_disco(self, jid):
try:
self.core.xmpp.plugin['xep_0030'].get_info(jid=jid, cached=False,
callback=self.on_disco)
iq = await self.core.xmpp.plugin['xep_0030'].get_info(jid=jid, cached=False)
self.on_disco(iq)
except InvalidJID as e:
self.api.information('Invalid JID “%s”: %s' % (jid, e), 'Error')
......@@ -73,7 +73,7 @@ class Plugin(BasePlugin):
self.api.information('\n'.join(describe(item) for item in items['items']), 'Items')
@command_args_parser.quoted(1, 3)
def command_disco(self, args):
async def command_disco(self, args):
if args is None:
self.core.command.help('disco')
return
......@@ -88,10 +88,14 @@ class Plugin(BasePlugin):
jid, node, type_ = args
try:
if type_ == 'info':
self.core.xmpp.plugin['xep_0030'].get_info(
jid=jid, node=node, cached=False, callback=self.on_info)
iq = await self.core.xmpp.plugin['xep_0030'].get_info(
jid=jid, node=node, cached=False
)
self.on_info(iq)
elif type_ == 'items':
self.core.xmpp.plugin['xep_0030'].get_items(
jid=jid, node=node, cached=False, callback=self.on_items)
iq = await self.core.xmpp.plugin['xep_0030'].get_items(
jid=jid, node=node, cached=False
)
self.on_items(iq)
except InvalidJID as e:
self.api.information('Invalid JID “%s”: %s' % (jid, e), 'Error')
......@@ -21,8 +21,10 @@ Command
In a private or a direct conversation, you can do ``/ping`` to ping
the current interlocutor.
"""
import asyncio
from slixmpp import InvalidJID, JID
from slixmpp.exceptions import IqTimeout
from poezio.decorators import command_args_parser
from poezio.plugin import BasePlugin
from poezio.roster import roster
......@@ -69,7 +71,7 @@ class Plugin(BasePlugin):
completion=self.completion_ping)
@command_args_parser.raw
def command_ping(self, arg):
async def command_ping(self, arg):
if not arg:
return self.core.command.help('ping')
try:
......@@ -78,7 +80,10 @@ class Plugin(BasePlugin):
return self.api.information('Invalid JID: %s' % arg, 'Error')
start = time.time()
def callback(iq):
try:
iq = await self.core.xmpp.plugin['xep_0199'].send_ping(
jid=jid, timeout=10
)
delay = time.time() - start
error = False
reply = ''
......@@ -101,13 +106,11 @@ class Plugin(BasePlugin):
message = '%s responded to ping after %ss%s' % (
jid, round(delay, 4), reply)
self.api.information(message, 'Info')
def timeout(iq):
except IqTimeout:
self.api.information(
'%s did not respond to ping after 10s: timeout' % jid, 'Info')
self.core.xmpp.plugin['xep_0199'].send_ping(
jid=jid, callback=callback, timeout=10, timeout_callback=timeout)
'%s did not respond to ping after 10s: timeout' % jid,
'Info'
)
def completion_muc_ping(self, the_input):
users = [user.nick for user in self.api.current_tab().users]
......@@ -117,9 +120,12 @@ class Plugin(BasePlugin):
@command_args_parser.raw
def command_private_ping(self, arg):
if arg:
return self.command_ping(arg)
self.command_ping(self.api.current_tab().jid)
jid = arg
if not arg:
jid = self.api.current_tab().jid
asyncio.ensure_future(
self.command_ping(jid)
)
@command_args_parser.raw
def command_muc_ping(self, arg):
......@@ -134,20 +140,25 @@ class Plugin(BasePlugin):
jid = JID(arg)
except InvalidJID:
return self.api.information('Invalid JID: %s' % arg, 'Error')
self.command_ping(jid.full)
asyncio.ensure_future(
self.command_ping(jid.full)
)
@command_args_parser.raw
def command_roster_ping(self, arg):
if arg:
self.command_ping(arg)
jid = arg
else:
current = self.api.current_tab().selected_row
if isinstance(current, Resource):
self.command_ping(current.jid)
jid = current.jid
elif isinstance(current, Contact):
res = current.get_highest_priority_resource()
if res is not None:
self.command_ping(res.jid)
jid =res.jid
asyncio.ensure_future(
self.command_ping(jid)
)
def resources(self):
l = []
......
......@@ -14,6 +14,8 @@ Command
from poezio.plugin import BasePlugin
from poezio.common import parse_secs_to_str, safeJID
from slixmpp.xmlstream import ET
from slixmpp import JID, InvalidJID
from slixmpp.exceptions import IqError, IqTimeout
class Plugin(BasePlugin):
......@@ -25,19 +27,23 @@ class Plugin(BasePlugin):
help='Ask for the uptime of a server or component (see XEP-0012).',
short='Get the uptime')
def command_uptime(self, arg):
def callback(iq):
for query in iq.xml.getiterator('{jabber:iq:last}query'):
async def command_uptime(self, arg):
try:
jid = JID(arg)
except InvalidJID:
return
iq = self.core.xmpp.make_iq_get(ito=jid.server)
iq.append(ET.Element('{jabber:iq:last}query'))
try:
iq = await iq.send()
result = iq.xml.find('{jabber:iq:last}query')
if result is not None:
self.api.information(
'Server %s online since %s' %
(iq['from'], parse_secs_to_str(
int(query.attrib['seconds']))), 'Info')
int(result.attrib['seconds']))), 'Info')
return
self.api.information('Could not retrieve uptime', 'Error')
except (IqError, IqTimeout):
pass
self.api.information('Could not retrieve uptime', 'Error')
jid = safeJID(arg)
if not jid.server:
return
iq = self.core.xmpp.make_iq_get(ito=jid.server)
iq.append(ET.Element('{jabber:iq:last}query'))
iq.send(callback=callback)
......@@ -25,15 +25,16 @@ Command
vcard from the current interlocutor, and in the contact list to do it
on the currently selected contact.
"""
import asyncio
from poezio.decorators import command_args_parser
from poezio.plugin import BasePlugin
from poezio.roster import roster
from poezio.common import safeJID
from poezio.contact import Contact, Resource
from poezio.core.structs import Completion
from poezio import tabs
from slixmpp.jid import JID, InvalidJID
from slixmpp.exceptions import IqTimeout
class Plugin(BasePlugin):
......@@ -240,19 +241,18 @@ class Plugin(BasePlugin):
on_cancel = lambda form: self.core.close_tab()
self.core.open_new_form(form, on_cancel, on_validate)
def _get_vcard(self, jid):
async def _get_vcard(self, jid):
'''Send an iq to ask the vCard.'''
def timeout_cb(iq):
try:
vcard = await self.core.xmpp.plugin['xep_0054'].get_vcard(
jid=jid,
timeout=30,
)
self._handle_vcard(vcard)
except IqTimeout:
self.api.information('Timeout while retrieving vCard for %s' % jid,
'Error')
return
self.core.xmpp.plugin['xep_0054'].get_vcard(
jid=jid,
timeout=30,
callback=self._handle_vcard,
timeout_callback=timeout_cb)
@command_args_parser.raw
def command_vcard(self, arg):
......@@ -266,7 +266,9 @@ class Plugin(BasePlugin):
self.api.information('Invalid JID: %s' % arg, 'Error')
return
self._get_vcard(jid)
asyncio.ensure_future(
self._get_vcard(jid)
)
@command_args_parser.raw
def command_private_vcard(self, arg):
......@@ -285,10 +287,12 @@ class Plugin(BasePlugin):
jid = self.api.current_tab().jid.bare + '/' + user.nick
else:
try:
jid = safeJID(arg)
jid = JID(arg)
except InvalidJID:
return self.api.information('Invalid JID: %s' % arg, 'Error')
self._get_vcard(jid)
asyncio.ensure_future(
self._get_vcard(jid)
)
@command_args_parser.raw
def command_roster_vcard(self, arg):
......@@ -297,9 +301,13 @@ class Plugin(BasePlugin):
return
current = self.api.current_tab().selected_row
if isinstance(current, Resource):
self._get_vcard(JID(current.jid).bare)
asyncio.ensure_future(
self._get_vcard(JID(current.jid).bare)
)
elif isinstance(current, Contact):
self._get_vcard(current.bare_jid)
asyncio.ensure_future(
self._get_vcard(current.bare_jid)
)
def completion_vcard(self, the_input):
contacts = [contact.bare_jid for contact in roster.get_contacts()]
......
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