clix/adhoc.lua

Sun, 15 Nov 2020 20:45:50 +0100

author
Kim Alvefur <zash@zash.se>
date
Sun, 15 Nov 2020 20:45:50 +0100
changeset 140
8815232cbbeb
parent 126
c9d03a70a936
child 168
75e8ca131178
permissions
-rw-r--r--

clix.watch_pep: Take PEP node as positional argument

Thanks MattJ

108
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local dataforms = require "util.dataforms";
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 -- TODO Cleanup, commit
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 return function (opts, arg)
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 if opts.short_help then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 print("Execute an Ad-Hoc Command");
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 return;
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local function on_connect(conn)
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 if opts.node then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 conn:execute_command(opts.to or conn.host, opts.node, function(cmd)
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 conn:info("status: %s", cmd.status);
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local note = cmd.note;
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 if note then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 conn[note.attr.type or "info"](conn, note:get_text());
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 if cmd.status == "executing" then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local data = {};
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 for i=1,#arg do
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 local k,v = arg[i]:match"^([^=]+)=(.*)";
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 if k and v then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 data[k] = v; --FIXME multiple
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local command_form_layout = dataforms.from_stanza(cmd.form)
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 if opts.interactive then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 for i=1,#command_form_layout do
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 local item = command_form_layout[i];
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 if item.type ~= "hidden" and not data[item.name] then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 -- FIXME Current value isn't shown
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 io.stderr:write(item.label..": ");
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 if item.type:match"%-multi" then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 local t = { };
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 repeat
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 local line = io.read("*l");
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 if line and line ~= "" then
125
75902417ff05 clix.adhoc: Improve handling of list items
Kim Alvefur <zash@zash.se>
parents: 124
diff changeset
37 if item.type:match"list%-" then
75902417ff05 clix.adhoc: Improve handling of list items
Kim Alvefur <zash@zash.se>
parents: 124
diff changeset
38 t[#t+1] = { label = line, value = line, default = true };
75902417ff05 clix.adhoc: Improve handling of list items
Kim Alvefur <zash@zash.se>
parents: 124
diff changeset
39 else
75902417ff05 clix.adhoc: Improve handling of list items
Kim Alvefur <zash@zash.se>
parents: 124
diff changeset
40 t[#t+1] = line;
75902417ff05 clix.adhoc: Improve handling of list items
Kim Alvefur <zash@zash.se>
parents: 124
diff changeset
41 end
108
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 until not line or line == "";
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 if item.type == "text-multi" then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 t = table.concat(t, "\n");
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 data[item.name] = t;
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 --elseif item.type == "list-single" then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 --data[item.name] = { (io.read("*l")) };
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 else
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 data[item.name] = io.read("*l");
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 cmd:next(command_form_layout:form(data, "submit"));
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 elseif cmd.status == "completed" then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 if cmd.form then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 local command_form_layout = dataforms.from_stanza(cmd.form)
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 local data = command_form_layout:data(cmd.form);
124
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
61 if data.title then
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
62 print("= " .. data.title .. " =");
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
63 print()
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
64 end
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
65 if data.instructions then
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
66 print(data.instructions);
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
67 print()
ff422623e0ba clix.adhoc: Print form title and instructions if available
Kim Alvefur <zash@zash.se>
parents: 108
diff changeset
68 end
108
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 for i, item in ipairs(command_form_layout) do
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 if item.type ~= "hidden" then
126
c9d03a70a936 clix.adhoc: Print field labels if available
Kim Alvefur <zash@zash.se>
parents: 125
diff changeset
71 print("== " .. (item.label or item.name) .. " ==")
108
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 print(data[item.name]);
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 conn:close();
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 else
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 conn:warn("unhandled command status: %s", tostring(cmd.status));
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 end);
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 else
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 conn:disco_items(opts.to or conn.host, "http://jabber.org/protocol/commands", function(items)
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 -- TODO It would be neat to be able to choose from this list
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 if items then
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86 for i=1,#items do
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 print(items[i].name, items[i].node);
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 conn:close();
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 end);
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 clix_connect(opts, on_connect, {"adhoc"});
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 end
c33848e79bfc clix.adhoc: Run Ad-hoc commands
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96

mercurial