X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fweb%2Fluasrc%2Fdispatcher.lua;h=d22ae8418693dc184d896b3cd7ddfa9676e2dfb5;hp=e9d3b24d1b8094ac691ff63b164996a12d8bfd3f;hb=271bfb4725a0af548c8b34c962b287efcf42ba4a;hpb=2623e2880c69e5e19891ad06759dcbb8ad62f91b diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index e9d3b24d1..d22ae8418 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -27,6 +27,12 @@ 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 + 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={}} @@ -44,6 +50,8 @@ dispatched = nil built_index = false built_tree = false +-- Fastindex cache +local fi = nil -- Builds a URL function build_url(...) @@ -122,11 +130,12 @@ function dispatch() -- 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 @@ -149,69 +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 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 @@ -225,7 +185,7 @@ function createtree() -- 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