update-10.02

This commit is contained in:
github-actions[bot] 2021-10-02 09:00:13 +08:00
parent 59105b35f4
commit 3918b57218
34 changed files with 155 additions and 163 deletions

View File

@ -20,6 +20,7 @@ PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILES:=LICENSE PKG_LICENSE_FILES:=LICENSE
PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_DEPENDS += BROOK_COMPRESS_UPX:upx/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0

View File

@ -18,6 +18,7 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_HYSTERIA_COMPRESS_UPX CONFIG_HYSTERIA_COMPRESS_UPX
PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_DEPENDS += HYSTERIA_COMPRESS_UPX:upx/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0

View File

@ -413,7 +413,7 @@ local function processData(szType, content)
end end
-- curl -- curl
local function curl(url) local function curl(url)
local stdout=luci.sys.exec('curl --retry 3 -m 10 -LfsA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36" "'..url..'"') local stdout=luci.sys.exec('curl --retry 3 -m 10 -LfskA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36" "'..url..'"')
return trim(stdout) return trim(stdout)
end end

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash PKG_NAME:=luci-app-openclash
PKG_VERSION:=0.43.05 PKG_VERSION:=0.43.06
PKG_RELEASE:=beta PKG_RELEASE:=beta
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash> PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>

View File

@ -283,7 +283,7 @@ end
local function historychecktime() local function historychecktime()
local CONFIG_FILE = uci:get("openclash", "config", "config_path") local CONFIG_FILE = uci:get("openclash", "config", "config_path")
if not CONFIG_FILE then return "0" end if not CONFIG_FILE then return "0" end
local HISTORY_PATH = "/etc/openclash/history/" .. string.sub(luci.sys.exec(string.format("$(basename '%s' .yml) 2>/dev/null || $(basename '%s' .yaml) 2>/dev/null",CONFIG_FILE,CONFIG_FILE)), 1, -2) local HISTORY_PATH = "/etc/openclash/history/" .. fs.filename(fs.basename(CONFIG_FILE))
if not nixio.fs.access(HISTORY_PATH) then if not nixio.fs.access(HISTORY_PATH) then
return "0" return "0"
else else
@ -627,16 +627,6 @@ return string.format("%.1f",e)..a[t]
end end
end end
local function i(e)
local t=0
local a={' KB',' MB',' GB',' TB'}
repeat
e=e/1024
t=t+1
until(e<=1024)
return string.format("%.1f",e)..a[t]
end
function action_toolbar_show_sys() function action_toolbar_show_sys()
local pid = luci.sys.exec("pidof clash |tr -d '\n' 2>/dev/null") local pid = luci.sys.exec("pidof clash |tr -d '\n' 2>/dev/null")
local mem, cpu local mem, cpu
@ -644,7 +634,7 @@ function action_toolbar_show_sys()
mem = tonumber(luci.sys.exec(string.format("cat /proc/%s/status 2>/dev/null |grep -w VmRSS |awk '{print $2}'", pid))) mem = tonumber(luci.sys.exec(string.format("cat /proc/%s/status 2>/dev/null |grep -w VmRSS |awk '{print $2}'", pid)))
cpu = luci.sys.exec(string.format("top -b -n1 |grep %s 2>/dev/null |head -1 |awk '{print $7}' 2>/dev/null", pid)) cpu = luci.sys.exec(string.format("top -b -n1 |grep %s 2>/dev/null |head -1 |awk '{print $7}' 2>/dev/null", pid))
if mem and cpu then if mem and cpu then
mem = i(mem*1024) mem = fs.filesize(mem*1024)
cpu = string.gsub(cpu, "%%\n", "") cpu = string.gsub(cpu, "%%\n", "")
else else
mem = "0 KB" mem = "0 KB"
@ -674,8 +664,8 @@ function action_toolbar_show()
connection = #(connections.connections) connection = #(connections.connections)
up = s(traffic.up) up = s(traffic.up)
down = s(traffic.down) down = s(traffic.down)
up_total = i(connections.uploadTotal) up_total = fs.filesize(connections.uploadTotal)
down_total = i(connections.downloadTotal) down_total = fs.filesize(connections.downloadTotal)
else else
up = "0 B/S" up = "0 B/S"
down = "0 B/S" down = "0 B/S"
@ -686,7 +676,7 @@ function action_toolbar_show()
mem = tonumber(luci.sys.exec(string.format("cat /proc/%s/status 2>/dev/null |grep -w VmRSS |awk '{print $2}'", pid))) mem = tonumber(luci.sys.exec(string.format("cat /proc/%s/status 2>/dev/null |grep -w VmRSS |awk '{print $2}'", pid)))
cpu = luci.sys.exec(string.format("top -b -n1 |grep %s 2>/dev/null |head -1 |awk '{print $7}' 2>/dev/null", pid)) cpu = luci.sys.exec(string.format("top -b -n1 |grep %s 2>/dev/null |head -1 |awk '{print $7}' 2>/dev/null", pid))
if mem and cpu then if mem and cpu then
mem = i(mem*1024) mem = fs.filesize(mem*1024)
cpu = string.gsub(cpu, "%%\n", "") cpu = string.gsub(cpu, "%%\n", "")
else else
mem = "0 KB" mem = "0 KB"

