Mercurial > prosody-modules
diff mod_adhoc/adhoc/adhoc.lib.lua @ 121:a9898f13c89e
mod_adhoc: Major refactoring. Actuall data exchange happens here now
mod_adhoc_cmd_*: Update to work with aforementioned change
author | Florian Zeitz <florob@babelmonkeys.de> |
---|---|
date | Fri, 22 Jan 2010 04:25:58 +0100 |
parents | adc9eff8adb2 |
children | c3a874eec712 |
line wrap: on
line diff
--- a/mod_adhoc/adhoc/adhoc.lib.lua Fri Jan 15 10:17:57 2010 +0100 +++ b/mod_adhoc/adhoc/adhoc.lib.lua Fri Jan 22 04:25:58 2010 +0100 @@ -16,4 +16,42 @@ return { name = name, node = node, handler = handler, cmdtag = _cmdtag, permission = (permission or "user") }; end +function _M.handle_cmd(command, origin, stanza) + local sessionid = stanza.tags[1].attr.sessionid or nil; + local dataIn = {}; + dataIn.to = stanza.attr.to; + dataIn.from = stanza.attr.from; + dataIn.action = stanza.tags[1].attr.action or nil; + dataIn.form = stanza.tags[1]:child_with_ns("jabber:x:data"); + + local data, sessid = command:handler(dataIn, sessionid); + local stanza = st.reply(stanza); + if data.status == "completed" then + cmdtag = command:cmdtag("completed", sessid); + elseif data.status == "canceled" then + cmdtag = command:cmdtag("canceled", sessid); + elseif data.status == "error" then + stanza = st.error_reply(stanza, data.error.type, data.error.condition, data.error.message); + cmdtag = command:cmdtag("canceled", sessid); + else + cmdtag = command:cmdtag("executing", sessid); + end + + for name, content in pairs(data) do + if name == "info" then + cmdtag:tag("note", {type="info"}):text(content); + elseif name == "error" then + cmdtag:tag("note", {type="error"}):text(content.message); + elseif name == "form" then + cmdtag:add_child(data.form:form()); + elseif name == "other" then + cmdtag:add_child(content); + end + end + stanza:add_child(cmdtag); + origin.send(stanza); + + return true; +end + return _M;