mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-09-10 18:34:18 +08:00
🎁 Sync 2026-08-28 19:05:48
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=1.2.2-r20260804
|
||||
PKG_RELEASE:=5
|
||||
PKG_VERSION:=1.2.3-r20260828
|
||||
PKG_RELEASE:=6
|
||||
|
||||
LUCI_TITLE:=LuCI support for jellyfin
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
@@ -130,7 +130,7 @@ do_install_detail() {
|
||||
local tz="`uci get system.@system[0].zonename | sed 's/ /_/g'`"
|
||||
[ -z "$tz" ] || cmd="$cmd -e TZ=$tz"
|
||||
|
||||
[ -z "$cache" ] || cmd="$cmd -v \"$cache:/config/transcodes\""
|
||||
[ -z "$cache" ] || cmd="$cmd -v \"$cache:/config/transcodes\" -v \"$cache:/cache/transcodes\""
|
||||
[ -z "$media" ] || cmd="$cmd -v \"$media:/media\""
|
||||
|
||||
cmd="$cmd -v /mnt:/mnt"
|
||||
|
||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall
|
||||
PKG_VERSION:=26.8.26
|
||||
PKG_RELEASE:=249
|
||||
PKG_RELEASE:=250
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -2098,7 +2098,7 @@ function gen_config(var)
|
||||
query_type = dns_rule_query_type,
|
||||
server = fakedns_tag,
|
||||
disable_cache = true,
|
||||
rewrite_ttl = tonumber(remote_rewrite_ttl)
|
||||
rewrite_ttl = 30
|
||||
}
|
||||
table.insert(dns.rules, fakedns_dns_rule)
|
||||
end
|
||||
|
||||
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall2
|
||||
PKG_VERSION:=26.8.27
|
||||
PKG_RELEASE:=103
|
||||
PKG_RELEASE:=104
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -2098,10 +2098,10 @@ msgid "Access Control:"
|
||||
msgstr "访问控制:"
|
||||
|
||||
msgid "Add node to the load balancer is directly connected to %s[%s]."
|
||||
msgstr "加入负载均衡的节点到%s[%s]直连完成。"
|
||||
msgstr "加入负载均衡节点IP到%s[%s]直连豁免(防回环)完成。"
|
||||
|
||||
msgid "Add all %s nodes to %s[%s] direct connection complete."
|
||||
msgstr "加入所有%s节点到%s[%s]直连完成。"
|
||||
msgstr "加入所有%s节点服务器IP到%s[%s]直连豁免(防回环)完成。"
|
||||
|
||||
msgid "Starting to load %s firewall rules..."
|
||||
msgstr "开始加载 %s 防火墙规则..."
|
||||
|
||||
@@ -557,6 +557,7 @@ load_acl() {
|
||||
}
|
||||
|
||||
filter_haproxy() {
|
||||
[ "$(config_n_get @global_haproxy[0] balancing_enable 0)" != "1" ] && return
|
||||
for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do
|
||||
local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1)
|
||||
[ -n "$ip" ] && ipset -q add $IPSET_VPS $ip
|
||||
@@ -565,10 +566,16 @@ filter_haproxy() {
|
||||
}
|
||||
|
||||
filter_vpsip() {
|
||||
uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPS &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R
|
||||
#log 1 "$(i18n "Add all %s nodes to %s[%s] direct connection complete." "IPv4" "ipset" "${$IPSET_VPS}")"
|
||||
uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPS6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R
|
||||
#log 1 "$(i18n "Add all %s nodes to %s[%s] direct connection complete." "IPv6" "ipset" "${$IPSET_VPS6}")"
|
||||
local ipv4_addrs=$(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$")
|
||||
[ -n "$ipv4_addrs" ] && {
|
||||
echo "$ipv4_addrs" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPS &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R
|
||||
log 1 "$(i18n "Add all %s nodes to %s[%s] direct connection complete." "IPv4" "ipset" "${IPSET_VPS}")"
|
||||
}
|
||||
local ipv6_addrs=$(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}")
|
||||
[ -n "$ipv6_addrs" ] && {
|
||||
echo "$ipv6_addrs" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPS6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R
|
||||
log 1 "$(i18n "Add all %s nodes to %s[%s] direct connection complete." "IPv6" "ipset" "${IPSET_VPS6}")"
|
||||
}
|
||||
}
|
||||
|
||||
filter_server_port() {
|
||||
|
||||
@@ -585,6 +585,7 @@ load_acl() {
|
||||
}
|
||||
|
||||
filter_haproxy() {
|
||||
[ "$(config_n_get @global_haproxy[0] balancing_enable 0)" != "1" ] && return
|
||||
for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do
|
||||
get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1
|
||||
done | insert_nftset $NFTSET_VPS "-1"
|
||||
@@ -602,10 +603,16 @@ filter_vps_addr() {
|
||||
}
|
||||
|
||||
filter_vpsip() {
|
||||
uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$" | insert_nftset $NFTSET_VPS "-1"
|
||||
#log 1 "$(i18n "Add all %s nodes to %s[%s] direct connection complete." "IPv4" "nftset" "${$NFTSET_VPS}")"
|
||||
uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | insert_nftset $NFTSET_VPS6 "-1"
|
||||
#log 1 "$(i18n "Add all %s nodes to %s[%s] direct connection complete." "IPv6" "nftset" "${$NFTSET_VPS6}")"
|
||||
local ipv4_addrs=$(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$")
|
||||
[ -n "$ipv4_addrs" ] && {
|
||||
echo "$ipv4_addrs" | insert_nftset $NFTSET_VPS "-1"
|
||||
log_i18n 1 "Add all %s nodes to %s[%s] direct connection complete." "IPv4" "nftset" "${NFTSET_VPS}"
|
||||
}
|
||||
local ipv6_addrs=$(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}")
|
||||
[ -n "$ipv6_addrs" ] && {
|
||||
echo "$ipv6_addrs" | insert_nftset $NFTSET_VPS6 "-1"
|
||||
log_i18n 1 "Add all %s nodes to %s[%s] direct connection complete." "IPv6" "nftset" "${NFTSET_VPS6}"
|
||||
}
|
||||
}
|
||||
|
||||
filter_server_port() {
|
||||
|
||||
@@ -11,8 +11,8 @@ LUCI_DEPENDS:=+luci-lib-xterm +taskd
|
||||
LUCI_EXTRA_DEPENDS:=taskd (>=1.0.3)
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
PKG_VERSION:=1.0.25
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=1.0.26
|
||||
PKG_RELEASE:=2
|
||||
PKG_MAINTAINER:=jjm2473 <jjm2473@gmail.com>
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
@@ -48,3 +48,6 @@ msgstr "任务执行失败!"
|
||||
|
||||
msgid "Click the button in the upper right corner of the dialog box to close it, or click here to view the log"
|
||||
msgstr "点击对话框右上角按钮关闭,或者点此查看日志"
|
||||
|
||||
msgid "Upgrade"
|
||||
msgstr "升级"
|
||||
|
||||
@@ -17,7 +17,7 @@ LUCI_NAME:=luci-theme-footstrap
|
||||
FOOTSTRAP_VERSION?=
|
||||
ifneq ($(FOOTSTRAP_VERSION),)
|
||||
PKG_VERSION:=$(FOOTSTRAP_VERSION)
|
||||
PKG_RELEASE:=39
|
||||
PKG_RELEASE:=40
|
||||
endif
|
||||
|
||||
LUCI_TITLE:=Footstrap Theme
|
||||
|
||||
@@ -774,14 +774,14 @@ const MARK = 'fs-ap'; /* the built form's class, and how mount() knows it is alr
|
||||
const TAB_DEADLINE = 5000;
|
||||
const TAB = 'fs-appearance'; /* the pane's data-tab, which ui.tabs' click handler matches on */
|
||||
|
||||
let _routeObserver = null, _viewObserver = null, _observedView = null, _building = false;
|
||||
let _routeObserver = null, _viewObserver = null, _observedRoot = null, _building = false;
|
||||
|
||||
function onPage() { return (document.body.getAttribute('data-page') || '') === PAGE; }
|
||||
|
||||
function stopWatch() {
|
||||
if (_viewObserver) _viewObserver.disconnect();
|
||||
_viewObserver = null;
|
||||
_observedView = null;
|
||||
_observedRoot = null;
|
||||
}
|
||||
|
||||
/* The stock tab GROUP: the element whose children are the panes, which ui.tabs marks
|
||||
@@ -831,24 +831,20 @@ function tabGroup(view) {
|
||||
*
|
||||
* A map redraw (Save without Apply) rebuilds the group and `ui.tabs` stamps `data-initialized` as
|
||||
* an attribute change that can land after the last childList change, so the observer watches that
|
||||
* attribute too and a miss schedules retries on a widening delay — otherwise the tab is missing
|
||||
* until the next navigation (openwrt/luci#8903). */
|
||||
const RETRIES = [ 0, 60, 150, 300, 600, 1200 ];
|
||||
let _retryTimer = 0, _retryAt = 0;
|
||||
function retryMount() {
|
||||
if (_retryTimer) return;
|
||||
if (_retryAt >= RETRIES.length) return;
|
||||
const delay = RETRIES[_retryAt++];
|
||||
_retryTimer = window.setTimeout(() => { _retryTimer = 0; mount(); }, delay);
|
||||
}
|
||||
|
||||
* attribute too — otherwise the tab is missing until the next navigation (openwrt/luci#8903).
|
||||
*
|
||||
* A ladder of retries on a widening delay shipped beside that watch and is gone: instrumented over
|
||||
* ten sessions on both package managers — a full load, an SPA return, a Save and a Save & Apply —
|
||||
* it mounted the tab zero times, only ever arming a timer that woke to find the work done. The
|
||||
* deadline below could once be seen mounting it, but only because watch() was binding the observer
|
||||
* to a node the router was about to replace; with that fixed the deadline is a diagnostic again. */
|
||||
function mount() {
|
||||
const view = document.getElementById('view');
|
||||
if (!view || !onPage()) return;
|
||||
if (view.querySelector('.' + MARK)) { _retryAt = 0; return; }
|
||||
if (view.querySelector('.' + MARK)) return;
|
||||
if (_building) return;
|
||||
const tabs = tabGroup(view);
|
||||
if (!tabs) { retryMount(); return; }
|
||||
if (!tabs) return; /* not built yet; the observer calls again when it is */
|
||||
_building = true;
|
||||
render()
|
||||
.then((form) => {
|
||||
@@ -882,13 +878,23 @@ function mount() {
|
||||
|
||||
function watch() {
|
||||
const view = document.getElementById('view');
|
||||
if (_viewObserver && _observedView !== view) stopWatch();
|
||||
/* The CONTAINER, by id — not `#view`, which is not the same element for long. A client
|
||||
* navigation builds a fresh one before it is in the document and swaps it in afterwards, while
|
||||
* watch() runs on the `data-page` stamp, which comes first: the node bound here then reported
|
||||
* `isConnected: false` while `#view` and `#maincontent` were both alive, and a Save's redraw
|
||||
* produced four mutation batches that reached no callback at all. `#maincontent` outlives every
|
||||
* swap, so the swap is itself a childList record. Save put the tab back in 250 ms after this,
|
||||
* against 1,750-2,250 ms of waiting for the deadline before it. */
|
||||
const root = document.getElementById('maincontent') || view;
|
||||
if (_viewObserver && _observedRoot !== root) stopWatch();
|
||||
if (_viewObserver || !view || !onPage()) return;
|
||||
_observedView = view;
|
||||
_observedRoot = root;
|
||||
_viewObserver = new MutationObserver(mount);
|
||||
/* `data-initialized` is the moment the group becomes usable, and it does not always come with
|
||||
* a childList change (see retryMount above) */
|
||||
_viewObserver.observe(view, {
|
||||
/* `data-initialized` is when the group becomes usable, and the filter is load-bearing — proven
|
||||
* by staging openwrt/luci#8903 rather than waiting for it: tear the tab, the pane and the
|
||||
* attribute down in one task, restore the attribute ALONE 1,200 ms later, and the tab is back
|
||||
* 4 ms after it. Without the filter it never comes back. No ordinary Save separates the two. */
|
||||
_viewObserver.observe(root, {
|
||||
childList: true, subtree: true,
|
||||
attributes: true, attributeFilter: [ 'data-initialized' ],
|
||||
});
|
||||
@@ -900,13 +906,11 @@ function watch() {
|
||||
* early on every mutation: the stock page renders, nothing throws, and every Appearance axis
|
||||
* is unreachable. */
|
||||
window.setTimeout(() => {
|
||||
/* It asks, it does not repair: with the observer on a node that survives a navigation the
|
||||
* repair this used to attempt became unreachable, and the whole matrix passes without it.
|
||||
* A group still found here means the observer is working, so there is nothing to report. */
|
||||
const v = document.getElementById('view');
|
||||
if (!onPage() || !v || v.querySelector('.' + MARK) || _building) return;
|
||||
/* one last attempt: the complaint below claims ui.tabs changed shape, which is only true
|
||||
* if a fresh look still finds no group */
|
||||
_retryAt = 0;
|
||||
mount();
|
||||
if (v.querySelector('.' + MARK) || _building || tabGroup(v)) return;
|
||||
if (!onPage() || !v || v.querySelector('.' + MARK) || _building || tabGroup(v)) return;
|
||||
console.error('footstrap: the Appearance tab could not be attached — this page has tabs, but '
|
||||
+ 'ui.tabs no longer marks them the way fs-appearance.js looks for. Every Appearance axis '
|
||||
+ 'is unreachable until that is updated.');
|
||||
|
||||
@@ -104,16 +104,22 @@ function arrange() {
|
||||
* coalesced and one observer per #view node. The SPA router may replace #view between visits, so
|
||||
* re-attach when the observed node is no longer the current one — a singleton bound to the first
|
||||
* #view would watch a detached tree and the grid would never apply again. */
|
||||
let _observer = null, _observedView = null, _routeObserver = null;
|
||||
let _observer = null, _observedRoot = null, _routeObserver = null;
|
||||
function stopWatch() {
|
||||
if (_observer) _observer.disconnect();
|
||||
_observer = null;
|
||||
_observedView = null;
|
||||
_observedRoot = null;
|
||||
_wrapEl = null; /* the grid belongs to the #view we are leaving */
|
||||
}
|
||||
function watch() {
|
||||
const view = document.getElementById('view');
|
||||
if (_observer && _observedView !== view)
|
||||
/* `#maincontent`, not `#view`: a client navigation builds a fresh `#view` before it is in the
|
||||
* document and swaps it in afterwards, and this runs on the `data-page` stamp, which comes
|
||||
* first — so the observer bound here read `isConnected: false` after one round trip and the
|
||||
* grid stopped being re-arranged on every poll tick, silently, until the next full load. The
|
||||
* shell's column outlives every swap. Same fault, same fix as fs-appearance.js. */
|
||||
const root = document.getElementById('maincontent') || view;
|
||||
if (_observer && _observedRoot !== root)
|
||||
stopWatch();
|
||||
arrange();
|
||||
/* a chrome module is alive on every page, so without the route check an observer would attach
|
||||
@@ -121,11 +127,11 @@ function watch() {
|
||||
if (_observer || !view ||
|
||||
(document.body.getAttribute('data-page') || '') !== 'admin-status-overview')
|
||||
return;
|
||||
_observedView = view;
|
||||
_observedRoot = root;
|
||||
/* one arrange() per frame, however many mutations a poll tick delivers (fit.frame — the
|
||||
* theme's shared coalescer, fs-fit.js) */
|
||||
_observer = new MutationObserver(fit.frame(arrange));
|
||||
_observer.observe(view, { childList: true, subtree: true });
|
||||
_observer.observe(root, { childList: true, subtree: true });
|
||||
}
|
||||
|
||||
/* A chrome module is instantiated once per page load, so it has to notice SPA navigation itself.
|
||||
|
||||
@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=my-default-settings
|
||||
PKG_VERSION:=2
|
||||
PKG_RELEASE:=9
|
||||
PKG_RELEASE:=10
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<% if luci.sys.exec("echo -n `uci -q get base_config.@status[0].links`") ~= "0" then %>
|
||||
<script>
|
||||
var links = document.createElement('div');
|
||||
links.innerHTML ='<table class="table"><tr class="tr"><td class="td left"><a href="https://openwrt.ai/" target="_blank">固件下载与定制</a></td><td class="td left" width="25%"><a href="https://openwrt.ai/fadian/" target="_blank" style="color:orangered">赞助</a></td><td class="td left" width="25%"><a href="https://t.me/opwrt" target="_blank">TG频道</a></td><td class="td left" width="25%"><a href="https://github.com/kiddin9/OpenWrt_x86-r2s-r4s" target="_blank">源码与反馈</a></td></tr></table>';
|
||||
links.innerHTML ='<table class="table"><tr class="tr"><td class="td left"><a href="https://openwrt.ai/" target="_blank">固件下载与定制</a></td><td class="td left" width="25%"><a href="https://openwrt.ai/fadian/" target="_blank" style="color:orangered">赞助</a></td><td class="td left" width="25%"><a href="https://github.com/kiddin9/Kwrt" target="_blank">源码与反馈</a></td><td class="td left" width="25%"><a href="https://t.me/opkwrt" target="_blank">TG交流</a></td></tr></table>';
|
||||
setTimeout(function(){
|
||||
var telegram = document.querySelectorAll(".cbi-section")[0];
|
||||
telegram.appendChild(links);
|
||||
|
||||
Reference in New Issue
Block a user