add koreader plugin mechanism

This should implement #505.
This commit is contained in:
chrox
2014-04-23 21:57:48 +08:00
parent 24d5c01a73
commit 34fd9f3efa
5 changed files with 63 additions and 2 deletions

View File

@@ -0,0 +1,44 @@
local DEBUG = require("dbg")
-- lfs
local PluginLoader = {
plugin_path = lfs.currentdir().."/plugins"
}
function PluginLoader:loadPlugins()
if self.plugins then return self.plugins end
self.plugins = {}
for f in lfs.dir(self.plugin_path) do
local path = self.plugin_path.."/"..f
local mode = lfs.attributes(path, "mode")
-- valid koreader plugin directory
if mode == "directory" and f:find(".+%.koplugin$") then
local mainfile = path.."/".."main.lua"
local package_path = package.path
local package_cpath = package.cpath
package.path = path.."/?.lua;"..package.path
package.cpath = path.."/lib/?.so;"..package.cpath
local ok, module = pcall(require, "main")
if not ok then
DEBUG("Error when loading", mainfile, module)
end
package.path = package_path
package.cpath = package_cpath
if ok then
module.path = path
table.insert(self.plugins, module)
end
end
end
for _,plugin in ipairs(self.plugins) do
package.path = package.path..";"..plugin.path.."/?.lua"
package.cpath = package.cpath..";"..plugin.path.."/lib/?.so"
end
return self.plugins
end
return PluginLoader