13 local loadstring, pairs = loadstring, pairs; |
13 local loadstring, pairs = loadstring, pairs; |
14 |
14 |
15 local datamanager = require "util.datamanager"; |
15 local datamanager = require "util.datamanager"; |
16 |
16 |
17 module "pluginloader" |
17 module "pluginloader" |
18 |
|
19 local function load_from_datastore(name) |
|
20 local content = datamanager.load(name, nil, "plugins"); |
|
21 if not content or not content[1] then return nil, "Resource not found"; end |
|
22 return content[1], name; |
|
23 end |
|
24 |
18 |
25 local function load_file(name) |
19 local function load_file(name) |
26 local file, err = io_open(plugin_dir..name); |
20 local file, err = io_open(plugin_dir..name); |
27 if not file then return file, err; end |
21 if not file then return file, err; end |
28 local content = file:read("*a"); |
22 local content = file:read("*a"); |
38 |
32 |
39 local content, err = loader(plugin.."/"..resource); |
33 local content, err = loader(plugin.."/"..resource); |
40 if not content then content, err = loader(resource); end |
34 if not content then content, err = loader(resource); end |
41 -- TODO add support for packed plugins |
35 -- TODO add support for packed plugins |
42 |
36 |
43 if not content and loader == load_file then |
|
44 return load_resource(plugin, resource, load_from_datastore); |
|
45 end |
|
46 |
|
47 return content, err; |
37 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, nil, "plugins", store); |
|
61 end |
38 end |
62 |
39 |
63 function load_code(plugin, resource) |
40 function load_code(plugin, resource) |
64 local content, err = load_resource(plugin, resource); |
41 local content, err = load_resource(plugin, resource); |
65 if not content then return content, err; end |
42 if not content then return content, err; end |