View File

@ -47,7 +47,6 @@ e[t]={}
e[t].num=string.format(t) e[t].num=string.format(t)
e[t].name=fs.basename(o) e[t].name=fs.basename(o)
BACKUP_FILE="/etc/openclash/backup/".. e[t].name BACKUP_FILE="/etc/openclash/backup/".. e[t].name
CONFIG_FILE="/etc/openclash/config/".. e[t].name
if fs.mtime(BACKUP_FILE) then if fs.mtime(BACKUP_FILE) then
e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE)) e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE))
else else
@ -58,7 +57,7 @@ if m.uci:get("openclash", "config", "config_path") and string.sub(m.uci:get("ope
else else
e[t].state=translate("Disable") e[t].state=translate("Disable")
end end
e[t].check=translate(config_check(CONFIG_FILE)) e[t].check=translate(config_check(o))
end end
end end

View File

@ -147,16 +147,6 @@ if HTTP.formvalue("upload") then
end end
end end
local function i(e)
local t=0
local a={' KB',' MB',' GB',' TB'}
repeat
e=e/1024
t=t+1
until(e<=1024)
return string.format("%.1f",e)..a[t]
end
local e,a={} local e,a={}
for t,o in ipairs(fs.glob("/etc/openclash/config/*"))do for t,o in ipairs(fs.glob("/etc/openclash/config/*"))do
a=fs.stat(o) a=fs.stat(o)
@ -164,7 +154,6 @@ if a then
e[t]={} e[t]={}
e[t].name=fs.basename(o) e[t].name=fs.basename(o)
BACKUP_FILE="/etc/openclash/backup/".. e[t].name BACKUP_FILE="/etc/openclash/backup/".. e[t].name
CONFIG_FILE="/etc/openclash/config/".. e[t].name
if fs.mtime(BACKUP_FILE) then if fs.mtime(BACKUP_FILE) then
e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE)) e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE))
else else
@ -175,8 +164,8 @@ if uci:get("openclash", "config", "config_path") and string.sub(uci:get("opencla
else else
e[t].state=translate("Disable") e[t].state=translate("Disable")
end end
e[t].size=i(a.size) e[t].size=fs.filesize(a.size)
e[t].check=translate(config_check(CONFIG_FILE)) e[t].check=translate(config_check(o))
e[t].remove=0 e[t].remove=0
end end
end end
@ -212,6 +201,30 @@ uci:commit("openclash")
HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "config")) HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "config"))
end end
btncp=tb:option(Button,"copy",translate("Copy Config"))
btncp.template="openclash/other_button"
btncp.render=function(o,t,a)
if not e[t] then return false end
if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then
a.display=""
else
a.display="none"
end
o.inputstyle="apply"
Button.render(o,t,a)
end
btncp.write=function(a,t)
local num = 1
while true do
num = num + 1
if not fs.isfile("/etc/openclash/config/"..fs.filename(e[t].name).."("..num..")"..".yaml") then
fs.copy("/etc/openclash/config/"..e[t].name, "/etc/openclash/config/"..fs.filename(e[t].name).."("..num..")"..".yaml")
break
end
end
HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "config"))
end
btndl = tb:option(Button,"download",translate("Download Config")) btndl = tb:option(Button,"download",translate("Download Config"))
btndl.template="openclash/other_button" btndl.template="openclash/other_button"
btndl.render=function(e,t,a) btndl.render=function(e,t,a)

