summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Sluift/core.lua33
-rw-r--r--Sluift/sluift.cpp2
2 files changed, 25 insertions, 10 deletions
diff --git a/Sluift/core.lua b/Sluift/core.lua
index 48b8a97..ecd3c5e 100644
--- a/Sluift/core.lua
+++ b/Sluift/core.lua
@@ -436,18 +436,39 @@ local function call(options)
end
local function read_file(file)
local f = io.open(file, 'rb')
local result = f:read('*all')
f:close()
return result
end
+_H = {
+ [[ Generate a form table, suitable for PubSubConfiguration and MAMQuery ]],
+ parameters = { {"fields", "The fields that will be converted into a form table"},
+ {"form_type", "If specified, add a form_type field with this value"},
+ {"type", "Form type, e.g. 'submit'"} }
+}
+local function create_form(fields, ...)
+ local options = parse_options({}, ...)
+ local result = { fields = {} }
+ for var, value in pairs(fields) do
+ result.fields[#result.fields+1] = { name = var, value = value }
+ end
+ if options.form_type then
+ result.fields[#result.fields+1] = { name = 'form_type', value = form_type }
+ end
+ if options.type then
+ result['type'] = type
+ end
+ return result
+end
+
--------------------------------------------------------------------------------
-- Metatables
--------------------------------------------------------------------------------
_H = {
[[ Client interface ]]
}
local Client = {
_with_prompt = function(client) return client:jid() end
@@ -803,26 +824,19 @@ for _, method in ipairs({'events', 'get_next_event', 'for_each_event'}) do
return node.client[method](node.client, options)
end
end
--------------------------------------------------------------------------------
-- PubSubNode
--------------------------------------------------------------------------------
local function pubsub_node_configuration_to_form(configuration)
- if not configuration then
- return
- end
- local fields = { {name = 'form_type', value = 'http://jabber.org/protocol/pubsub#node_config'} }
- for var, value in pairs(configuration) do
- fields[#fields+1] = { name = var, value = value }
- end
- return { type = "submit", fields = fields }
+ return create_form{configuration, form_type="http://jabber.org/protocol/pubsub#node_config", type="submit"}
end
function PubSubNode:list_items (options)
return self.client:get_disco_items(merge_tables({to = self.jid, disco_items = { node = self.node }}, options))
end
local simple_pubsub_node_queries = {
get_configuration = 'pubsub_owner_configure',
get_subscriptions = 'pubsub_subscriptions',
@@ -1012,11 +1026,12 @@ return {
register_get_by_type_index = register_get_by_type_index,
process_pubsub_event = process_pubsub_event,
tprint = tprint,
read_file = read_file,
disco = disco,
get_help = get_help,
help = help,
extra_help = extra_help,
copy = copy,
- with = with
+ with = with,
+ create_form = create_form
}
diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp
index a04ceeb..b55649b 100644
--- a/Sluift/sluift.cpp
+++ b/Sluift/sluift.cpp
@@ -385,19 +385,19 @@ SLUIFT_API int luaopen_sluift(lua_State* L) {
lua_setfield(L, -2, "crypto");
#ifdef HAVE_ITUNES
Lua::FunctionRegistry::getInstance().createFunctionTable(L, "iTunes");
lua_setfield(L, -2, "itunes");
#endif
// Register convenience functions
lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
std::vector<std::string> coreLibExports = boost::assign::list_of
- ("tprint")("disco")("help")("get_help")("copy")("with")("read_file");
+ ("tprint")("disco")("help")("get_help")("copy")("with")("read_file")("create_form");
foreach (const std::string& coreLibExport, coreLibExports) {
lua_getfield(L, -1, coreLibExport.c_str());
lua_setfield(L, -3, coreLibExport.c_str());
}
lua_pop(L, 1);
// Load client metatable
lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
std::vector<std::string> tables = boost::assign::list_of("Client");