From 412a9169bd2052b794a1d29705f470cd0e2735a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Sun, 14 Apr 2019 02:21:09 +0100 Subject: Fixes #3432. Allow execute to be used with the meaning of 'next'. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- slixmpp/plugins/xep_0050/adhoc.py | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'slixmpp') diff --git a/slixmpp/plugins/xep_0050/adhoc.py b/slixmpp/plugins/xep_0050/adhoc.py index 2e3d7484..67a4ecb5 100644 --- a/slixmpp/plugins/xep_0050/adhoc.py +++ b/slixmpp/plugins/xep_0050/adhoc.py @@ -96,24 +96,10 @@ class XEP_0050(BasePlugin): register_stanza_plugin(Iq, Command) register_stanza_plugin(Command, Form, iterable=True) - self.xmpp.add_event_handler('command_execute', - self._handle_command_start) - self.xmpp.add_event_handler('command_next', - self._handle_command_next) - self.xmpp.add_event_handler('command_cancel', - self._handle_command_cancel) - self.xmpp.add_event_handler('command_complete', - self._handle_command_complete) + self.xmpp.add_event_handler('command', self._handle_command_all) def plugin_end(self): - self.xmpp.del_event_handler('command_execute', - self._handle_command_start) - self.xmpp.del_event_handler('command_next', - self._handle_command_next) - self.xmpp.del_event_handler('command_cancel', - self._handle_command_cancel) - self.xmpp.del_event_handler('command_complete', - self._handle_command_complete) + self.xmpp.del_event_handler('command', self._handle_command_all) self.xmpp.remove_handler('Ad-Hoc Execute') self.xmpp['xep_0030'].del_feature(feature=Command.namespace) self.xmpp['xep_0030'].set_items(node=Command.namespace, items=tuple()) @@ -201,8 +187,27 @@ class XEP_0050(BasePlugin): def _handle_command(self, iq): """Raise command events based on the command action.""" + self.xmpp.event('command', iq) self.xmpp.event('command_%s' % iq['command']['action'], iq) + def _handle_command_all(self, iq: Iq) -> None: + action = iq['command']['action'] + sessionid = iq['command']['sessionid'] + session = self.sessions.get(sessionid) + + if session is None: + return self._handle_command_start(iq) + + if action in ('next', 'execute'): + return self._handle_command_next(iq) + if action == 'prev': + return self._handle_command_prev(iq) + if action == 'complete': + return self._handle_command_complete(iq) + if action == 'cancel': + return self._handle_command_cancel(iq) + return None + def _handle_command_start(self, iq): """ Process an initial request to execute a command. -- cgit v1.2.3