Comparison

core/modulemanager.lua @ 584:eb0cea29c8d7

Temporary hack for global modules
author Matthew Wild <mwild1@gmail.com>
date Sat, 06 Dec 2008 23:15:48 +0000
parent 579:81e68e5afce2
child 592:c6e2c727d0cc
comparison
equal deleted inserted replaced
583:5821eaa80baa 584:eb0cea29c8d7
42 42
43 module "modulemanager" 43 module "modulemanager"
44 44
45 local api = {}; -- Module API container 45 local api = {}; -- Module API container
46 46
47 local modulemap = {}; 47 local modulemap = { ["*"] = {} };
48 48
49 local m_handler_info = multitable_new(); 49 local m_handler_info = multitable_new();
50 local m_stanza_handlers = multitable_new(); 50 local m_stanza_handlers = multitable_new();
51 local handler_info = {}; 51 local handler_info = {};
52 local stanza_handlers = {}; 52 local stanza_handlers = {};
67 67
68 function load(host, module_name, config) 68 function load(host, module_name, config)
69 if not (host and module_name) then 69 if not (host and module_name) then
70 return nil, "insufficient-parameters"; 70 return nil, "insufficient-parameters";
71 end 71 end
72 local mod, err = loadfile(plugin_dir.."mod_"..module_name..".lua");
73 if not mod then
74 log("error", "Unable to load module '%s': %s", module_name or "nil", err or "nil");
75 return nil, err;
76 end
77 72
78 if not modulemap[host] then 73 if not modulemap[host] then
79 modulemap[host] = {}; 74 modulemap[host] = {};
80 stanza_handlers[host] = {}; 75 stanza_handlers[host] = {};
81 elseif modulemap[host][module_name] then 76 elseif modulemap[host][module_name] then
82 log("warn", "%s is already loaded for %s, so not loading again", module_name, host); 77 log("warn", "%s is already loaded for %s, so not loading again", module_name, host);
83 return nil, "module-already-loaded"; 78 return nil, "module-already-loaded";
84 end 79 elseif modulemap["*"][module_name] then
85 80 return nil, "global-module-already-loaded";
81 end
82
83
84 local mod, err = loadfile(plugin_dir.."mod_"..module_name..".lua");
85 if not mod then
86 log("error", "Unable to load module '%s': %s", module_name or "nil", err or "nil");
87 return nil, err;
88 end
89
86 local _log = logger.init(host..":"..module_name); 90 local _log = logger.init(host..":"..module_name);
87 local api_instance = setmetatable({ name = module_name, host = host, config = config, _log = _log, log = function (self, ...) return _log(...); end }, { __index = api }); 91 local api_instance = setmetatable({ name = module_name, host = host, config = config, _log = _log, log = function (self, ...) return _log(...); end }, { __index = api });
88 92
89 local pluginenv = setmetatable({ module = api_instance }, { __index = _G }); 93 local pluginenv = setmetatable({ module = api_instance }, { __index = _G });
90 94
94 if not success then 98 if not success then
95 log("error", "Error initialising module '%s': %s", name or "nil", ret or "nil"); 99 log("error", "Error initialising module '%s': %s", name or "nil", ret or "nil");
96 return nil, ret; 100 return nil, ret;
97 end 101 end
98 102
99 modulemap[host][module_name] = mod; 103 -- Use modified host, if the module set one
104 modulemap[api_instance.host][module_name] = mod;
100 105
101 return true; 106 return true;
102 end 107 end
103 108
104 function is_loaded(host, name) 109 function is_loaded(host, name)