View File

@ -9,16 +9,6 @@ local UTIL = require "luci.util"
local fs = require "luci.openclash" local fs = require "luci.openclash"
local uci = require "luci.model.uci".cursor() local uci = require "luci.model.uci".cursor()
local function i(e)
local t=0
local a={' KB',' MB',' GB',' TB'}
repeat
e=e/1024
t=t+1
until(e<=1024)
return string.format("%.1f",e)..a[t]
end
local g,h={} local g,h={}
for n,m in ipairs(fs.glob("/etc/openclash/game_rules/*"))do for n,m in ipairs(fs.glob("/etc/openclash/game_rules/*"))do
h=fs.stat(m) h=fs.stat(m)
@ -26,7 +16,7 @@ if h then
g[n]={} g[n]={}
g[n].name=fs.basename(m) g[n].name=fs.basename(m)
g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime) g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime)
g[n].size=i(h.size) g[n].size=fs.filesize(h.size)
g[n].remove=0 g[n].remove=0
g[n].enable=false g[n].enable=false
end end

View File

@ -55,8 +55,10 @@ e[t].filename=string.sub(luci.sys.exec(string.format("grep -F '%s,' /usr/share/o
end end
RULE_FILE="/etc/openclash/game_rules/".. e[t].filename RULE_FILE="/etc/openclash/game_rules/".. e[t].filename
if fs.mtime(RULE_FILE) then if fs.mtime(RULE_FILE) then
e[t].size=fs.filesize(fs.stat(RULE_FILE).size)
e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE)) e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE))
else else
e[t].size="/"
e[t].mtime="/" e[t].mtime="/"
end end
if fs.isfile(RULE_FILE) then if fs.isfile(RULE_FILE) then
@ -78,6 +80,7 @@ st=tb:option(DummyValue,"exist",translate("State"))
st.template="openclash/cfg_check" st.template="openclash/cfg_check"
nm=tb:option(DummyValue,"name",translate("Rule Name")) nm=tb:option(DummyValue,"name",translate("Rule Name"))
fm=tb:option(DummyValue,"filename",translate("File Name")) fm=tb:option(DummyValue,"filename",translate("File Name"))
sz=tb:option(DummyValue,"size",translate("Size"))
mt=tb:option(DummyValue,"mtime",translate("Update Time")) mt=tb:option(DummyValue,"mtime",translate("Update Time"))
btnis=tb:option(DummyValue,"filename",translate("Download Rule")) btnis=tb:option(DummyValue,"filename",translate("Download Rule"))

View File

@ -9,16 +9,6 @@ local UTIL = require "luci.util"
local fs = require "luci.openclash" local fs = require "luci.openclash"
local uci = require "luci.model.uci".cursor() local uci = require "luci.model.uci".cursor()
local function i(e)
local t=0
local a={' KB',' MB',' GB',' TB'}
repeat
e=e/1024
t=t+1
until(e<=1024)
return string.format("%.1f",e)..a[t]
end
local p,r={} local p,r={}
for x,y in ipairs(fs.glob("/etc/openclash/proxy_provider/*"))do for x,y in ipairs(fs.glob("/etc/openclash/proxy_provider/*"))do
r=fs.stat(y) r=fs.stat(y)
@ -26,7 +16,7 @@ if r then
p[x]={} p[x]={}
p[x].name=fs.basename(y) p[x].name=fs.basename(y)
p[x].mtime=os.date("%Y-%m-%d %H:%M:%S",r.mtime) p[x].mtime=os.date("%Y-%m-%d %H:%M:%S",r.mtime)
p[x].size=i(r.size) p[x].size=fs.filesize(r.size)
p[x].remove=0 p[x].remove=0
p[x].enable=false p[x].enable=false
end end

