small-package/luci-app-runmynas/luasrc/controller/runmynas.lua

175 lines
4.7 KiB
Lua
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local util = require "luci.util"
local http = require "luci.http"
local docker = require "luci.model.docker"
local iform = require "luci.iform"
local runmynas_model = require "luci.model.runmynas_disk"
module("luci.controller.runmynas", package.seeall)
function index()
entry({"admin", "services", "runmynas"}, call("redirect_index"), _("RunMyNAS"), 30).dependent = true
entry({"admin", "services", "runmynas", "pages"}, call("runmynas_index")).leaf = true
entry({"admin", "services", "runmynas", "form"}, call("runmynas_form"))
entry({"admin", "services", "runmynas", "submit"}, call("runmynas_submit"))
end
local appname = "runmynas"
local page_index = {"admin", "services", "runmynas", "pages"}
function redirect_index()
http.redirect(luci.dispatcher.build_url(unpack(page_index)))
end
function runmynas_index()
luci.template.render("runmynas/main", {prefix=luci.dispatcher.build_url(unpack(page_index))})
end
function runmynas_form()
local error = ""
local scope = ""
local success = 0
local blocks = runmynas_model.blocks()
local home = runmynas_model.home()
local paths, default_path = runmynas_model.find_paths(blocks, home, "Configs")
local data = get_data(default_path)
local result = {
data = data,
schema = get_schema(data, paths)
}
local response = {
error = error,
scope = scope,
success = success,
result = result,
}
http.prepare_content("application/json")
http.write_json(response)
end
function get_schema(data, paths)
local actions
actions = {
{
name = "build",
text = "运行",
type = "apply",
},
}
local schema = {
actions = actions,
containers = get_containers(data, paths),
description = "自定义你的 iStoreNAS本插件只能运行在 X86 平台,可以去定制其他平台的固件。源码地址:<a href=\"https://github.com/linkease/iStoreNAS\" target=\"_blank\">https://github.com/linkease/iStoreNAS</a>",
title = "RunMyNAS"
}
return schema
end
function get_containers(data, paths)
local containers = {
main_container(data, paths)
}
return containers
end
function main_container(data, paths)
local names = {}
for k, v in pairs(paths) do
names[k] = v
end
local main_c2 = {
properties = {
{
name = "download",
required = true,
title = "源码下载",
type = "string",
enum = {"github", "koolcenter"},
enumNames = {"Github", "Koolcenter"}
},
{
name = "target",
required = true,
title = "平台",
type = "string",
enum = {"x86_64", "rk35xx", "rk33xx"},
enumNames = {"x86_64", "rk35xx", "rk33xx"}
},
{
name = "path",
required = true,
title = "运行路径",
type = "string",
enum = paths,
enumNames = names
},
},
description = "请选择合适的平台运行:",
title = "运行操作"
}
return main_c2
end
function get_data(default_path)
local uci = require "luci.model.uci".cursor()
local target = uci:get_first(appname, appname, "target", "x86_64")
local download = uci:get_first(appname, appname, "download", "github")
local path = uci:get_first(appname, appname, "path", default_path)
local data = {
target = target,
download = download,
path = path,
}
return data
end
function runmynas_submit()
local error = ""
local scope = ""
local success = 0
local result
local jsonc = require "luci.jsonc"
local json_parse = jsonc.parse
local content = http.content()
local req = json_parse(content)
result = runmynas(req)
http.prepare_content("application/json")
local resp = {
error = error,
scope = scope,
success = success,
result = result,
}
http.write_json(resp)
end
function runmynas(req)
local download = req["download"]
local target = req["target"]
local path = req["path"]
-- save config
local uci = require "luci.model.uci".cursor()
uci:tset(appname, "@"..appname.."[0]", {
target = target or "x86_64",
download = download or "github",
path = path,
})
uci:save(appname)
uci:commit(appname)
local exec_cmd = string.format("/usr/libexec/istorec/runmynas.sh %s", req["$apply"])
exec_cmd = "/etc/init.d/tasks task_add runmynas " .. luci.util.shellquote(exec_cmd)
os.execute(exec_cmd .. " >/dev/null 2>&1")
local result = {
async = true,
async_state = appname
}
return result
end