require("luci.http")
require("luci.sys")
require("luci.fs")
+require("luci.fastindex")
+
+-- Dirty OpenWRT fix
+if (os.time() < luci.fs.mtime(luci.sys.libpath() .. "/dispatcher.lua")) then
+ os.execute('date -s '..os.date('%m%d%H%M%Y', luci.fs.mtime(luci.sys.libpath() .. "/dispatcher.lua"))..' > /dev/null 2>&1')
+end
-- Local dispatch database
local tree = {nodes={}}
built_index = false
built_tree = false
+-- Fastindex cache
+local fi = nil
-- Builds a URL
function build_url(...)
-- Init template engine
local tpl = require("luci.template")
- tpl.viewns.translate = function(...) return require("luci.i18n").translate(...) end
- tpl.viewns.controller = luci.http.dispatcher()
- tpl.viewns.uploadctrl = luci.http.dispatcher_upload()
- tpl.viewns.media = luci.config.main.mediaurlbase
- tpl.viewns.resource = luci.config.main.resourcebase
+ tpl.viewns.translate = function(...) return require("luci.i18n").translate(...) end
+ tpl.viewns.controller = luci.http.dispatcher()
+ tpl.viewns.uploadctrl = luci.http.dispatcher_upload()
+ tpl.viewns.media = luci.config.main.mediaurlbase
+ tpl.viewns.resource = luci.config.main.resourcebase
+ tpl.viewns.REQUEST_URI = luci.http.env.SCRIPT_NAME .. luci.http.env.PATH_INFO
if c and type(c.target) == "function" then
function createindex()
index = {}
local path = luci.sys.libpath() .. "/controller/"
- local suff = ".lua"
-
- --[[if pcall(require, "fastindex") then
- createindex_fastindex(path, suff)
- else
- createindex_plain(path, suff)
- end]]--
-
- createindex_plain(path, suff)
-
- built_index = true
-end
+ local suffix = ".lua"
--- Uses fastindex to create the dispatching tree
-function createindex_fastindex(path, suffix)
- local fi = fastindex.new("index")
- fi.add(path .. "*" .. suffix)
- fi.add(path .. "*/*" .. suffix)
+ if fi == nil then
+ fi = luci.fastindex.new("index")
+ fi.add(path .. "*" .. suffix)
+ fi.add(path .. "*/*" .. suffix)
+ end
fi.scan()
-
+
for k, v in pairs(fi.indexes) do
index[v[2]] = v[1]
end
-end
-
--- Calls the index function of all available controllers
-function createindex_plain(path, suffix)
- local cachetime = nil
-
- local controllers = luci.util.combine(
- luci.fs.glob(path .. "*" .. suffix) or {},
- luci.fs.glob(path .. "*/*" .. suffix) or {}
- )
-
- if indexcache then
- cachetime = luci.fs.mtime(indexcache)
-
- if not cachetime then
- luci.fs.mkdir(indexcache)
- luci.fs.chmod(indexcache, "a=,u=rwx")
- end
- end
- if not cachetime then
- for i,c in ipairs(controllers) do
- c = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".")
- stat, mod = pcall(require, c)
-
- if stat and mod and type(mod.index) == "function" then
- index[c] = mod.index
-
- if indexcache then
- luci.fs.writefile(indexcache .. "/" .. c, string.dump(mod.index))
- end
- end
- end
- else
- for i,c in ipairs(luci.fs.dir(indexcache)) do
- if c:sub(1) ~= "." then
- index[c] = loadfile(indexcache .. "/" .. c)
- end
- end
- end
+ built_index = true
end
-- Creates the dispatching tree from the index
-- Load default translation
luci.i18n.loadc("default")
- local scope = _G
+ local scope = luci.util.clone(_G)
for k,v in pairs(_M) do
if type(v) == "function" then
scope[k] = v