View File

@ -9,16 +9,6 @@ local UTIL = require "luci.util"
local fs = require "luci.openclash" local fs = require "luci.openclash"
local uci = require "luci.model.uci".cursor() local uci = require "luci.model.uci".cursor()
local function i(e)
local t=0
local a={' KB',' MB',' GB',' TB'}
repeat
e=e/1024
t=t+1
until(e<=1024)
return string.format("%.1f",e)..a[t]
end
local g,h={} local g,h={}
for n,m in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do for n,m in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do
h=fs.stat(m) h=fs.stat(m)
@ -26,7 +16,7 @@ if h then
g[n]={} g[n]={}
g[n].name=fs.basename(m) g[n].name=fs.basename(m)
g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime) g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime)
g[n].size=i(h.size) g[n].size=fs.filesize(h.size)
g[n].remove=0 g[n].remove=0
g[n].enable=false g[n].enable=false
end end

View File

@ -40,16 +40,6 @@ if not NXFS.access("/tmp/rule_providers_name") then
end end
file = io.open("/tmp/rule_providers_name", "r"); file = io.open("/tmp/rule_providers_name", "r");
local function i(e)
local t=0
local a={' KB',' MB',' GB',' TB'}
repeat
e=e/1024
t=t+1
until(e<=1024)
return string.format("%.1f",e)..a[t]
end
---- Rules List ---- Rules List
local e={},o,t local e={},o,t
if NXFS.access("/tmp/rule_providers_name") then if NXFS.access("/tmp/rule_providers_name") then
@ -69,7 +59,7 @@ e[t].author=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/open
e[t].rule_type=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null",o)),1,-2) e[t].rule_type=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null",o)),1,-2)
RULE_FILE="/etc/openclash/rule_provider/".. e[t].lfilename RULE_FILE="/etc/openclash/rule_provider/".. e[t].lfilename
if fs.mtime(RULE_FILE) then if fs.mtime(RULE_FILE) then
e[t].size=i(fs.stat(RULE_FILE).size) e[t].size=fs.filesize(fs.stat(RULE_FILE).size)
e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE)) e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE))
else else
e[t].size="/" e[t].size="/"

View File

