* luci/libs: move upload dispatching from dispatcher to cbi.load()
This commit is contained in:
parent
251502e2cd
commit
c0b2cda50e
2 changed files with 54 additions and 58 deletions
|
@ -52,6 +52,7 @@ function load(cbimap, ...)
|
|||
require("luci.config")
|
||||
require("luci.util")
|
||||
|
||||
local upldir = "/lib/uci/upload/"
|
||||
local cbidir = luci.util.libpath() .. "/model/cbi/"
|
||||
local func, err = loadfile(cbimap) or loadfile(cbidir..cbimap..".lua")
|
||||
assert(func, err)
|
||||
|
@ -70,7 +71,9 @@ function load(cbimap, ...)
|
|||
return rawget(tbl, key) or _M[key] or _G[key]
|
||||
end}))
|
||||
|
||||
local maps = {func()}
|
||||
local maps = { func() }
|
||||
local uploads = { }
|
||||
local has_upload = false
|
||||
|
||||
for i, map in ipairs(maps) do
|
||||
if not instanceof(map, Node) then
|
||||
|
@ -78,9 +81,59 @@ function load(cbimap, ...)
|
|||
return nil
|
||||
else
|
||||
map:prepare()
|
||||
if map.upload_fields then
|
||||
has_upload = true
|
||||
for _, field in ipairs(map.upload_fields) do
|
||||
uploads[
|
||||
field.config .. '.' ..
|
||||
field.section.sectiontype .. '.' ..
|
||||
field.option
|
||||
] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if has_upload then
|
||||
local uci = luci.model.uci.cursor()
|
||||
local prm = luci.http.context.request.message.params
|
||||
local fd, cbid
|
||||
|
||||
luci.http.setfilehandler(
|
||||
function( field, chunk, eof )
|
||||
if not field then return end
|
||||
if field.name and not cbid then
|
||||
local c, s, o = field.name:gmatch(
|
||||
"cbid%.([^%.]+)%.([^%.]+)%.([^%.]+)"
|
||||
)()
|
||||
|
||||
if c and s and o then
|
||||
local t = uci:get( c, s )
|
||||
if t and uploads[c.."."..t.."."..o] then
|
||||
local path = upldir .. field.name
|
||||
fd = io.open(path, "w")
|
||||
if fd then
|
||||
cbid = field.name
|
||||
prm[cbid] = path
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if field.name == cbid and fd then
|
||||
io.stderr:write("*** CHUNK:"..tostring(#chunk).." ***\n")
|
||||
fd:write(chunk)
|
||||
end
|
||||
|
||||
if eof and fd then
|
||||
fd:close()
|
||||
fd = nil
|
||||
cbid = nil
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
return maps
|
||||
end
|
||||
|
||||
|
|
|
@ -466,63 +466,6 @@ function cbi(model)
|
|||
|
||||
maps = luci.cbi.load(model, ...)
|
||||
|
||||
local uploads = { }
|
||||
local has_upload = false
|
||||
|
||||
for _, map in ipairs(maps) do
|
||||
if map.upload_fields then
|
||||
has_upload = true
|
||||
for _, field in ipairs(map.upload_fields) do
|
||||
uploads[
|
||||
field.config .. '.' ..
|
||||
field.section.sectiontype .. '.' ..
|
||||
field.option
|
||||
] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if has_upload then
|
||||
local uci = luci.model.uci.cursor()
|
||||
local prm = luci.http.context.request.message.params
|
||||
local fd, cbid
|
||||
|
||||
luci.http.setfilehandler(
|
||||
function( field, chunk, eof )
|
||||
if not field then return end
|
||||
if field.name and not cbid then
|
||||
local c, s, o = field.name:gmatch(
|
||||
"cbid%.([^%.]+)%.([^%.]+)%.([^%.]+)"
|
||||
)()
|
||||
|
||||
if c and s and o then
|
||||
local t = uci:get( c, s )
|
||||
if t and uploads[c.."."..t.."."..o] then
|
||||
local path = "/lib/uci/upload/"..field.name
|
||||
fd = io.open(path, "w")
|
||||
if fd then
|
||||
cbid = field.name
|
||||
prm[cbid] = path
|
||||
-- else
|
||||
-- io.stderr:write("E: " .. err .. "\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if field.name == cbid and fd then
|
||||
fd:write(chunk)
|
||||
end
|
||||
|
||||
if eof and fd then
|
||||
fd:close()
|
||||
fd = nil
|
||||
cbid = nil
|
||||
end
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
for i, res in ipairs(maps) do
|
||||
res:parse()
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue