Software /
code /
prosody
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) |