Software /
code /
prosody
Comparison
util/pluginloader.lua @ 2276:d9302be05f86
util.pluginloader: Support for fetching plugins from the data store
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 02 Dec 2009 18:05:03 +0000 |
parent | 1522:569d58d21612 |
child | 2325:265441f2ad48 |
comparison
equal
deleted
inserted
replaced
2275:dd344b94d088 | 2276:d9302be05f86 |
---|---|
7 -- | 7 -- |
8 | 8 |
9 | 9 |
10 local plugin_dir = CFG_PLUGINDIR or "./plugins/"; | 10 local plugin_dir = CFG_PLUGINDIR or "./plugins/"; |
11 | 11 |
12 local io_open = io.open; | 12 local io_open, os_time = io.open, os.time; |
13 local loadstring = loadstring; | 13 local loadstring, pairs = loadstring, pairs; |
14 | |
15 local datamanager = require "util.datamanager"; | |
14 | 16 |
15 module "pluginloader" | 17 module "pluginloader" |
18 | |
19 local function load_from_datastore(name) | |
20 local content = datamanager.load(name, "*", "plugins"); | |
21 if not content or not content[1] then return nil, "Resource not found"; end | |
22 return content[1], name; | |
23 end | |
16 | 24 |
17 local function load_file(name) | 25 local function load_file(name) |
18 local file, err = io_open(plugin_dir..name); | 26 local file, err = io_open(plugin_dir..name); |
19 if not file then return file, err; end | 27 if not file then return file, err; end |
20 local content = file:read("*a"); | 28 local content = file:read("*a"); |
21 file:close(); | 29 file:close(); |
22 return content, name; | 30 return content, name; |
23 end | 31 end |
24 | 32 |
25 function load_resource(plugin, resource) | 33 function load_resource(plugin, resource, loader) |
26 if not resource then | 34 if not resource then |
27 resource = "mod_"..plugin..".lua"; | 35 resource = "mod_"..plugin..".lua"; |
28 end | 36 end |
29 local content, err = load_file(plugin.."/"..resource); | 37 loader = loader or load_file; |
30 if not content then content, err = load_file(resource); end | 38 |
39 local content, err = loader(plugin.."/"..resource); | |
40 if not content then content, err = loader(resource); end | |
31 -- TODO add support for packed plugins | 41 -- TODO add support for packed plugins |
42 | |
43 if not content and loader == load_file then | |
44 return load_resource(plugin, resource, load_from_datastore); | |
45 end | |
46 | |
32 return content, err; | 47 return content, err; |
48 end | |
49 | |
50 function store_resource(plugin, resource, content, metadata) | |
51 if not resource then | |
52 resource = "mod_"..plugin..".lua"; | |
53 end | |
54 local store = { content }; | |
55 if metadata then | |
56 for k,v in pairs(metadata) do | |
57 store[k] = v; | |
58 end | |
59 end | |
60 datamanager.store(plugin.."/"..resource, "*", "plugins", store); | |
33 end | 61 end |
34 | 62 |
35 function load_code(plugin, resource) | 63 function load_code(plugin, resource) |
36 local content, err = load_resource(plugin, resource); | 64 local content, err = load_resource(plugin, resource); |
37 if not content then return content, err; end | 65 if not content then return content, err; end |