mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 18:12:51 +08:00
⛄ Sync 2026-09-23 11:01:39
This commit is contained in:
1 parent
a8c6f9b0fc
commit
0b87d429f8
9 files changed
+96
-31
No files matched your search
+1
-1
@@ -7,7 +7,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=airconnect
|
||||
PKG_VERSION:=1.12.1
|
||||
PKG_VERSION:=1.12.2
|
||||
PKG_RELEASE=1
|
||||
|
||||
PKG_SOURCE:=AirConnect-$(PKG_VERSION).zip
|
||||
|
||||
+2
-2
@@ -8,8 +8,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=go-ethereum
|
||||
PKG_VERSION:=1.17.5
|
||||
PKG_RELEASE:=9
|
||||
PKG_VERSION:=1.17.6
|
||||
PKG_RELEASE:=10
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/ethereum/go-ethereum/tar.gz/v${PKG_VERSION}?
|
||||
|
||||
@@ -12,7 +12,7 @@ LUCI_DEPENDS:=+luci-base +logd +jsonfilter
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
PKG_VERSION:=0.1.45
|
||||
PKG_RELEASE:=32
|
||||
PKG_RELEASE:=33
|
||||
|
||||
# Reproducible build: honor SOURCE_DATE_EPOCH from the build environment (set by docker-sdk.sh / CI).
|
||||
ifdef SOURCE_DATE_EPOCH
|
||||
|
||||
@@ -97,6 +97,17 @@ function optionNodes(pairs) {
|
||||
return opts;
|
||||
}
|
||||
|
||||
function isIpv4Address(addr) {
|
||||
if (addr.indexOf('.') === -1) return false;
|
||||
|
||||
const octets = addr.split('.');
|
||||
if (octets.length !== 4) return false;
|
||||
for (let i = 0; i < octets.length; i++) {
|
||||
if (!/^\d{1,3}$/.test(octets[i]) || Number(octets[i]) > 255) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
rowLimit: constants.DEFAULT_ROW_LIMIT,
|
||||
fetchMode: constants.DEFAULT_FETCH_MODE,
|
||||
@@ -132,6 +143,7 @@ return view.extend({
|
||||
summaryRowsShown: false,
|
||||
summaryData: null,
|
||||
resolveLoadShed: false,
|
||||
resolveShedUntil: 0,
|
||||
filterInputTimer: null,
|
||||
messageLayout: 'wrap',
|
||||
/* Session-new IDs from the last applied batch; this is not buffer growth. */
|
||||
@@ -209,13 +221,13 @@ return view.extend({
|
||||
const entries = location.hash.substring(1).split('&');
|
||||
const result = [];
|
||||
for (let i = 0; i < entries.length; i++) {
|
||||
const kv = entries[i].split('=');
|
||||
if (kv.length !== 2) continue;
|
||||
const separator = entries[i].indexOf('=');
|
||||
if (separator === -1) continue;
|
||||
let key;
|
||||
let val;
|
||||
try {
|
||||
key = decodeURIComponent(kv[0]);
|
||||
val = decodeURIComponent(kv[1]);
|
||||
key = decodeURIComponent(entries[i].substring(0, separator));
|
||||
val = decodeURIComponent(entries[i].substring(separator + 1));
|
||||
} catch (_e) {
|
||||
continue;
|
||||
}
|
||||
@@ -395,10 +407,22 @@ return view.extend({
|
||||
return constants.DEFAULT_ROW_TINT;
|
||||
},
|
||||
|
||||
readRowTintPalette() {
|
||||
const v = storedValue('fwlive-row-tint-palette', null);
|
||||
if (v === 'accessible') return 'accessible';
|
||||
if (v === 'classic') return 'classic';
|
||||
/* Migrate an enabled legacy mode into the separate palette key. */
|
||||
return this.readRowTint() === 'accessible' ? 'accessible' : 'classic';
|
||||
},
|
||||
|
||||
saveRowTint() {
|
||||
storeValue('fwlive-row-tint', this.rowTint);
|
||||
},
|
||||
|
||||
saveRowTintPalette() {
|
||||
storeValue('fwlive-row-tint-palette', this.rowTintPalette);
|
||||
},
|
||||
|
||||
rowTintPaletteOptions() {
|
||||
return optionNodes([
|
||||
['classic', _('Classic (green/red)')],
|
||||
@@ -433,6 +457,7 @@ return view.extend({
|
||||
|
||||
commitRowTintChange() {
|
||||
this.saveRowTint();
|
||||
this.saveRowTintPalette();
|
||||
this.tintProbeDone = false;
|
||||
this.applyRowTintMode();
|
||||
this.updateRowTintUi();
|
||||
@@ -443,7 +468,10 @@ return view.extend({
|
||||
const v = ev && ev.target ? ev.target.value : 'classic';
|
||||
const pal = v === 'accessible' ? 'accessible' : 'classic';
|
||||
this.rowTintPalette = pal;
|
||||
if (!this.rowTintEnabled()) return;
|
||||
if (!this.rowTintEnabled()) {
|
||||
this.saveRowTintPalette();
|
||||
return;
|
||||
}
|
||||
this.rowTint = pal;
|
||||
this.commitRowTintChange();
|
||||
},
|
||||
@@ -545,9 +573,37 @@ return view.extend({
|
||||
},
|
||||
|
||||
isLikelyIp(addr) {
|
||||
if (!addr) return false;
|
||||
if (typeof addr !== 'string' || !addr) return false;
|
||||
if (isIpv4Address(addr)) return true;
|
||||
if (!addr.includes(':') || !/^[\da-f:.]+$/i.test(addr) || addr.includes(':::'))
|
||||
return false;
|
||||
|
||||
return /^[\da-fA-F:.]+$/.test(addr);
|
||||
const compression = addr.indexOf('::');
|
||||
if (compression !== -1 && addr.indexOf('::', compression + 2) !== -1) return false;
|
||||
/* A stray leading/trailing colon is not part of a single `::`. */
|
||||
if (addr[0] === ':' && addr[1] !== ':') return false;
|
||||
if (addr[addr.length - 1] === ':' && addr[addr.length - 2] !== ':') return false;
|
||||
|
||||
let groups;
|
||||
let embeddedIpv4 = false;
|
||||
if (addr.includes('.')) {
|
||||
const lastColon = addr.lastIndexOf(':');
|
||||
if (lastColon === -1 || !isIpv4Address(addr.substring(lastColon + 1))) return false;
|
||||
groups = addr.substring(0, lastColon).split(':').filter(Boolean);
|
||||
embeddedIpv4 = true;
|
||||
} else {
|
||||
groups = addr.split(':').filter(Boolean);
|
||||
}
|
||||
|
||||
if (
|
||||
groups.some(function (group) {
|
||||
return !/^[\da-f]{1,4}$/i.test(group);
|
||||
})
|
||||
)
|
||||
return false;
|
||||
|
||||
const groupCount = groups.length + (embeddedIpv4 ? 2 : 0);
|
||||
return compression === -1 ? groupCount === 8 : groupCount < 8;
|
||||
},
|
||||
|
||||
activeColumns() {
|
||||
@@ -1537,6 +1593,7 @@ return view.extend({
|
||||
}
|
||||
|
||||
if (wasPaused && !this.tablePaused) {
|
||||
this.pauseBufferLoading = false;
|
||||
this.fillingBuffer = false;
|
||||
this.followLive = true;
|
||||
/* Merge pause buffer with the first live poll — do not replace. */
|
||||
@@ -1561,8 +1618,7 @@ return view.extend({
|
||||
/* Reset flood throttle so Limit changes paint even during ping -A. */
|
||||
this.ensureRenderScheduler().resetBudget();
|
||||
const cancelForce = this.ensureRenderScheduler().forceNextRender();
|
||||
if (!this.tablePaused) this.renderRows(true);
|
||||
else this.updateStatus();
|
||||
this.renderRows(true);
|
||||
const epoch = this.currentPollEpoch();
|
||||
this.requestPoll()
|
||||
.then(() => {
|
||||
@@ -1831,8 +1887,7 @@ return view.extend({
|
||||
this.messageLayout = next;
|
||||
this.saveMessageLayout();
|
||||
this.updateMessageLayoutUi();
|
||||
if (this.tablePaused) this.updateStatus();
|
||||
else this.renderRows(true);
|
||||
this.renderRows(true);
|
||||
},
|
||||
|
||||
renderRows(force) {
|
||||
@@ -2011,8 +2066,10 @@ return view.extend({
|
||||
* cadence state; summary mode can therefore appear while rows are paused
|
||||
* and stays behind the explicit Show rows control. */
|
||||
if (this.tablePaused) this.updateStatus();
|
||||
else if (this.summaryMode) this.renderSummary();
|
||||
else this.scheduleRenderRows();
|
||||
else if (this.summaryMode) {
|
||||
this.renderSummary();
|
||||
this.updateStatus();
|
||||
} else this.scheduleRenderRows();
|
||||
|
||||
try {
|
||||
await this.resolveHostnamesForEntries(this.filteredRows());
|
||||
@@ -2481,7 +2538,7 @@ return view.extend({
|
||||
this.messageLayout = this.readMessageLayout();
|
||||
this.showHostnames = this.readShowHostnames();
|
||||
this.rowTint = this.readRowTint();
|
||||
this.rowTintPalette = this.rowTintEnabled() ? this.rowTint : 'classic';
|
||||
this.rowTintPalette = this.readRowTintPalette();
|
||||
this.hostnameCache = new Map();
|
||||
this.hostnameFailed = new Map();
|
||||
this.resolveGeneration = 0;
|
||||
|
||||
@@ -209,9 +209,11 @@ fwlive_adaptive_write_state() {
|
||||
# Refuse to follow a symlinked state path (same discipline as logging.lock).
|
||||
[ -L "$FWLIVE_ADAPTIVE_STATE_FILE" ] && return 0
|
||||
_tmp="${FWLIVE_ADAPTIVE_STATE_FILE}.tmp.$$"
|
||||
umask 077
|
||||
printf '{"duration_ms":%s,"limit":%s,"bucket":"%s","warm_halved":%s,"shed":%s,"completed_cs":%s}\n' \
|
||||
"$_d" "$_l" "$_b" "$_w" "$_s" "$_c" >"$_tmp" 2>/dev/null || {
|
||||
(
|
||||
umask 077
|
||||
printf '{"duration_ms":%s,"limit":%s,"bucket":"%s","warm_halved":%s,"shed":%s,"completed_cs":%s}\n' \
|
||||
"$_d" "$_l" "$_b" "$_w" "$_s" "$_c" >"$_tmp" 2>/dev/null
|
||||
) || {
|
||||
rm -f "$_tmp"
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -54,7 +54,11 @@ _filter_tmp=$(mktemp "$FILTER_TMP_DIR/fwlive-filter.XXXXXX") || {
|
||||
printf '%s' '{"log":[],"error":"filter_tempfile_failed"}'
|
||||
exit 1
|
||||
}
|
||||
trap 'rm -f "$_filter_tmp"' 0 1 2 3 15
|
||||
trap 'rm -f "$_filter_tmp"' 0
|
||||
trap 'rm -f "$_filter_tmp"; exit 129' 1
|
||||
trap 'rm -f "$_filter_tmp"; exit 130' 2
|
||||
trap 'rm -f "$_filter_tmp"; exit 131' 3
|
||||
trap 'rm -f "$_filter_tmp"; exit 143' 15
|
||||
if ! jsonfilter -e '@.log[*]' >"$_filter_tmp" 2>/dev/null; then
|
||||
printf '%s' '{"log":[],"error":"filter_failed"}'
|
||||
exit 1
|
||||
|
||||
@@ -152,6 +152,8 @@
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
margin-block: auto;
|
||||
/* Override Footstrap's negative SVG container margins to preserve card padding. */
|
||||
margin-inline: 0;
|
||||
}
|
||||
|
||||
.dashboard-donut svg {
|
||||
@@ -474,6 +476,10 @@
|
||||
color: var(--dashboard-text-muted);
|
||||
}
|
||||
|
||||
.dashboard-client-addresses {
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
|
||||
/* ---- Responsive ---- */
|
||||
@media screen and (max-width: 760px) {
|
||||
@@ -506,7 +512,3 @@
|
||||
--dashboard-plot-h: 140px;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard-client-addresses {
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
@@ -250,11 +250,11 @@ return baseclass.extend({
|
||||
},
|
||||
|
||||
clientAddresses(hint) {
|
||||
const ipv4 = L.toArray(hint?.ipaddrs || hint?.ipv4);
|
||||
const ipv4 = L.toArray(hint?.ipaddrs || hint?.ipv4).find(Boolean);
|
||||
const ipv6 = L.toArray(hint?.ip6addrs || hint?.ipv6)
|
||||
.filter(address => !/^fe[89ab][0-9a-f]:/i.test(address));
|
||||
.find(address => address && !/^fe[89ab][0-9a-f]:/i.test(address));
|
||||
|
||||
return Array.from(new Set(ipv4.concat(ipv6).filter(Boolean)));
|
||||
return [ ipv4, ipv6 ].filter(Boolean);
|
||||
},
|
||||
|
||||
renderUpdateData(radios, networks, hosthints) {
|
||||
|
||||
+2
-2
@@ -7,8 +7,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=virtualdog
|
||||
PKG_VERSION:=0.0.4
|
||||
PKG_RELEASE:=4
|
||||
PKG_VERSION:=0.0.5
|
||||
PKG_RELEASE:=5
|
||||
# Point this at the released binary tarball when you publish builds.
|
||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/Carseason/openwrt-packages/releases/download/prebuilt/
|
||||
|
||||
Reference in new issue
Block a user