From 332a5c2553db41de777473a1e1be9cd1522c9496 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Thu, 31 Mar 2016 18:54:41 +0100 Subject: Move the src directory to poezio, for better cython compatibility. --- poezio/tabs/adhoc_commands_list.py | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 poezio/tabs/adhoc_commands_list.py (limited to 'poezio/tabs/adhoc_commands_list.py') diff --git a/poezio/tabs/adhoc_commands_list.py b/poezio/tabs/adhoc_commands_list.py new file mode 100644 index 00000000..10ebf22b --- /dev/null +++ b/poezio/tabs/adhoc_commands_list.py @@ -0,0 +1,57 @@ +""" +A tab listing the ad-hoc commands on a specific JID. The user can +select one of them and start executing it, or just close the tab and do +nothing. +""" + +import logging +log = logging.getLogger(__name__) + +from . import ListTab + +from slixmpp.plugins.xep_0030.stanza.items import DiscoItem + +class AdhocCommandsListTab(ListTab): + plugin_commands = {} + plugin_keys = {} + + def __init__(self, jid): + ListTab.__init__(self, jid.full, + "“Enter”: execute selected command.", + 'Ad-hoc commands of JID %s (Loading)' % jid, + (('Node', 0), ('Description', 1))) + self.key_func['^M'] = self.execute_selected_command + + def execute_selected_command(self): + if not self.listview or not self.listview.get_selected_row(): + return + node, name, jid = self.listview.get_selected_row() + session = {'next': self.core.on_next_adhoc_step, + 'error': self.core.on_adhoc_error} + self.core.xmpp.plugin['xep_0050'].start_command(jid, node, session) + + def get_columns_sizes(self): + return {'Node': int(self.width * 3 / 8), + 'Description': int(self.width * 5 / 8)} + + def on_list_received(self, iq): + """ + Fill the listview with the value from the received iq + """ + if iq['type'] == 'error': + self.set_error(iq['error']['type'], iq['error']['code'], iq['error']['text']) + return + def get_items(): + substanza = iq['disco_items'] + for item in substanza['substanzas']: + if isinstance(item, DiscoItem): + yield item + items = [(item['node'], item['name'] or '', item['jid']) for item in get_items()] + self.listview.set_lines(items) + self.info_header.message = 'Ad-hoc commands of JID %s' % self.name + if self.core.current_tab() is self: + self.refresh() + else: + self.state = 'highlight' + self.refresh_tab_win() + self.core.doupdate() -- cgit v1.2.3