mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-03 23:53:56 +08:00
🎈 Sync 2026-10-28 12:40:08
This commit is contained in:
1 parent
d42296f292
commit
cfb89528fa
20 files changed
+1459
-766
No files matched your search
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=geoview
|
PKG_NAME:=geoview
|
||||||
PKG_VERSION:=0.2.8
|
PKG_VERSION:=0.2.9
|
||||||
PKG_RELEASE:=8
|
PKG_RELEASE:=9
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/snowie2000/geoview/tar.gz/$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/snowie2000/geoview/tar.gz/$(PKG_VERSION)?
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ PKG_NAME:=luci-app-amlogic
|
|||||||
# DD = day (01 = 1st)
|
# DD = day (01 = 1st)
|
||||||
# NN = daily release sequence (01 = first release of the day, 02 = second, ...)
|
# NN = daily release sequence (01 = first release of the day, 02 = second, ...)
|
||||||
# Example below: 26.10.0101 = October 1, 2026, 1st release of the day
|
# Example below: 26.10.0101 = October 1, 2026, 1st release of the day
|
||||||
PKG_VERSION:=26.10.2501
|
PKG_VERSION:=26.10.2801
|
||||||
# PKG_RELEASE marks the LuCI variant; onekey-install.sh relies on it (do NOT bump)
|
# PKG_RELEASE marks the LuCI variant; onekey-install.sh relies on it (do NOT bump)
|
||||||
# 1 = Lua version (lua branch) → tag: 26.10.0101
|
# 1 = Lua version (lua branch) → tag: 26.10.0101
|
||||||
# 2 = JS version (main branch) → tag: 26.10.0101-js
|
# 2 = JS version (main branch) → tag: 26.10.0101-js
|
||||||
PKG_RELEASE:=26
|
PKG_RELEASE:=27
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-2.0 License
|
PKG_LICENSE:=GPL-2.0 License
|
||||||
PKG_MAINTAINER:=ophub <https://github.com/ophub/luci-app-amlogic>
|
PKG_MAINTAINER:=ophub <https://github.com/ophub/luci-app-amlogic>
|
||||||
|
|||||||
@@ -13,9 +13,10 @@
|
|||||||
'require fs';
|
'require fs';
|
||||||
'require view.amlogic.shared as amlogicShared';
|
'require view.amlogic.shared as amlogicShared';
|
||||||
|
|
||||||
// Generate one openwrt_config.tar.gz on the server and return its path so the
|
// Generate one openwrt_config.tar.gz on the server (background) so the
|
||||||
// frontend can stream it back via fs.read_direct.
|
// frontend can stream it back via fs.read_direct once backup_status is done.
|
||||||
const callBackup = rpc.declare({ object: 'luci.amlogic', method: 'backup_create' });
|
const callBackup = rpc.declare({ object: 'luci.amlogic', method: 'backup_create' });
|
||||||
|
const callBackupStatus = rpc.declare({ object: 'luci.amlogic', method: 'backup_status' });
|
||||||
// List existing snapshot names (e.g. etc-000 / etc-001 / etc-202401...).
|
// List existing snapshot names (e.g. etc-000 / etc-001 / etc-202401...).
|
||||||
const callSnapList = rpc.declare({ object: 'luci.amlogic', method: 'snapshot_list',
|
const callSnapList = rpc.declare({ object: 'luci.amlogic', method: 'snapshot_list',
|
||||||
expect: { names: [] } });
|
expect: { names: [] } });
|
||||||
@@ -69,17 +70,11 @@ return view.extend({
|
|||||||
const btn = ev.currentTarget;
|
const btn = ev.currentTarget;
|
||||||
btn.disabled = true;
|
btn.disabled = true;
|
||||||
btn.value = _('Generating...');
|
btn.value = _('Generating...');
|
||||||
// Step 1: ask the server to pack /etc into openwrt_config.tar.gz.
|
downloadStatus.className = 'amlogic-status-err';
|
||||||
return callBackup().then(function (r) {
|
downloadStatus.textContent = '';
|
||||||
if (!r || !r.ok) {
|
|
||||||
downloadStatus.textContent = _("Couldn't open file:") + ' ' + (r ? r.path : '');
|
function downloadFile(path) {
|
||||||
return;
|
return fs.read_direct(path, 'blob').then(function (blob) {
|
||||||
}
|
|
||||||
// Switch to success color before streaming the blob
|
|
||||||
downloadStatus.className = 'amlogic-status-ok';
|
|
||||||
downloadStatus.textContent = _('The file Will download automatically.') + ' ' + r.path;
|
|
||||||
// Fetch the file blob via fs.read_direct and trigger browser download.
|
|
||||||
return fs.read_direct(r.path, 'blob').then(function (blob) {
|
|
||||||
const url = URL.createObjectURL(blob);
|
const url = URL.createObjectURL(blob);
|
||||||
const a = document.createElement('a');
|
const a = document.createElement('a');
|
||||||
a.href = url;
|
a.href = url;
|
||||||
@@ -89,6 +84,27 @@ return view.extend({
|
|||||||
document.body.removeChild(a);
|
document.body.removeChild(a);
|
||||||
setTimeout(function () { URL.revokeObjectURL(url); }, 10000);
|
setTimeout(function () { URL.revokeObjectURL(url); }, 10000);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function pollStatus(deadline) {
|
||||||
|
return callBackupStatus().then(function (s) {
|
||||||
|
if (s && s.status === 'done' && s.size > 0) {
|
||||||
|
downloadStatus.className = 'amlogic-status-ok';
|
||||||
|
downloadStatus.textContent = _('The file Will download automatically.') + ' ' + s.path;
|
||||||
|
return downloadFile(s.path);
|
||||||
|
}
|
||||||
|
if (s && s.status === 'failed')
|
||||||
|
throw new Error(_("Couldn't open file:") + ' ' + (s.path || ''));
|
||||||
|
if (Date.now() > deadline)
|
||||||
|
throw new Error(_('Backup generation timed out.'));
|
||||||
|
return new Promise(function (resolve) { setTimeout(resolve, 1500); })
|
||||||
|
.then(function () { return pollStatus(deadline); });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 1: kick off the background pack job, then poll until done.
|
||||||
|
return callBackup().then(function () {
|
||||||
|
return pollStatus(Date.now() + 300000);
|
||||||
}).catch(function (e) {
|
}).catch(function (e) {
|
||||||
downloadStatus.textContent = _('Create upload file error.') +
|
downloadStatus.textContent = _('Create upload file error.') +
|
||||||
' ' + (e && e.message ? e.message : '');
|
' ' + (e && e.message ? e.message : '');
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
"list_uploads",
|
"list_uploads",
|
||||||
"read_log_tail",
|
"read_log_tail",
|
||||||
"read_log_full",
|
"read_log_full",
|
||||||
"cpu_policies"
|
"cpu_policies",
|
||||||
|
"backup_status"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"uci": [ "amlogic" ],
|
"uci": [ "amlogic" ],
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ const LOG_PLUGIN = LOG_DIR + '/amlogic_check_plugin.log';
|
|||||||
const LOG_KERNEL = LOG_DIR + '/amlogic_check_kernel.log';
|
const LOG_KERNEL = LOG_DIR + '/amlogic_check_kernel.log';
|
||||||
const LOG_FIRMWARE = LOG_DIR + '/amlogic_check_firmware.log';
|
const LOG_FIRMWARE = LOG_DIR + '/amlogic_check_firmware.log';
|
||||||
const LOG_RESCUE = LOG_DIR + '/amlogic_check_rescue.log';
|
const LOG_RESCUE = LOG_DIR + '/amlogic_check_rescue.log';
|
||||||
|
const BACKUP_STATUS = LOG_DIR + '/amlogic_backup_status.log';
|
||||||
const UPLOAD_TMP = '/tmp/upload';
|
const UPLOAD_TMP = '/tmp/upload';
|
||||||
const PKG_NAME = 'luci-app-amlogic';
|
const PKG_NAME = 'luci-app-amlogic';
|
||||||
const BACKUP_LIST = '/etc/amlogic_backup_list.conf';
|
const BACKUP_LIST = '/etc/amlogic_backup_list.conf';
|
||||||
@@ -681,13 +682,29 @@ function m_install_upload(req) {
|
|||||||
return { error: 'unsupported file type' };
|
return { error: 'unsupported file type' };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Kick off openwrt-backup -b in the background; the resulting tarball can be
|
||||||
|
// fetched via fs.read_direct once backup_status reports done. Packing /etc
|
||||||
|
// (docker, openclash rules, etc.) often exceeds the ~20s ubus RPC timeout, so
|
||||||
|
// this must not block the rpcd thread.
|
||||||
function m_backup_create() {
|
function m_backup_create() {
|
||||||
ensure_dirs();
|
ensure_dirs();
|
||||||
shcall('chmod +x /usr/sbin/openwrt-backup');
|
shcall('chmod +x /usr/sbin/openwrt-backup');
|
||||||
shcall('/usr/sbin/openwrt-backup -b > ' + LOG_FILE + ' && sync');
|
writefile(BACKUP_STATUS, 'running\n');
|
||||||
|
shbg('/usr/sbin/openwrt-backup -b > ' + LOG_FILE + ' 2>&1 && sync && ' +
|
||||||
|
'[ -f /.reserved/openwrt_config.tar.gz ] && ' +
|
||||||
|
'echo done > ' + BACKUP_STATUS + ' || echo failed > ' + BACKUP_STATUS);
|
||||||
|
return { code: 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
function m_backup_status() {
|
||||||
|
const t = trim(readfile(BACKUP_STATUS) ?? '');
|
||||||
const path = '/.reserved/openwrt_config.tar.gz';
|
const path = '/.reserved/openwrt_config.tar.gz';
|
||||||
const ok = access(path);
|
const st = stat(path);
|
||||||
return { ok: ok ? true : false, path };
|
return {
|
||||||
|
status: t != '' ? t : 'idle',
|
||||||
|
path,
|
||||||
|
size: (st && st.type == 'file') ? st.size : 0
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function m_save_backup_list(req) {
|
function m_save_backup_list(req) {
|
||||||
@@ -778,6 +795,7 @@ const methods = {
|
|||||||
delete_upload: { args: { name: '' }, call: m_delete_upload },
|
delete_upload: { args: { name: '' }, call: m_delete_upload },
|
||||||
install_upload: { args: { name: '' }, call: m_install_upload },
|
install_upload: { args: { name: '' }, call: m_install_upload },
|
||||||
backup_create: { call: m_backup_create },
|
backup_create: { call: m_backup_create },
|
||||||
|
backup_status: { call: m_backup_status },
|
||||||
save_backup_list:{ args: { content: '' }, call: m_save_backup_list },
|
save_backup_list:{ args: { content: '' }, call: m_save_backup_list },
|
||||||
prime_backup_list:{ call: m_prime_backup_list },
|
prime_backup_list:{ call: m_prime_backup_list },
|
||||||
reload_cpu: { call: m_reload_cpu },
|
reload_cpu: { call: m_reload_cpu },
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-openvpn-plus
|
PKG_NAME:=luci-app-openvpn-plus
|
||||||
PKG_VERSION:=1.0.0
|
PKG_VERSION:=1.0.0
|
||||||
PKG_RELEASE:=7
|
PKG_RELEASE:=8
|
||||||
PKG_LICENSE:=Apache-2.0
|
PKG_LICENSE:=Apache-2.0
|
||||||
PKG_MAINTAINER:=Manfred Jaider <info@masmbit.com>
|
PKG_MAINTAINER:=Manfred Jaider <info@masmbit.com>
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -853,6 +853,7 @@ const openAutomatedPostKeyGenModal = async function (newInstanceItem, appData, w
|
|||||||
yesBtn.style.display = 'none';
|
yesBtn.style.display = 'none';
|
||||||
noBtn.style.display = 'none';
|
noBtn.style.display = 'none';
|
||||||
cancelBtn.style.display = 'none';
|
cancelBtn.style.display = 'none';
|
||||||
|
backupBtn.style.display = 'none';
|
||||||
promptMessageNode.style.display = 'none';
|
promptMessageNode.style.display = 'none';
|
||||||
wizardHelperLayoutBlock.style.display = 'none';
|
wizardHelperLayoutBlock.style.display = 'none';
|
||||||
progressTextArea.style.display = 'block';
|
progressTextArea.style.display = 'block';
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-passwall
|
PKG_NAME:=luci-app-passwall
|
||||||
PKG_VERSION:=26.10.22
|
PKG_VERSION:=26.10.22
|
||||||
PKG_RELEASE:=351
|
PKG_RELEASE:=352
|
||||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
|||||||
@@ -145,7 +145,9 @@ function gen_config(var)
|
|||||||
},
|
},
|
||||||
quic = {
|
quic = {
|
||||||
initStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
initStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
||||||
|
maxStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
||||||
initConnReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
initConnReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
||||||
|
maxConnReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
||||||
maxIdleTimeout = (function(t)
|
maxIdleTimeout = (function(t)
|
||||||
t = tonumber(tostring(t or "30"):match("^%d+"))
|
t = tonumber(tostring(t or "30"):match("^%d+"))
|
||||||
return (t and t >= 4 and t <= 120) and t .. "s" or "30s"
|
return (t and t >= 4 and t <= 120) and t .. "s" or "30s"
|
||||||
|
|||||||
@@ -393,7 +393,9 @@ function gen_outbound(flag, node, tag, proxy_table)
|
|||||||
end)(node.hysteria2_keep_alive_period),
|
end)(node.hysteria2_keep_alive_period),
|
||||||
disablePathMTUDiscovery = node.hysteria2_disable_mtu_discovery == "1",
|
disablePathMTUDiscovery = node.hysteria2_disable_mtu_discovery == "1",
|
||||||
initStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
initStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
||||||
|
maxStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
||||||
initConnectionReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
initConnectionReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
||||||
|
maxConnectionReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
if fragment and fragment_table and ({raw=1, ws=1, httpupgrade=1, grpc=1, xhttp=1})[TP] then
|
if fragment and fragment_table and ({raw=1, ws=1, httpupgrade=1, grpc=1, xhttp=1})[TP] then
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-passwall2
|
PKG_NAME:=luci-app-passwall2
|
||||||
PKG_VERSION:=26.10.20
|
PKG_VERSION:=26.10.20
|
||||||
PKG_RELEASE:=152
|
PKG_RELEASE:=153
|
||||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
|||||||
@@ -248,12 +248,12 @@ function socks_autoswitch_add_node()
|
|||||||
uci_set(id, "enable_autoswitch", "1")
|
uci_set(id, "enable_autoswitch", "1")
|
||||||
local new_list = uci_get(id, "autoswitch_backup_node") or {}
|
local new_list = uci_get(id, "autoswitch_backup_node") or {}
|
||||||
for i = #new_list, 1, -1 do
|
for i = #new_list, 1, -1 do
|
||||||
if (uci_get(new_list[i], "remarks") or ""):find(key) then
|
if (uci_get(new_list[i], "remarks") or ""):find(key, 1, true) then
|
||||||
table.remove(new_list, i)
|
table.remove(new_list, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for k, e in ipairs(api.get_valid_nodes()) do
|
for k, e in ipairs(api.get_valid_nodes()) do
|
||||||
if e.node_type == "normal" and e["remark"]:find(key) then
|
if e.node_type == "normal" and e["remark"]:find(key, 1, true) then
|
||||||
table.insert(new_list, e.id)
|
table.insert(new_list, e.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -270,7 +270,7 @@ function socks_autoswitch_remove_node()
|
|||||||
uci_set(id, "enable_autoswitch", "1")
|
uci_set(id, "enable_autoswitch", "1")
|
||||||
local new_list = uci_get(id, "autoswitch_backup_node") or {}
|
local new_list = uci_get(id, "autoswitch_backup_node") or {}
|
||||||
for i = #new_list, 1, -1 do
|
for i = #new_list, 1, -1 do
|
||||||
if (uci_get(new_list[i], "remarks") or ""):find(key) then
|
if (uci_get(new_list[i], "remarks") or ""):find(key, 1, true) then
|
||||||
table.remove(new_list, i)
|
table.remove(new_list, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1518,11 +1518,6 @@ function to_move(app_name,file)
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local flag = sys.call('busybox pgrep -af "passwall2/.*'.. app_name ..'" >/dev/null')
|
|
||||||
if flag == 0 then
|
|
||||||
sys.call("/etc/init.d/passwall2 stop")
|
|
||||||
end
|
|
||||||
|
|
||||||
local old_app_size = 0
|
local old_app_size = 0
|
||||||
if fs.access(app_path) then
|
if fs.access(app_path) then
|
||||||
old_app_size = get_file_space(app_path)
|
old_app_size = get_file_space(app_path)
|
||||||
@@ -1538,6 +1533,12 @@ function to_move(app_name,file)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Complete preflight before stopping an otherwise working proxy.
|
||||||
|
local flag = sys.call('busybox pgrep -af "passwall2/.*'.. app_name ..'" >/dev/null')
|
||||||
|
if flag == 0 then
|
||||||
|
sys.call("/etc/init.d/passwall2 stop")
|
||||||
|
end
|
||||||
|
|
||||||
result = exec("/bin/mv", { "-f", bin_path, app_path }, nil, command_timeout) == 0
|
result = exec("/bin/mv", { "-f", bin_path, app_path }, nil, command_timeout) == 0
|
||||||
|
|
||||||
sys.call(cmd_rm_tmp)
|
sys.call(cmd_rm_tmp)
|
||||||
|
|||||||
@@ -402,7 +402,9 @@ function gen_outbound(flag, node, tag, proxy_table)
|
|||||||
end)(node.hysteria2_keep_alive_period),
|
end)(node.hysteria2_keep_alive_period),
|
||||||
disablePathMTUDiscovery = node.hysteria2_disable_mtu_discovery == "1",
|
disablePathMTUDiscovery = node.hysteria2_disable_mtu_discovery == "1",
|
||||||
initStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
initStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
||||||
|
maxStreamReceiveWindow = tonumber(node.hysteria2_stream_recv_win) and tonumber(node.hysteria2_stream_recv_win)*1048576 or nil,
|
||||||
initConnectionReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
initConnectionReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
||||||
|
maxConnectionReceiveWindow = tonumber(node.hysteria2_conn_recv_win) and tonumber(node.hysteria2_conn_recv_win)*1048576 or nil,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
if fragment and fragment_table and ({raw=1, ws=1, httpupgrade=1, grpc=1, xhttp=1})[TP] then
|
if fragment and fragment_table and ({raw=1, ws=1, httpupgrade=1, grpc=1, xhttp=1})[TP] then
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ local api = map.api
|
|||||||
function add_node_by_key() {
|
function add_node_by_key() {
|
||||||
var key = prompt("<%:Please enter the node keyword, pay attention to distinguish between spaces, uppercase and lowercase.%>", "");
|
var key = prompt("<%:Please enter the node keyword, pay attention to distinguish between spaces, uppercase and lowercase.%>", "");
|
||||||
if (key) {
|
if (key) {
|
||||||
window.location.href = '<%=api.url("socks_autoswitch_add_node")%>' + "?id=" + socks_id + "&key=" + key;
|
window.location.href = '<%=api.url("socks_autoswitch_add_node")%>' + "?id=" + encodeURIComponent(socks_id) + "&key=" + encodeURIComponent(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function remove_node_by_key() {
|
function remove_node_by_key() {
|
||||||
var key = prompt("<%:Please enter the node keyword, pay attention to distinguish between spaces, uppercase and lowercase.%>", "");
|
var key = prompt("<%:Please enter the node keyword, pay attention to distinguish between spaces, uppercase and lowercase.%>", "");
|
||||||
if (key) {
|
if (key) {
|
||||||
window.location.href = '<%=api.url("socks_autoswitch_remove_node")%>' + "?id=" + socks_id + "&key=" + key;
|
window.location.href = '<%=api.url("socks_autoswitch_remove_node")%>' + "?id=" + encodeURIComponent(socks_id) + "&key=" + encodeURIComponent(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//]]>
|
//]]>
|
||||||
|
|||||||
@@ -30,6 +30,12 @@ const callIwinfoDevices = rpc.declare({
|
|||||||
method: 'devices',
|
method: 'devices',
|
||||||
expect: { devices: [] }
|
expect: { devices: [] }
|
||||||
});
|
});
|
||||||
|
const callIwinfoScanCompat = rpc.declare({
|
||||||
|
object: 'iwinfo',
|
||||||
|
method: 'scan',
|
||||||
|
params: [ 'device' ],
|
||||||
|
expect: { results: [] }
|
||||||
|
});
|
||||||
const callSystemBoard = rpc.declare({
|
const callSystemBoard = rpc.declare({
|
||||||
object: 'system',
|
object: 'system',
|
||||||
method: 'board',
|
method: 'board',
|
||||||
@@ -1271,7 +1277,6 @@ function parseIwPhyMaxWidthMap(stdout) {
|
|||||||
|
|
||||||
const widthHint = rawLine.match(/Supported Channel Width:\s*(.+)$/);
|
const widthHint = rawLine.match(/Supported Channel Width:\s*(.+)$/);
|
||||||
if (widthHint) {
|
if (widthHint) {
|
||||||
let maxWidth = 20;
|
|
||||||
const widths = [];
|
const widths = [];
|
||||||
|
|
||||||
widthHint[1].replace(/\b(20|40|80|160|320)\s*MHz\b/g, function(_, mhz) {
|
widthHint[1].replace(/\b(20|40|80|160|320)\s*MHz\b/g, function(_, mhz) {
|
||||||
@@ -1282,9 +1287,13 @@ function parseIwPhyMaxWidthMap(stdout) {
|
|||||||
widths.push(160);
|
widths.push(160);
|
||||||
|
|
||||||
if (widths.length)
|
if (widths.length)
|
||||||
maxWidth = Math.max.apply(Math, widths);
|
mapping[currentPhy] = Math.max(mapping[currentPhy] || 0, Math.max.apply(Math, widths));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
mapping[currentPhy] = Math.max(mapping[currentPhy] || 0, maxWidth);
|
const heWidth = rawLine.match(/HE(?:\s+(?:RX|TX) MCS and NSS set\s+|)(160|80\+80)(?:\s*MHz|\/5GHz)/);
|
||||||
|
if (heWidth) {
|
||||||
|
mapping[currentPhy] = Math.max(mapping[currentPhy] || 0, 160);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4587,7 +4596,15 @@ return view.extend({
|
|||||||
};
|
};
|
||||||
|
|
||||||
s.handleScanRefresh = function(radioDev, scanCache, table, stop) {
|
s.handleScanRefresh = function(radioDev, scanCache, table, stop) {
|
||||||
return radioDev.getScanList().then(L.bind(function(results) {
|
const radio = radioDev.getName();
|
||||||
|
const scan = isQcaWifiHwtype(uci.get('wireless', radio, 'type'))
|
||||||
|
? loadIwinfoResolver().then(function(resolver) {
|
||||||
|
const target = resolver.aliasMap[radio];
|
||||||
|
return target ? callIwinfoScanCompat(target) : [];
|
||||||
|
})
|
||||||
|
: radioDev.getScanList();
|
||||||
|
|
||||||
|
return scan.then(L.bind(function(results) {
|
||||||
const rows = [];
|
const rows = [];
|
||||||
|
|
||||||
for (let r of results)
|
for (let r of results)
|
||||||
|
|||||||
+2
-2
@@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
|
|
||||||
PKG_NAME:=natflow
|
PKG_NAME:=natflow
|
||||||
PKG_VERSION:=20260930
|
PKG_VERSION:=20260930
|
||||||
PKG_RELEASE:=97
|
PKG_RELEASE:=98
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git
|
PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_VERSION:=551cda85b5b3f8f57d6c43bad271015a773d1c31
|
PKG_SOURCE_VERSION:=95a6e9208c7e7ef6ef75f2f4e6193fdcc72d764c
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||||
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=appfilter
|
PKG_NAME:=appfilter
|
||||||
PKG_VERSION:=7.0.2
|
PKG_VERSION:=7.0.2
|
||||||
PKG_RELEASE:=5
|
PKG_RELEASE:=6
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
7.0.1
|
7.0.2
|
||||||
Reference in new issue
Block a user