update 2026-05-13 18:20:55

This commit is contained in:
action committed 2026-05-13 18:20:55 +08:00
1 parent 3a3b6a8680
commit 7f834c9000
7 files changed
+56 -19

No files matched your search

+1 -1
View File
@@ -16,7 +16,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-amlogic
PKG_VERSION:=3.1.310
PKG_VERSION:=3.1.312
PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0 License
@@ -60,9 +60,27 @@ return view.extend({
handleReset: null,
load: function () {
// Fire sync_menu in background (don't block render on it).
callSyncMenu().catch(function () {});
return callAuthor();
// Call sync_menu and wait for it. sync_menu writes menu_install /
// menu_armcpu into UCI and clears the LuCI index cache on the server.
// On first boot from USB the install menu may be missing from the
// browser-side navigation (built before sync_menu ran). After the RPC
// returns we check if the sidebar already has an install link; if not,
// reload once so the browser re-fetches the updated menu tree.
// A URL hash flag (#menu-synced) prevents an infinite reload loop.
const alreadyReloaded = window.location.hash === '#menu-synced';
const syncMenuPromise = callSyncMenu().then(function (res) {
if (alreadyReloaded) return;
if (res && res.show_install === 'yes') {
// Check if the sidebar navigation already contains the install link.
const installLink = document.querySelector('a[href*="amlogic/install"]');
if (!installLink) {
// Server has updated the index cache; reload to pick up new nav.
window.location.replace(window.location.pathname + '#menu-synced');
window.location.reload();
}
}
}).catch(function () {});
return Promise.all([callAuthor(), syncMenuPromise]).then(function (r) { return r[0]; });
},
render: function (authorUrl) {
@@ -69,7 +69,7 @@ return view.extend({
value: _('Update OpenWrt firmware'), style: 'display:none',
click: ui.createHandlerFn(this, function (ev) {
return doButton(ev.currentTarget,
_('Updating...'), _('Successful Update'), _('Update Failed'),
_('Updating...'), _('Update Failed'),
function () { return callStartUpd('auto@updated@/tmp'); });
})
});
@@ -78,7 +78,7 @@ return view.extend({
value: _('Replace OpenWrt Kernel'), style: 'display:none; margin-left:5px',
click: ui.createHandlerFn(this, function (ev) {
return doButton(ev.currentTarget,
_('Updating...'), _('Successful Update'), _('Update Failed'),
_('Updating...'), _('Update Failed'),
function () { return callStartKnl(); });
})
});
@@ -86,13 +86,23 @@ return view.extend({
const knLog = E('span');
const fwVer = E('span', _('Collecting data...'));
function doButton(btn, busyText, ok, fail, fn) {
// Shared button state machine: disabled -> RPC -> success/fail label.
function doButton(btn, busyText, fail, fn) {
// Shared button state machine: disabled -> RPC -> updating/fail label.
// On success (code==0) the button stays in busyText state and
// remains disabled — the device is about to reboot, so there is
// nothing to restore. Only on failure do we surface an error and
// re-enable the button so the user can retry.
btn.disabled = true; btn.value = busyText;
return Promise.resolve(fn()).then(function (r) {
btn.value = (r && r.code == 0) ? ok : fail;
}).catch(function () { btn.value = fail; })
.finally(function () { btn.disabled = false; });
if (!r || r.code !== 0) {
btn.value = fail;
btn.disabled = false;
}
// code == 0 → keep busyText + disabled (update in progress)
}).catch(function () {
btn.value = fail;
btn.disabled = false;
});
}
function refreshList() {
@@ -752,7 +752,8 @@ function m_sync_menu() {
const show_armcpu = (index(p, 'qemu') < 0) ? 'yes' : 'no';
shcall('uci -q set amlogic.config.menu_install=' + shq(show_install) +
' && uci -q set amlogic.config.menu_armcpu=' + shq(show_armcpu) +
' && uci commit amlogic');
' && uci commit amlogic' +
' && rm -f /tmp/luci-indexcache* && rm -rf /tmp/luci-modulecache/*');
return { code: 0, show_install, show_armcpu };
}
@@ -775,6 +775,9 @@ function gen_config_server(node)
config.outbounds[index][k] = nil
end
end
if value.protocol == "freedom" and api.compare_versions(xray_version, "<", "26.5.3") then -- Todo is to remove it
value.settings = nil
end
end
return config
@@ -1245,9 +1248,9 @@ function gen_config(var)
interface = node.iface
}
},
settings = {
settings = (api.compare_versions(xray_version, ">", "26.4.25")) and { -- Todo: Remove version check
finalRules = {{ action = "allow" }}
}
} or nil
}
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.iface))
end
@@ -2023,7 +2026,12 @@ function gen_proto_config(var)
-- 额外传出连接
table.insert(outbounds, {
protocol = "freedom", tag = "direct", settings = {finalRules = {{ action = "allow" }}}, sockopt = {mark = 255}
protocol = "freedom",
tag = "direct",
settings = (api.compare_versions(xray_version, ">", "26.4.25")) and { -- Todo: Remove version check
finalRules = {{ action = "allow" }}
} or nil,
sockopt = {mark = 255}
})
local config = {
+2 -2
View File
@@ -7,12 +7,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=qt6base
PKG_VERSION:=6.11.0
PKG_VERSION:=6.11.1
PKG_RELEASE:=1
PKG_SOURCE:=qtbase-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/qt/qtbase/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=92c107e3340661da5fca50739f83669216914c21ae43519296267b63f0b97a81
PKG_HASH:=e20852bd45cdef5da5175f3634e285e03e2be7ca437f3d2b7e1a2af7321bca7a
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/qtbase-$(PKG_VERSION)
PKG_BUILD_DIR:=$(BUILD_DIR)/qtbase-$(PKG_VERSION)
+2 -2
View File
@@ -7,12 +7,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=qt6tools
PKG_VERSION:=6.11.0
PKG_VERSION:=6.11.1
PKG_RELEASE:=1
PKG_SOURCE:=qttools-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/qt/qttools/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=eebd01263cde5e6d2bbc0266a622fa0ea7da3f01a3a44497340002d7fff29059
PKG_HASH:=3b4df61a3941f937c24afda66bdd7e1cfe877eb467e61ac897e97bca3ea7347e
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/qttools-$(PKG_VERSION)