X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Fmoduleapi.lua;h=30360f73547354afc245f2f2065ed35573f2ad02;hb=e855231f8866a72b5c74e05e6985329a30744e59;hp=df33e8ec62bd5283178409f0f1d7c0d636137d1d;hpb=031c1d2a5d44469aaae8a9d79497e5e703be79c5;p=prosody.git diff --git a/core/moduleapi.lua b/core/moduleapi.lua index df33e8ec..30360f73 100644 --- a/core/moduleapi.lua +++ b/core/moduleapi.lua @@ -7,7 +7,7 @@ -- local config = require "core.configmanager"; -local modulemanager = require "modulemanager"; +local modulemanager = require "modulemanager"; -- This is necessary to avoid require loops local array = require "util.array"; local set = require "util.set"; local logger = require "util.logger"; @@ -21,7 +21,10 @@ local tonumber, tostring = tonumber, tostring; local prosody = prosody; local hosts = prosody.hosts; -local core_post_stanza = prosody.core_post_stanza; + +-- FIXME: This assert() is to try and catch an obscure bug (2013-04-05) +local core_post_stanza = assert(prosody.core_post_stanza, + "prosody.core_post_stanza is nil, please report this as a bug"); -- Registry of shared module data local shared_data = setmetatable({}, { __mode = "v" }); @@ -62,6 +65,20 @@ end function api:add_extension(data) self:add_item("extension", data); end +function api:has_feature(xmlns) + for _, feature in ipairs(self:get_host_items("feature")) do + if feature == xmlns then return true; end + end + return false; +end +function api:has_identity(category, type, name) + for _, id in ipairs(self:get_host_items("identity")) do + if id.category == category and id.type == type and id.name == name then + return true; + end + end + return false; +end function api:fire_event(...) return (hosts[self.host] or prosody).events.fire_event(...); @@ -167,12 +184,9 @@ function api:shared(...) end function api:get_option(name, default_value) - local value = config.get(self.host, self.name, name); + local value = config.get(self.host, name); if value == nil then - value = config.get(self.host, "core", name); - if value == nil then - value = default_value; - end + value = default_value; end return value; end @@ -274,23 +288,7 @@ function api:remove_item(key, value) end function api:get_host_items(key) - local result = {}; - for mod_name, module in pairs(modulemanager.get_modules(self.host)) do - module = module.module; - if module.items then - for _, item in ipairs(module.items[key] or NULL) do - t_insert(result, item); - end - end - end - for mod_name, module in pairs(modulemanager.get_modules("*")) do - module = module.module; - if module.items then - for _, item in ipairs(module.items[key] or NULL) do - t_insert(result, item); - end - end - end + local result = modulemanager.get_items(key, self.host) or {}; return result; end @@ -339,4 +337,8 @@ function api:load_resource(path, mode) return io.open(path, mode); end +function api:open_store(name, type) + return storagemanager.open(self.host, name or self.name, type); +end + return api;