175 lines
4.7 KiB
Lua
Executable File
175 lines
4.7 KiB
Lua
Executable File
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
|
||
|