summaryrefslogtreecommitdiff
path: root/poezio/tabs/adhoc_commands_list.py
diff options
context:
space:
mode:
Diffstat (limited to 'poezio/tabs/adhoc_commands_list.py')
-rw-r--r--poezio/tabs/adhoc_commands_list.py57
1 files changed, 57 insertions, 0 deletions
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()