Merge 0.9->0.10
[prosody.git] / plugins / adhoc / adhoc.lib.lua
index acdae6b9705604b83745901320a04f143cb8cac5..5c90c91ba8931360cd87d2921504091b292d57eb 100644 (file)
@@ -25,16 +25,16 @@ function _M.new(name, node, handler, permission)
 end
 
 function _M.handle_cmd(command, origin, stanza)
-       local sessionid = stanza.tags[1].attr.sessionid or uuid.generate();
+       local cmdtag = stanza.tags[1]
+       local sessionid = cmdtag.attr.sessionid or uuid.generate();
        local dataIn = {};
        dataIn.to = stanza.attr.to;
        dataIn.from = stanza.attr.from;
-       dataIn.action = stanza.tags[1].attr.action or "execute";
-       dataIn.form = stanza.tags[1]:child_with_ns("jabber:x:data");
+       dataIn.action = cmdtag.attr.action or "execute";
+       dataIn.form = cmdtag:get_child("x", "jabber:x:data");
 
        local data, state = command:handler(dataIn, states[sessionid]);
        states[sessionid] = state;
-       local stanza = st.reply(stanza);
        local cmdtag;
        if data.status == "completed" then
                states[sessionid] = nil;
@@ -44,8 +44,8 @@ function _M.handle_cmd(command, origin, stanza)
                cmdtag = command:cmdtag("canceled", sessionid);
        elseif data.status == "error" then
                states[sessionid] = nil;
-               stanza = st.error_reply(stanza, data.error.type, data.error.condition, data.error.message);
-               origin.send(stanza);
+               local reply = st.error_reply(stanza, data.error.type, data.error.condition, data.error.message);
+               origin.send(reply);
                return true;
        else
                cmdtag = command:cmdtag("executing", sessionid);
@@ -59,8 +59,8 @@ function _M.handle_cmd(command, origin, stanza)
                        cmdtag:tag("note", {type="warn"}):text(content):up();
                elseif name == "error" then
                        cmdtag:tag("note", {type="error"}):text(content.message):up();
-               elseif name =="actions" then
-                       local actions = st.stanza("actions");
+               elseif name == "actions" then
+                       local actions = st.stanza("actions", { execute = content.default });
                        for _, action in ipairs(content) do
                                if (action == "prev") or (action == "next") or (action == "complete") then
                                        actions:tag(action):up();
@@ -78,8 +78,9 @@ function _M.handle_cmd(command, origin, stanza)
                        cmdtag:add_child(content);
                end
        end
-       stanza:add_child(cmdtag);
-       origin.send(stanza);
+       local reply = st.reply(stanza);
+       reply:add_child(cmdtag);
+       origin.send(reply);
 
        return true;
 end