OXYGEN #1: Added index-marks
[project/luci.git] / modules / admin-full / luasrc / controller / admin / system.lua
index 35eca2a..1afdfc5 100644 (file)
@@ -17,7 +17,7 @@ function index()
        luci.i18n.loadc("admin-core")
        local i18n = luci.i18n.translate
        
-       entry({"admin", "system"}, alias("admin", "system", "system"), i18n("system"), 30)
+       entry({"admin", "system"}, alias("admin", "system", "system"), i18n("system"), 30).index = true
        entry({"admin", "system", "system"}, cbi("admin_system/system"), i18n("system"), 1)
        entry({"admin", "system", "packages"}, call("action_packages"), i18n("a_s_packages"), 10)
        entry({"admin", "system", "packages", "ipkg"}, form("admin_system/ipkg"), i18n("a_s_p_ipkg"))
@@ -181,83 +181,50 @@ end
 
 function action_upgrade()
        require("luci.model.uci")
-       local mtdow = require "luci.sys.mtdow"
-       local writer = mtdow.native_writer()
-       local blocks = writer and writer.blocks
-       local ltn12 = require "luci.ltn12"
-       local uploads = {}
-       local flash = {}
 
        local ret
-       local filepat = "/tmp/mtdblock.%s"
-       local kfile = "/tmp/mtdappend.tgz"
-
-       local keep_avail = false
-       if blocks then
-               for k, block in pairs(blocks) do
-                       if block.write == mtdow.WRITE_COMBINED 
-                       or block.write == mtdow.WRITE_EMULATED then
-                               keep_avail = true
-                       end
-               end
-       end
+       local plat = luci.fs.mtime("/lib/upgrade/platform.sh")
+       local tmpfile = "/tmp/firmware.img"
+       local keep_avail = true
 
+       local file
        luci.http.setfilehandler(
                function(meta, chunk, eof)
-                       if not meta or not blocks or not blocks[meta.name] then
-                               return
-                       end
-                       if not uploads[meta.name] then
-                               uploads[meta.name] = io.open(filepat % meta.name, "w")
+                       if not file then
+                               file = io.open(tmpfile, "w")
                        end
                        if chunk then
-                               uploads[meta.name]:write(chunk)
+                               file:write(chunk)
                        end
                        if eof then
-                               uploads[meta.name]:close()
-                               uploads[meta.name] = filepat % meta.name
+                               file:close()
                        end
                end
        )
 
-       luci.http.formvalue() -- Parse uploads
+       local fname   = luci.http.formvalue("image")
        local keepcfg = keep_avail and luci.http.formvalue("keepcfg")
-       
-       local function _kfile()
-               luci.fs.unlink(kfile)
-               
-               local kpattern = ""
-               local files = luci.model.uci.cursor():get_all("luci", "flash_keep")
-               if files then
-                       kpattern = ""
-                       for k, v in pairs(files) do
-                               if k:sub(1,1) ~= "." and luci.fs.glob(v) then
-                                       kpattern = kpattern .. " '" ..  v .. "'"
-                               end
-                       end
-               end
-               
-               local stat = os.execute("tar czf '%s' %s >/dev/null 2>&1" % {kfile, kpattern})
-               return stat == 0 and kfile
-       end
 
-       for name, file in pairs(uploads) do
-               flash[name] = function()
-                       local imgstream = ltn12.source.file(io.open(file))
-                       return pcall(writer.write_block, writer, 
-                               name, imgstream, keepcfg and _kfile())
+       if plat and fname then
+               ret = function()
+                       return luci.sys.flash(tmpfile, keepcfg and _keep_pattern())
                end
        end
-       
-       local reboot = {}
 
-       luci.template.render("admin_system/upgrade", {blocks=blocks,
-               flash=flash, keep_avail=keep_avail, reboot=reboot})
-       if reboot.exec then
-               local pid = posix.fork()
-               if pid == 0 then
-                       os.execute("sleep 1")
-                       posix.execp("reboot")
+       luci.http.prepare_content("text/html")
+       luci.template.render("admin_system/upgrade", {sysupgrade=plat, ret=ret, keep_avail=keep_avail})
+end
+
+function _keep_pattern()
+       local kpattern = ""
+       local files = luci.model.uci.cursor():get_all("luci", "flash_keep")
+       if files then
+               kpattern = ""
+               for k, v in pairs(files) do
+                       if k:sub(1,1) ~= "." and luci.fs.glob(v) then
+                               kpattern = kpattern .. " " ..  v
+                       end
                end
        end
+       return kpattern
 end