diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua index 69342de0c..f05358ea0 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua @@ -2,9 +2,11 @@ local api = require "luci.passwall.api" local appname = "passwall" m = Map(appname) +m.redirect = api.url("acl") +api.set_apply_on_parse(m) if not arg[1] or not m:get(arg[1]) then - luci.http.redirect(api.url("acl")) + luci.http.redirect(m.redirect) end local fs = api.fs diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua index e2fda69ea..25cd1705a 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua @@ -2,10 +2,11 @@ local api = require "luci.passwall.api" local appname = "passwall" m = Map(appname, translate("Node Config")) -m.redirect = api.url() +m.redirect = api.url("node_list") +api.set_apply_on_parse(m) if not arg[1] or not m:get(arg[1]) then - luci.http.redirect(api.url("node_list")) + luci.http.redirect(m.redirect) end s = m:section(NamedSection, arg[1], "nodes", "") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua index 79da4f05f..b8d67f393 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua @@ -144,6 +144,7 @@ s.sortable = true s.template = "cbi/tblsection" s.extedit = api.url("node_subscribe_config", "%s") function s.create(e, t) + m.no_commit = true local id = TypedSection.create(e, t) luci.http.redirect(e.extedit:format(id)) end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua index d620270f3..7e5c05ee5 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua @@ -1,4 +1,5 @@ local api = require "luci.passwall.api" +local uci = require "luci.model.uci".cursor() local appname = "passwall" m = Map(appname) @@ -8,6 +9,25 @@ if not arg[1] or not m:get(arg[1]) then luci.http.redirect(m.redirect) end +function m.commit_handler(self) + self:del(arg[1], "md5") +end + +if api.is_js_luci() then + m.apply_on_parse = false + m.on_after_apply = function(self) + uci:delete(appname, arg[1], "md5") + uci:commit(appname) + luci.http.write([[ + + ]]) + end +end + local has_ss = api.is_finded("ss-redir") local has_ss_rust = api.is_finded("sslocal") local has_trojan_plus = api.is_finded("trojan-plus") @@ -55,10 +75,6 @@ s = m:section(NamedSection, arg[1]) s.addremove = false s.dynamic = false -function m.commit_handler(self) - self:del(arg[1], "md5") -end - o = s:option(Value, "remark", translate("Subscribe Remark")) o.rmempty = false diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua index a0df0c553..84a4ab269 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua @@ -2,9 +2,11 @@ local api = require "luci.passwall.api" local appname = "passwall" m = Map(appname) +m.redirect = api.url() +api.set_apply_on_parse(m) if not arg[1] or not m:get(arg[1]) then - luci.http.redirect(api.url()) + luci.http.redirect(m.redirect) end local has_singbox = api.finded_com("singbox") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua index 6affd2c7d..a42a0ac5e 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua @@ -4,6 +4,11 @@ local types_dir = "/usr/lib/lua/luci/model/cbi/passwall/server/type/" m = Map("passwall_server", translate("Server Config")) m.redirect = api.url("server") +api.set_apply_on_parse(m) + +if not arg[1] or not m:get(arg[1]) then + luci.http.redirect(m.redirect) +end s = m:section(NamedSection, arg[1], "user", "") s.addremove = false diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua index c1a7a283d..d9ffe502b 100644 --- a/luci-app-passwall/luasrc/passwall/api.lua +++ b/luci-app-passwall/luasrc/passwall/api.lua @@ -38,6 +38,26 @@ function is_old_uci() return sys.call("grep 'require \"uci\"' /usr/lib/lua/luci/model/uci.lua >/dev/null 2>&1") == 0 end +function set_apply_on_parse(map) + if not map then + return + end + if is_js_luci() then + map.apply_on_parse = false + map.on_after_apply = function(self) + if self.redirect then + luci.http.write([[ + + ]]) + end + end + end +end + function uci_save(cursor, config, commit, apply) if is_old_uci() then cursor:save(config)