Software /
code /
prosody
File
util/pluginloader.lua @ 2511:a81c710b1708
prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 28 Jan 2010 15:05:30 +0000 |
parent | 2325:265441f2ad48 |
child | 2925:692b3c6c5bd2 |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2009 Matthew Wild -- Copyright (C) 2008-2009 Waqas Hussain -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local plugin_dir = CFG_PLUGINDIR or "./plugins/"; local io_open, os_time = io.open, os.time; local loadstring, pairs = loadstring, pairs; local datamanager = require "util.datamanager"; module "pluginloader" local function load_from_datastore(name) local content = datamanager.load(name, nil, "plugins"); if not content or not content[1] then return nil, "Resource not found"; end return content[1], name; end local function load_file(name) local file, err = io_open(plugin_dir..name); if not file then return file, err; end local content = file:read("*a"); file:close(); return content, name; end function load_resource(plugin, resource, loader) if not resource then resource = "mod_"..plugin..".lua"; end loader = loader or load_file; local content, err = loader(plugin.."/"..resource); if not content then content, err = loader(resource); end -- TODO add support for packed plugins if not content and loader == load_file then return load_resource(plugin, resource, load_from_datastore); end return content, err; end function store_resource(plugin, resource, content, metadata) if not resource then resource = "mod_"..plugin..".lua"; end local store = { content }; if metadata then for k,v in pairs(metadata) do store[k] = v; end end datamanager.store(plugin.."/"..resource, nil, "plugins", store); end function load_code(plugin, resource) local content, err = load_resource(plugin, resource); if not content then return content, err; end return loadstring(content, "@"..err); end return _M;