X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fweb%2Fluasrc%2Fdispatcher.lua;h=d22ae8418693dc184d896b3cd7ddfa9676e2dfb5;hp=c867579d2efac9cd221013123b37f4674a4fddd1;hb=271bfb4725a0af548c8b34c962b287efcf42ba4a;hpb=f5c117f0675ae63d39a93916b05dd378f11dc958;ds=sidebyside diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index c867579d2..d22ae8418 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -27,6 +27,7 @@ module("luci.dispatcher", package.seeall) 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 @@ -49,6 +50,8 @@ dispatched = nil built_index = false built_tree = false +-- Fastindex cache +local fi = nil -- Builds a URL function build_url(...) @@ -155,75 +158,20 @@ end 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 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 + built_index = true end -- Creates the dispatching tree from the index