aboutsummaryrefslogtreecommitdiffstats
path: root/core/modulemanager.lua
diff options
context:
space:
mode:
Diffstat (limited to 'core/modulemanager.lua')
-rw-r--r--core/modulemanager.lua23
1 files changed, 13 insertions, 10 deletions
diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index 0ca37105..f9f3a8b8 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -101,11 +101,12 @@ local function do_unload_module(host, name)
end
if mod.module.items then -- remove items
+ local events = (host == "*" and prosody.events) or hosts[host].events;
for key,t in pairs(mod.module.items) do
for i = #t,1,-1 do
local value = t[i];
t[i] = nil;
- hosts[host].events.fire_event("item-removed/"..key, {source = mod.module, item = value});
+ events.fire_event("item-removed/"..key, {source = mod.module, item = value});
end
end
end
@@ -122,6 +123,7 @@ local function do_load_module(host, module_name)
if not modulemap[host] then
modulemap[host] = {};
+ hosts[host].modules = modulemap[host];
end
if modulemap[host][module_name] then
@@ -147,8 +149,6 @@ local function do_load_module(host, module_name)
api_instance.environment = pluginenv;
setfenv(mod, pluginenv);
- hosts[host].modules = modulemap[host];
- modulemap[host][module_name] = pluginenv;
local ok, err = pcall(mod);
if ok then
@@ -160,15 +160,18 @@ local function do_load_module(host, module_name)
end
end
- -- Use modified host, if the module set one
- if api_instance.host == "*" and host ~= "*" then
- modulemap[host][module_name] = nil;
- modulemap["*"][module_name] = pluginenv;
- api_instance:set_global();
+ modulemap[pluginenv.module.host][module_name] = pluginenv;
+ if pluginenv.module.host == "*" then
+ if not pluginenv.module.global then -- COMPAT w/pre-0.9
+ log("warn", "mod_%s: Setting module.host = '*' deprecated, call module:set_global() instead", module_name);
+ api_instance:set_global();
+ end
+ else
+ hosts[host].modules[module_name] = pluginenv;
end
- else
+ end
+ if not ok then
log("error", "Error initializing module '%s' on '%s': %s", module_name, host, err or "nil");
- do_unload_module(api_instance.host, module_name); -- Ignore error, module may be partially-loaded
end
return ok and pluginenv, err;
end