full fastindex integration, drop old cache stuff
This commit is contained in:
parent
f5c117f067
commit
271bfb4725
1 changed files with 11 additions and 63 deletions
|
@ -27,6 +27,7 @@ module("luci.dispatcher", package.seeall)
|
||||||
require("luci.http")
|
require("luci.http")
|
||||||
require("luci.sys")
|
require("luci.sys")
|
||||||
require("luci.fs")
|
require("luci.fs")
|
||||||
|
require("luci.fastindex")
|
||||||
|
|
||||||
-- Dirty OpenWRT fix
|
-- Dirty OpenWRT fix
|
||||||
if (os.time() < luci.fs.mtime(luci.sys.libpath() .. "/dispatcher.lua")) then
|
if (os.time() < luci.fs.mtime(luci.sys.libpath() .. "/dispatcher.lua")) then
|
||||||
|
@ -49,6 +50,8 @@ dispatched = nil
|
||||||
built_index = false
|
built_index = false
|
||||||
built_tree = false
|
built_tree = false
|
||||||
|
|
||||||
|
-- Fastindex cache
|
||||||
|
local fi = nil
|
||||||
|
|
||||||
-- Builds a URL
|
-- Builds a URL
|
||||||
function build_url(...)
|
function build_url(...)
|
||||||
|
@ -155,75 +158,20 @@ end
|
||||||
function createindex()
|
function createindex()
|
||||||
index = {}
|
index = {}
|
||||||
local path = luci.sys.libpath() .. "/controller/"
|
local path = luci.sys.libpath() .. "/controller/"
|
||||||
local suff = ".lua"
|
local suffix = ".lua"
|
||||||
|
|
||||||
--[[if pcall(require, "fastindex") then
|
if fi == nil then
|
||||||
createindex_fastindex(path, suff)
|
fi = luci.fastindex.new("index")
|
||||||
else
|
|
||||||
createindex_plain(path, suff)
|
|
||||||
end]]--
|
|
||||||
|
|
||||||
createindex_plain(path, suff)
|
|
||||||
|
|
||||||
built_index = true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- 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)
|
||||||
fi.add(path .. "*/*" .. suffix)
|
fi.add(path .. "*/*" .. suffix)
|
||||||
|
end
|
||||||
fi.scan()
|
fi.scan()
|
||||||
|
|
||||||
for k, v in pairs(fi.indexes) do
|
for k, v in pairs(fi.indexes) do
|
||||||
index[v[2]] = v[1]
|
index[v[2]] = v[1]
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
-- Calls the index function of all available controllers
|
built_index = true
|
||||||
function createindex_plain(path, suffix)
|
|
||||||
local cache = nil
|
|
||||||
|
|
||||||
local controllers = luci.util.combine(
|
|
||||||
luci.fs.glob(path .. "*" .. suffix) or {},
|
|
||||||
luci.fs.glob(path .. "*/*" .. suffix) or {}
|
|
||||||
)
|
|
||||||
|
|
||||||
if indexcache then
|
|
||||||
cache = luci.fs.mtime(indexcache)
|
|
||||||
|
|
||||||
if not cache then
|
|
||||||
luci.fs.mkdir(indexcache)
|
|
||||||
luci.fs.chmod(indexcache, "a=,u=rwx")
|
|
||||||
cache = luci.fs.mtime(indexcache)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for i,c in ipairs(controllers) do
|
|
||||||
local module = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".")
|
|
||||||
local cachefile = indexcache .. "/" .. module
|
|
||||||
local stime
|
|
||||||
local ctime
|
|
||||||
|
|
||||||
if cache then
|
|
||||||
stime = luci.fs.mtime(c) or 0
|
|
||||||
ctime = luci.fs.mtime(cachefile) or 0
|
|
||||||
end
|
|
||||||
|
|
||||||
if not cache or stime > ctime then
|
|
||||||
stat, mod = pcall(require, module)
|
|
||||||
|
|
||||||
if stat and mod and type(mod.index) == "function" then
|
|
||||||
index[module] = mod.index
|
|
||||||
|
|
||||||
if cache then
|
|
||||||
luci.fs.writefile(cachefile, luci.util.dump(mod.index))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
index[module] = loadfile(cachefile)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Creates the dispatching tree from the index
|
-- Creates the dispatching tree from the index
|
||||||
|
|
Loading…
Reference in a new issue