# HG changeset patch # User Florian Zeitz # Date 1278707366 -7200 # Node ID a6361a1fda5e4983a34638815813eda7a02214a7 # Parent 316d7c8e1fb040351b4267d0fa6e690d59640c7e mod_adhoc_cmd_modules: Add "Reload module" command diff -r 316d7c8e1fb0 -r a6361a1fda5e mod_adhoc_cmd_modules/mod_adhoc_cmd_modules.lua --- a/mod_adhoc_cmd_modules/mod_adhoc_cmd_modules.lua Sat Jul 10 01:35:05 2010 +0500 +++ b/mod_adhoc_cmd_modules/mod_adhoc_cmd_modules.lua Fri Jul 09 22:29:26 2010 +0200 @@ -12,25 +12,55 @@ require "util.iterators"; local dataforms_new = require "util.dataforms".new; local array = require "util.array"; +local modulemanager = require "modulemanager"; local adhoc_new = module:require "adhoc".new; function list_modules_handler(self, data, state) - local list_modules_result = dataforms_new { + local result = dataforms_new { title = "List of loaded modules"; { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#list" }; { name = "modules", type = "text-multi", label = "The following modules are loaded:" }; }; - local modules = array.collect(keys(hosts[data.to].modules)):sort() - local modules_str = nil; - for _, name in ipairs(modules) do - modules_str = ((modules_str and modules_str .. "\n") or "") .. name; + local modules = array.collect(keys(hosts[data.to].modules)):sort():concat("\n"); + + return { status = "completed", result = { layout = result; data = { modules = modules } } }; +end + +-- TODO: Allow reloading multiple modules (depends on list-multi +function reload_modules_handler(self, data, state) + local modules = {}; + local layout = dataforms_new { + title = "Reload module"; + instructions = "Select the module to be reloaded"; + + { name = "FORM_TYPE", type = "hidden", value = "http://prosody.im/protocol/modules#reload" }; + { name = "module", type = "list-single", value = modules, label = "Module to be reloaded:"}; + }; + if state then + if data.action == "cancel" then + return { status = "canceled" }; + end + fields = layout:data(data.form); + local ok, err = modulemanager.reload(data.to, fields.module); + if ok then + return { status = "completed", info = 'Module "'..fields.module..'" successfully reloaded on host "'..data.to..'".' }; + else + return { status = "completed", error = 'Failed to reload module "'..fields.module..'" on host "'..data.to.. + '". Error was: "'..tostring(err)..'"' }; + end + else + local modules2 = array.collect(keys(hosts[data.to].modules)):sort(); + for i, val in ipairs(modules2) do + modules[i] = val; + end + return { status = "executing", form = layout }, "executing"; end - - return { status = "completed", result = { layout = list_modules_result; data = { modules = modules_str } } }; end local list_modules_desc = adhoc_new("List loaded modules", "http://prosody.im/protocol/modules#list", list_modules_handler, "admin"); +local reload_modules_desc = adhoc_new("Reload module", "http://prosody.im/protocol/modules#reload", reload_modules_handler, "admin"); module:add_item("adhoc", list_modules_desc); +module:add_item("adhoc", reload_modules_desc);