diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 6ec8d1793..56aa3d4b4 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=4.69-1 +PKG_VERSION:=4.69-2 PKG_RELEASE:= PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua index 1656aaac2..4965f2332 100755 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -127,6 +127,9 @@ do set = function(o, server) uci:set(appname, t[".name"], option, server) o.newNodeId = server + end, + delete = function(o) + uci:delete(appname, t[".name"]) end } end) @@ -146,6 +149,9 @@ do set = function(o, server) uci:set(appname, t[".name"], option, server) o.newNodeId = server + end, + delete = function(o) + uci:delete(appname, t[".name"]) end } end) @@ -237,15 +243,19 @@ do for k, e in pairs(rules) do local _node_id = node[e[".name"]] or nil - CONFIG[#CONFIG + 1] = { - log = false, - currentNode = _node_id and uci:get_all(appname, _node_id) or nil, - remarks = "分流" .. e.remarks .. "节点", - set = function(o, server) - uci:set(appname, node_id, e[".name"], server) - o.newNodeId = server - end - } + if _node_id and api.parseURL(_node_id) then + else + CONFIG[#CONFIG + 1] = { + log = false, + currentNode = _node_id and uci:get_all(appname, _node_id) or nil, + remarks = "分流" .. e.remarks .. "节点", + set = function(o, server) + if not server then server = "nil" end + uci:set(appname, node_id, e[".name"], server) + o.newNodeId = server + end + } + end end elseif node.protocol and node.protocol == '_balancing' then local node_id = node[".name"] @@ -297,7 +307,8 @@ do end end else - if v.currentNode == nil then + if v.currentNode == nil and v.delete then + v.delete() CONFIG[k] = nil end end @@ -915,23 +926,13 @@ local function truncate_nodes(add_from) end local function select_node(nodes, config) - local server if config.currentNode then - -- 特别优先级 分流 + 备注 - if config.currentNode.protocol and config.currentNode.protocol == '_shunt' then + local server + -- 特别优先级 cfgid + if config.currentNode[".name"] then for index, node in pairs(nodes) do - if node.remarks == config.currentNode.remarks then - log('更新【' .. config.remarks .. '】分流匹配节点:' .. node.remarks) - server = node[".name"] - break - end - end - end - -- 特别优先级 负载均衡 + 备注 - if config.currentNode.protocol and config.currentNode.protocol == '_balancing' then - for index, node in pairs(nodes) do - if node.remarks == config.currentNode.remarks then - log('更新【' .. config.remarks .. '】负载均衡匹配节点:' .. node.remarks) + if node[".name"] == config.currentNode[".name"] then + log('更新【' .. config.remarks .. '】匹配节点:' .. node.remarks) server = node[".name"] break end @@ -1017,24 +1018,26 @@ local function select_node(nodes, config) end end end - end - -- 还不行 随便找一个 - if not server then - local nodes_table = {} - for k, e in ipairs(api.get_valid_nodes()) do - if e.node_type == "normal" then - nodes_table[#nodes_table + 1] = e + -- 还不行 随便找一个 + if not server then + local nodes_table = {} + for k, e in ipairs(api.get_valid_nodes()) do + if e.node_type == "normal" then + nodes_table[#nodes_table + 1] = e + end + end + if #nodes_table > 0 then + if config.log == nil or config.log == true then + log('【' .. config.remarks .. '】' .. '无法找到最匹配的节点,当前已更换为:' .. nodes_table[1].remarks) + end + server = nodes_table[1][".name"] end end - if #nodes_table > 0 then - if config.log == nil or config.log == true then - log('【' .. config.remarks .. '】' .. '无法找到最匹配的节点,当前已更换为:' .. nodes_table[1].remarks) - end - server = nodes_table[1][".name"] + if server then + config.set(config, server) end - end - if server then - config.set(config, server) + else + config.set(config, nil) end end