@ -364,6 +364,7 @@ luci.ip.neighbors({ family = 4 }, function(n)
end end
end) end)
if string.len(SYS.exec("/usr/share/openclash/openclash_get_network.lua 'gateway6'")) ~= 0 then
luci.ip.neighbors({ family = 6 }, function(n) luci.ip.neighbors({ family = 6 }, function(n)
if n.mac and n.dest then if n.mac and n.dest then
ip_b:value(n.dest:string()) ip_b:value(n.dest:string())
@ -373,6 +374,7 @@ luci.ip.neighbors({ family = 6 }, function(n)
end end
end) end)
end end
end
o = s:taboption("lan_ac", DynamicList, "wan_ac_black_ips", translate("WAN Bypassed Host List")) o = s:taboption("lan_ac", DynamicList, "wan_ac_black_ips", translate("WAN Bypassed Host List"))
o.datatype = "ipaddr" o.datatype = "ipaddr"
@ -493,7 +495,6 @@ o.description = translate("Custom GEOIP Data URL, Click Button Below To Refresh
o:value("https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb", translate("Alecthw-lite-Version")..translate("(Default mmdb)")) o:value("https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb", translate("Alecthw-lite-Version")..translate("(Default mmdb)"))
o:value("https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/Country.mmdb", translate("Alecthw-Version")..translate("(All Info mmdb)")) o:value("https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/Country.mmdb", translate("Alecthw-Version")..translate("(All Info mmdb)"))
o:value("https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb", translate("Hackl0us-Version")..translate("(Only CN)")) o:value("https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb", translate("Hackl0us-Version")..translate("(Only CN)"))
o:value("https://static.clash.to/GeoIP2/GeoIP2-Country.mmdb", translate("Static.clash.to"))
o:value("https://geolite.clash.dev/Country.mmdb", translate("Geolite.clash.dev")) o:value("https://geolite.clash.dev/Country.mmdb", translate("Geolite.clash.dev"))
o.default = "http://www.ideame.top/mmdb/Country.mmdb" o.default = "http://www.ideame.top/mmdb/Country.mmdb"

View File

@ -31,6 +31,7 @@ local fs = require "nixio.fs"
local nutil = require "nixio.util" local nutil = require "nixio.util"
local type = type local type = type
local string = string
--- LuCI filesystem library. --- LuCI filesystem library.
module "luci.openclash" module "luci.openclash"
@ -242,3 +243,22 @@ unlink = fs.unlink
-- @return String containing the error description on error -- @return String containing the error description on error
-- @return Number containing the os specific errno on error -- @return Number containing the os specific errno on error
readlink = fs.readlink readlink = fs.readlink
function filename(str)
local idx = str:match(".+()%.%w+$")
if(idx) then
return str:sub(1, idx-1)
else
return str
end
end
function filesize(e)
local t=0
local a={' KB',' MB',' GB',' TB'}
repeat
e=e/1024
t=t+1
until(e<=1024)
return string.format("%.1f",e)..a[t]
end

File diff suppressed because one or more lines are too long

View File

@ -118,16 +118,16 @@ ul{
<fieldset class="cbi-section"> <fieldset class="cbi-section">
<table width="100%"> <table width="100%">
<tr> <tr>
<td width="25%" align="center"> <td style="text-align: center; width: 25%">
<input type="button" class="btn cbi-button cbi-button-apply" id="stop_refresh_button" value="<%:Stop Refresh Log%>" onclick=" return stop_refresh() "/> <input type="button" class="btn cbi-button cbi-button-apply" id="stop_refresh_button" value="<%:Stop Refresh Log%>" onclick=" return stop_refresh() "/>
</td> </td>
<td width="25%" align="center"> <td style="text-align: center; width: 25%">
<input type="button" class="btn cbi-button cbi-button-apply" id="start_refresh_button" value="<%:Start Refresh Log%>" onclick=" return start_refresh() "/> <input type="button" class="btn cbi-button cbi-button-apply" id="start_refresh_button" value="<%:Start Refresh Log%>" onclick=" return start_refresh() "/>
</td> </td>
<td width="25%" align="center"> <td style="text-align: center; width: 25%">
<input type="button" class="btn cbi-button cbi-button-apply" id="del_log_button" value="<%:Clean Log%>" style=" display:inline;" onclick=" return del_log() " /> <input type="button" class="btn cbi-button cbi-button-apply" id="del_log_button" value="<%:Clean Log%>" style=" display:inline;" onclick=" return del_log() " />
</td> </td>
<td width="25%" align="center"> <td style="text-align: center; width: 25%">
<input type="button" class="btn cbi-button cbi-button-apply" id="down_log_button" value="<%:Download Log%>" style=" display:inline;" onclick=" return download_log() " /> <input type="button" class="btn cbi-button cbi-button-apply" id="down_log_button" value="<%:Download Log%>" style=" display:inline;" onclick=" return download_log() " />
</td> </td>
</tr> </tr>
@ -141,6 +141,10 @@ var s;
var log_len = 0; var log_len = 0;
var lv = document.getElementById('cbid.openclash.config.clog'); var lv = document.getElementById('cbid.openclash.config.clog');
var cl = document.getElementById('core_log'); var cl = document.getElementById('core_log');
document.getElementById('stop_refresh_button').style.textAlign="center";
document.getElementById('start_refresh_button').style.textAlign="center";
document.getElementById('del_log_button').style.textAlign="center";
document.getElementById('down_log_button').style.textAlign="center";
function get_log_level() { function get_log_level() {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "log_level")%>', null, function(x, status) { XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "log_level")%>', null, function(x, status) {

View File

@ -347,12 +347,12 @@
if (x && x.status == 200 && status.mode) { if (x && x.status == 200 && status.mode) {
if (status.mode == "fake-ip" || status.mode == "fake-ip-tun" || status.mode == "fake-ip-vpn" || status.mode == "fake-ip-mix") if (status.mode == "fake-ip" || status.mode == "fake-ip-tun" || status.mode == "fake-ip-vpn" || status.mode == "fake-ip-mix")
{ {
mode.innerHTML = status.clash ? "<b><font color=green><%:Fake-IP%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;" : '<b><font color=red><%:Not Running%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;'; mode.innerHTML = status.clash ? "<b><font color=green><%:Fake-IP%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;" : '<b><font color=red><%:Not Running%></font></b>';
radio_run_normal.innerHTML = "<%:Enhance%>" radio_run_normal.innerHTML = "<%:Enhance%>"
} }
else if (status.mode == "redir-host" || status.mode == "redir-host-tun" || status.mode == "redir-host-vpn" || status.mode == "redir-host-mix") else if (status.mode == "redir-host" || status.mode == "redir-host-tun" || status.mode == "redir-host-vpn" || status.mode == "redir-host-mix")
{ {
mode.innerHTML = status.clash ? "<b><font color=green><%:Redir-Host%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;" : '<b><font color=red><%:Not Running%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;'; mode.innerHTML = status.clash ? "<b><font color=green><%:Redir-Host%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;" : '<b><font color=red><%:Not Running%></font></b>';
radio_run_normal.innerHTML = "<%:Compatible%>" radio_run_normal.innerHTML = "<%:Compatible%>"
}; };
for (i=0; i<radio_ru.length; i++) { for (i=0; i<radio_ru.length; i++) {

View File

@ -107,6 +107,9 @@ msgstr "应用配置"
msgid "Download Config" msgid "Download Config"
msgstr "下载配置" msgstr "下载配置"
msgid "Copy Config"
msgstr "复制配置"
msgid "Update Config" msgid "Update Config"
msgstr "更新配置" msgstr "更新配置"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -8,8 +8,8 @@
<meta name="description" content="Clash web port" /> <meta name="description" content="Clash web port" />
<!--meta name="external-controller" content="http://secret@example.com:9090"--> <!--meta name="external-controller" content="http://secret@example.com:9090"-->
<title>Clash</title> <title>Clash</title>
<script type="module" crossorigin src="./assets/index.d65730af.js"></script> <script type="module" crossorigin src="./assets/index.65038aa0.js"></script>
<link rel="modulepreload" href="./assets/vendor.fda3e1c9.js"> <link rel="modulepreload" href="./assets/vendor.ca041cc5.js">
<link rel="stylesheet" href="./assets/index.c7a648b5.css"> <link rel="stylesheet" href="./assets/index.c7a648b5.css">
<link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head> <link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
<body> <body>

View File

@ -1 +1 @@
if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let s=Promise.resolve();return r[e]||(s=new Promise((async s=>{if("document"in self){const r=document.createElement("script");r.src=e,document.head.appendChild(r),r.onload=s}else importScripts(e),s()}))),s.then((()=>{if(!r[e])throw new Error(`Module ${e} didnt register its module`);return r[e]}))},s=(s,r)=>{Promise.all(s.map(e)).then((e=>r(1===e.length?e[0]:e)))},r={require:Promise.resolve(s)};self.define=(s,i,t)=>{r[s]||(r[s]=Promise.resolve().then((()=>{let r={};const n={uri:location.origin+s.slice(1)};return Promise.all(i.map((s=>{switch(s){case"exports":return r;case"module":return n;default:return e(s)}}))).then((e=>{const s=t(...e);return r.default||(r.default=s),r}))})))}}define("./sw.js",["./workbox-7ce2238d"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.c7a648b5.css",revision:"9712522fe980e09bf1d10f2564e50812"},{url:"assets/index.d65730af.js",revision:"5b91cc2807ced4cd0d4e82158b155b84"},{url:"assets/vendor.fda3e1c9.js",revision:"6b1dc43821c00cd348bfcbc335c810b9"},{url:"index.html",revision:"2ce0d37060b379fcca47161d6210ac4c"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))})); if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let s=Promise.resolve();return r[e]||(s=new Promise((async s=>{if("document"in self){const r=document.createElement("script");r.src=e,document.head.appendChild(r),r.onload=s}else importScripts(e),s()}))),s.then((()=>{if(!r[e])throw new Error(`Module ${e} didnt register its module`);return r[e]}))},s=(s,r)=>{Promise.all(s.map(e)).then((e=>r(1===e.length?e[0]:e)))},r={require:Promise.resolve(s)};self.define=(s,i,t)=>{r[s]||(r[s]=Promise.resolve().then((()=>{let r={};const n={uri:location.origin+s.slice(1)};return Promise.all(i.map((s=>{switch(s){case"exports":return r;case"module":return n;default:return e(s)}}))).then((e=>{const s=t(...e);return r.default||(r.default=s),r}))})))}}define("./sw.js",["./workbox-0c0655d9"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.65038aa0.js",revision:"11d48371eb55942ea8665cc2b7ebb232"},{url:"assets/index.c7a648b5.css",revision:"9712522fe980e09bf1d10f2564e50812"},{url:"assets/vendor.ca041cc5.js",revision:"dbe6a643df33c4994e57ed615148ec93"},{url:"index.html",revision:"0b0a322dd9fffeb1b556f7d535c3fb38"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -131,8 +131,8 @@ Steam-社区(Beta),Steam.rules
全境封锁2,Tom-clancy's-The-Division.rules,Tom-clancys-The-Division.rules 全境封锁2,Tom-clancy's-The-Division.rules,Tom-clancys-The-Division.rules
未转变者Unturned,Unturned.rules 未转变者Unturned,Unturned.rules
无畏契约,Valorant.rules 无畏契约,Valorant.rules
战争前线,War-thunder-steam.rules 战争雷霆,War-thunder-steam.rules
战争雷霆-steam,Warface.rules 战争前线-steam,Warface.rules
看门狗,Watch-Dogs.rules 看门狗,Watch-Dogs.rules
看门狗2,Watch-Dogs2.rules 看门狗2,Watch-Dogs2.rules
求生意志OL,Will-To-Live-Online.rules 求生意志OL,Will-To-Live-Online.rules

File diff suppressed because one or more lines are too long

View File

@ -27,7 +27,7 @@ define Package/$(PKG_NAME)
endef endef
define Package/$(PKG_NAME)/description define Package/$(PKG_NAME)/description
LuCI Support for udp2raw. LuCI Support for udp2raw-tunnel.
endef endef
define Build/Prepare define Build/Prepare

View File

@ -18,6 +18,7 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_TROJAN_GO_COMPRESS_UPX CONFIG_TROJAN_GO_COMPRESS_UPX
PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_DEPENDS += TROJAN_GO_COMPRESS_UPX:upx/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0

View File

@ -23,6 +23,7 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_V2RAY_CTL_COMPRESS_UPX CONFIG_V2RAY_CTL_COMPRESS_UPX
PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_DEPENDS += (V2RAY_CORE_COMPRESS_UPX||V2RAY_CTL_COMPRESS_UPX):upx/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0

View File

@ -20,7 +20,7 @@ PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=madeye <max.c.lv@gmail.com> PKG_MAINTAINER:=madeye <max.c.lv@gmail.com>
PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DEPENDS:=golang/host upx/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0

View File

@ -24,6 +24,7 @@ PKG_CONFIG_DEPENDS:= \
PKG_BUILD_DIR:=$(BUILD_DIR)/Xray-core-$(PKG_VERSION) PKG_BUILD_DIR:=$(BUILD_DIR)/Xray-core-$(PKG_VERSION)
PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_DEPENDS += XRAY_CORE_COMPRESS_UPX:upx/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0

View File

@ -26,6 +26,7 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_XRAY_PLUGIN_COMPRESS_UPX CONFIG_XRAY_PLUGIN_COMPRESS_UPX
PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_DEPENDS += XRAY_PLUGIN_COMPRESS_UPX:upx/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0