From ea7617e5dd6321d017debf0d6cf74f791718466f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 29 Jun 2026 08:46:17 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=95=20Sync=202026-06-29=2008:46:17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- airconnect/Makefile | 2 +- daed/Makefile | 2 +- daed/files/daed.config | 4 +- luci-app-daede/Makefile | 4 +- .../luci-static/resources/view/daede/daed.js | 53 +++++++- luci-app-daede/po/templates/daede.pot | 30 +++++ luci-app-daede/po/zh-cn/daede.po | 30 +++++ luci-app-daede/po/zh_Hans/daede.po | 30 +++++ .../usr/share/luci-app-daede/daed-sub-cron.sh | 38 ++++++ .../share/luci-app-daede/daed-sub-update.sh | 118 ++++++++++++++++++ .../usr/share/rpcd/acl.d/luci-app-daede.json | 5 +- .../root/usr/share/fchomo/generate_server.uc | 8 ++ luci-app-virtualdog/Makefile | 4 +- .../luasrc/controller/virtualdog.lua | 4 +- .../luasrc/model/cbi/virtualdog.lua | 7 -- .../luasrc/model/virtualdog.lua | 7 -- .../view/virtualdog/virtualdog_status.htm | 2 +- luci-app-virtualdog/po/zh-cn/virtualdog.po | 2 - natflow/Makefile | 4 +- torrserver/Makefile | 6 +- 20 files changed, 329 insertions(+), 31 deletions(-) create mode 100755 luci-app-daede/root/usr/share/luci-app-daede/daed-sub-cron.sh create mode 100755 luci-app-daede/root/usr/share/luci-app-daede/daed-sub-update.sh delete mode 100644 luci-app-virtualdog/luasrc/model/virtualdog.lua diff --git a/airconnect/Makefile b/airconnect/Makefile index d181d89b1..2b7cbdc49 100644 --- a/airconnect/Makefile +++ b/airconnect/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=airconnect -PKG_VERSION:=1.9.3 +PKG_VERSION:=1.10.1 PKG_RELEASE=1 PKG_SOURCE:=AirConnect-$(PKG_VERSION).zip diff --git a/daed/Makefile b/daed/Makefile index 78947cd4a..94794e0b4 100644 --- a/daed/Makefile +++ b/daed/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=daed PKG_VERSION:=2026.06.14 -PKG_RELEASE:=13 +PKG_RELEASE:=14 PKG_SOURCE:=daed-src-2026.06.14-4e215048068a.tar.gz PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src diff --git a/daed/files/daed.config b/daed/files/daed.config index ff61f3639..a86f75d4e 100644 --- a/daed/files/daed.config +++ b/daed/files/daed.config @@ -4,4 +4,6 @@ config daed 'config' option listen_addr '0.0.0.0:2023' option log_maxbackups '1' option log_maxsize '5' - + option subscribe_auto_update '0' + option subscribe_update_cycle 'daily' + option subscribe_update_hour '4' diff --git a/luci-app-daede/Makefile b/luci-app-daede/Makefile index a30df03c4..d8c3c69e4 100644 --- a/luci-app-daede/Makefile +++ b/luci-app-daede/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-daede PKG_VERSION:=1.14.7 -PKG_RELEASE:=23 +PKG_RELEASE:=24 PKG_MAINTAINER:=kenzok8 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -80,6 +80,8 @@ define Package/$(PKG_NAME)/install $(INSTALL_BIN) ./root/usr/share/luci-app-daede/config-backup.sh $(1)/usr/share/luci-app-daede/config-backup.sh $(INSTALL_BIN) ./root/usr/share/luci-app-daede/refresh-index.sh $(1)/usr/share/luci-app-daede/refresh-index.sh $(INSTALL_BIN) ./root/usr/share/luci-app-daede/geo-cron.sh $(1)/usr/share/luci-app-daede/geo-cron.sh + $(INSTALL_BIN) ./root/usr/share/luci-app-daede/daed-sub-update.sh $(1)/usr/share/luci-app-daede/daed-sub-update.sh + $(INSTALL_BIN) ./root/usr/share/luci-app-daede/daed-sub-cron.sh $(1)/usr/share/luci-app-daede/daed-sub-cron.sh $(INSTALL_DIR) $(1)/www/cgi-bin $(INSTALL_BIN) ./root/www/cgi-bin/daede-sub $(1)/www/cgi-bin/daede-sub $(INSTALL_BIN) ./root/www/cgi-bin/daede-graphql $(1)/www/cgi-bin/daede-graphql diff --git a/luci-app-daede/htdocs/luci-static/resources/view/daede/daed.js b/luci-app-daede/htdocs/luci-static/resources/view/daede/daed.js index 7ad11d7cb..9662dc4b0 100644 --- a/luci-app-daede/htdocs/luci-static/resources/view/daede/daed.js +++ b/luci-app-daede/htdocs/luci-static/resources/view/daede/daed.js @@ -3,6 +3,7 @@ 'use strict'; 'require baseclass'; 'require form'; +'require fs'; 'require uci'; 'require view.daede.widgets as widgets'; @@ -19,6 +20,31 @@ function renderDaedSettings() { o.default = '0.0.0.0:2023'; o.rmempty = false; + o = s.option(form.Value, 'dashboard_username', _('daed Username'), + _('Used by LuCI to update daed subscriptions through GraphQL. It does not change the daed Web login account.')); + o.placeholder = 'admin'; + o.rmempty = false; + + o = s.option(form.Value, 'dashboard_password', _('daed Password')); + o.password = true; + + o = s.option(form.Flag, 'subscribe_auto_update', _('Enable subscription auto-update')); + o.default = '0'; + + o = s.option(form.ListValue, 'subscribe_update_cycle', _('Update Cycle')); + o.value('daily', _('Daily')); + o.value('weekly', _('Weekly')); + o.default = 'daily'; + o.depends('subscribe_auto_update', '1'); + + o = s.option(form.ListValue, 'subscribe_update_hour', _('Update Time')); + for (let h = 0; h < 24; h++) { + const hh = ('0' + h).slice(-2); + o.value(String(h), hh + ':00'); + } + o.default = '4'; + o.depends('subscribe_auto_update', '1'); + o = s.option(form.Value, 'log_maxsize', _('Max Log Size (MB)'), _('Rotate the log file once it grows past this many megabytes.')); o.datatype = 'uinteger'; @@ -48,7 +74,24 @@ function renderDaedSettings() { if (statusTimer) clearTimeout(statusTimer); statusTimer = setTimeout(function() { status.classList.remove('show'); }, hold || 3000); } + const save = E('button', { 'class': 'cbi-button cbi-button-positive' }, _('Save and Apply')); + const update = E('button', { 'class': 'cbi-button cbi-button-action' }, _('Update subscriptions now')); + update.addEventListener('click', function(ev) { + ev.preventDefault(); + update.disabled = true; + flash(_('Updating daed subscriptions…')); + fs.exec('/usr/share/luci-app-daede/daed-sub-update.sh', []).then(function(res) { + if (res && res.code !== 0) { + const err = (res.stderr || res.stdout || ('exit ' + res.code)).trim().split('\n')[0]; + flash(_('Subscription update failed: %s').format(err), 'err', 9000); + } else { + flash(_('Subscriptions updated'), 'ok'); + } + }).catch(function(e) { + flash(_('Subscription update failed: %s').format(e.message || e), 'err', 9000); + }).finally(function() { update.disabled = false; }); + }); save.addEventListener('click', function(ev) { ev.preventDefault(); save.disabled = true; @@ -59,6 +102,14 @@ function renderDaedSettings() { return (ch && Object.keys(ch).length) ? uci.apply() : null; }); }) + .then(function() { + const enabled = uci.get('daed', 'config', 'subscribe_auto_update') === '1'; + return fs.exec('/usr/share/luci-app-daede/daed-sub-cron.sh', [ enabled ? 'enable' : 'disable' ]); + }) + .then(function(res) { + if (res && res.code !== 0) + throw new Error((res.stderr || res.stdout || ('exit ' + res.code)).trim()); + }) .then(function() { /* no success popup — the reload is feedback enough */ setTimeout(function() { window.location.reload(); }, 500); @@ -71,7 +122,7 @@ function renderDaedSettings() { }) .finally(function() { save.disabled = false; }); }); - card.appendChild(E('div', { 'class': 'dd-editor-actions' }, [ save, status ])); + card.appendChild(E('div', { 'class': 'dd-editor-actions' }, [ update, save, status ])); return card; }); } diff --git a/luci-app-daede/po/templates/daede.pot b/luci-app-daede/po/templates/daede.pot index 16e04b94a..647c4ee30 100644 --- a/luci-app-daede/po/templates/daede.pot +++ b/luci-app-daede/po/templates/daede.pot @@ -106,6 +106,36 @@ msgstr "" msgid "Number of rotated log files to keep." msgstr "" +msgid "daed Username" +msgstr "" + +msgid "Used by LuCI to update daed subscriptions through GraphQL. It does not change the daed Web login account." +msgstr "" + +msgid "daed Password" +msgstr "" + +msgid "Enable subscription auto-update" +msgstr "" + +msgid "Update Cycle" +msgstr "" + +msgid "Update Time" +msgstr "" + +msgid "Update subscriptions now" +msgstr "" + +msgid "Updating daed subscriptions…" +msgstr "" + +msgid "Subscriptions updated" +msgstr "" + +msgid "Subscription update failed: %s" +msgstr "" + msgid "Log Advanced Settings" msgstr "" diff --git a/luci-app-daede/po/zh-cn/daede.po b/luci-app-daede/po/zh-cn/daede.po index 590cdd8e4..1a9189c7e 100644 --- a/luci-app-daede/po/zh-cn/daede.po +++ b/luci-app-daede/po/zh-cn/daede.po @@ -120,6 +120,36 @@ msgstr "轮转后保留的旧日志文件数。" msgid "Log Settings" msgstr "日志设置" +msgid "daed Username" +msgstr "daed 用户名" + +msgid "Used by LuCI to update daed subscriptions through GraphQL. It does not change the daed Web login account." +msgstr "LuCI 通过 GraphQL 更新 daed 订阅时使用;不会修改 daed Web 的登录账号。" + +msgid "daed Password" +msgstr "daed 密码" + +msgid "Enable subscription auto-update" +msgstr "启用订阅自动更新" + +msgid "Update Cycle" +msgstr "更新周期" + +msgid "Update Time" +msgstr "更新时间" + +msgid "Update subscriptions now" +msgstr "立即更新订阅" + +msgid "Updating daed subscriptions…" +msgstr "正在更新 daed 订阅…" + +msgid "Subscriptions updated" +msgstr "订阅已更新" + +msgid "Subscription update failed: %s" +msgstr "订阅更新失败:%s" + # ---- config.js: dae Settings ---- msgid "dae Parameters" msgstr "dae 参数" diff --git a/luci-app-daede/po/zh_Hans/daede.po b/luci-app-daede/po/zh_Hans/daede.po index 590cdd8e4..1a9189c7e 100644 --- a/luci-app-daede/po/zh_Hans/daede.po +++ b/luci-app-daede/po/zh_Hans/daede.po @@ -120,6 +120,36 @@ msgstr "轮转后保留的旧日志文件数。" msgid "Log Settings" msgstr "日志设置" +msgid "daed Username" +msgstr "daed 用户名" + +msgid "Used by LuCI to update daed subscriptions through GraphQL. It does not change the daed Web login account." +msgstr "LuCI 通过 GraphQL 更新 daed 订阅时使用;不会修改 daed Web 的登录账号。" + +msgid "daed Password" +msgstr "daed 密码" + +msgid "Enable subscription auto-update" +msgstr "启用订阅自动更新" + +msgid "Update Cycle" +msgstr "更新周期" + +msgid "Update Time" +msgstr "更新时间" + +msgid "Update subscriptions now" +msgstr "立即更新订阅" + +msgid "Updating daed subscriptions…" +msgstr "正在更新 daed 订阅…" + +msgid "Subscriptions updated" +msgstr "订阅已更新" + +msgid "Subscription update failed: %s" +msgstr "订阅更新失败:%s" + # ---- config.js: dae Settings ---- msgid "dae Parameters" msgstr "dae 参数" diff --git a/luci-app-daede/root/usr/share/luci-app-daede/daed-sub-cron.sh b/luci-app-daede/root/usr/share/luci-app-daede/daed-sub-cron.sh new file mode 100755 index 000000000..a105defd4 --- /dev/null +++ b/luci-app-daede/root/usr/share/luci-app-daede/daed-sub-cron.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# Manage daed subscription auto-update cron entry. + +ACTION="$1" +CRONTAB="/etc/crontabs/root" +TAG="# luci-app-daede daed-sub-update" +SCRIPT="/usr/share/luci-app-daede/daed-sub-update.sh" + +clean() { + [ -f "$CRONTAB" ] || return 0 + grep -vF -e "$TAG" -e "$SCRIPT" "$CRONTAB" > "$CRONTAB.tmp" 2>/dev/null + mv "$CRONTAB.tmp" "$CRONTAB" +} + +clean + +if [ "$ACTION" = "enable" ] && [ "$(uci -q get daed.config.subscribe_auto_update)" = "1" ]; then + hour="$(uci -q get daed.config.subscribe_update_hour)" + case "$hour" in + ''|*[!0-9]*) hour=4 ;; + esac + [ "$hour" -ge 0 ] 2>/dev/null && [ "$hour" -le 23 ] 2>/dev/null || hour=4 + + case "$(uci -q get daed.config.subscribe_update_cycle)" in + weekly) sched="17 $hour * * 0" ;; + *) sched="17 $hour * * *" ;; + esac + + mkdir -p /etc/crontabs + { + echo "$TAG" + echo "$sched $SCRIPT >/dev/null 2>&1" + } >> "$CRONTAB" + /etc/init.d/cron enable >/dev/null 2>&1 +fi + +/etc/init.d/cron restart >/dev/null 2>&1 +exit 0 diff --git a/luci-app-daede/root/usr/share/luci-app-daede/daed-sub-update.sh b/luci-app-daede/root/usr/share/luci-app-daede/daed-sub-update.sh new file mode 100755 index 000000000..1330aaa19 --- /dev/null +++ b/luci-app-daede/root/usr/share/luci-app-daede/daed-sub-update.sh @@ -0,0 +1,118 @@ +#!/bin/sh +# Update all daed subscriptions through dae-wing GraphQL. + +LOG="/tmp/luci-app-daede.daed-sub-update.log" +LOCK="/tmp/luci-app-daede.daed-sub-update.lock" + +log() { + echo "$(date '+%F %T') $*" >> "$LOG" +} + +fail() { + local code="$1"; shift + log "$*" + echo "$*" >&2 + exit "$code" +} + +json_escape() { + printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g' +} + +cleanup() { + [ -n "$TMPDIR" ] && rm -rf "$TMPDIR" + rmdir "$LOCK" 2>/dev/null +} + +if ! mkdir "$LOCK" 2>/dev/null; then + fail 1 "daed subscription update already running" +fi +trap cleanup EXIT INT TERM + +TMPDIR="$(mktemp -d /tmp/daed-sub-update.XXXXXX)" || exit 1 + +port="$(uci -q get daed.config.listen_addr | sed -n 's/.*:\([0-9]\{1,5\}\)$/\1/p')" +[ -n "$port" ] || port=2023 +endpoint="http://127.0.0.1:$port/graphql" + +username="$(uci -q get daed.config.dashboard_username)" +password="$(uci -q get daed.config.dashboard_password)" + +if [ -z "$username" ] || [ -z "$password" ]; then + fail 2 "missing daed dashboard username or password" +fi + +if ! /bin/pidof daed >/dev/null 2>&1; then + fail 3 "daed is not running" +fi + +post_graphql() { + local body="$1" outfile="$2" auth="$3" + if [ -n "$auth" ]; then + uclient-fetch -q -O "$outfile" \ + --header="Content-Type: application/json" \ + --header="Authorization: Bearer $auth" \ + --post-file="$body" \ + "$endpoint" 2>>"$LOG" + else + uclient-fetch -q -O "$outfile" \ + --header="Content-Type: application/json" \ + --post-file="$body" \ + "$endpoint" 2>>"$LOG" + fi +} + +login_body="$TMPDIR/login.json" +login_resp="$TMPDIR/login.out" +printf '{"query":"query Login($username:String!,$password:String!){token(username:$username,password:$password)}","variables":{"username":"%s","password":"%s"}}' \ + "$(json_escape "$username")" "$(json_escape "$password")" > "$login_body" + +log "starting daed subscription update" +if ! post_graphql "$login_body" "$login_resp"; then + fail 4 "login request failed" +fi + +token="$(sed -n 's/.*"token"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' "$login_resp")" +if [ -z "$token" ]; then + fail 5 "login failed: $(cat "$login_resp" 2>/dev/null)" +fi + +list_body="$TMPDIR/list.json" +list_resp="$TMPDIR/list.out" +printf '{"query":"query Subscriptions{subscriptions{id tag link}}","variables":{}}' > "$list_body" + +if ! post_graphql "$list_body" "$list_resp" "$token"; then + fail 6 "subscription list request failed" +fi +if grep -q '"errors"' "$list_resp"; then + fail 7 "subscription list failed: $(cat "$list_resp" 2>/dev/null)" +fi + +sed 's/"id"/\ +"id"/g' "$list_resp" | sed -n 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' > "$TMPDIR/ids" + +count="$(grep -c . "$TMPDIR/ids" 2>/dev/null || echo 0)" +if [ "${count:-0}" -eq 0 ]; then + log "no daed subscriptions to update" + exit 0 +fi + +ok=0 +fail=0 +while IFS= read -r id || [ -n "$id" ]; do + [ -n "$id" ] || continue + update_body="$TMPDIR/update.json" + update_resp="$TMPDIR/update.out" + printf '{"query":"mutation Update($id:ID!){updateSubscription(id:$id){id tag status}}","variables":{"id":"%s"}}' \ + "$(json_escape "$id")" > "$update_body" + if post_graphql "$update_body" "$update_resp" "$token" && ! grep -q '"errors"' "$update_resp"; then + ok=$((ok + 1)) + log "updated subscription $id" + else + fail=$((fail + 1)) + log "failed subscription $id: $(cat "$update_resp" 2>/dev/null)" + fi +done < "$TMPDIR/ids" + +log "finished daed subscription update: ok=$ok fail=$fail total=$count" +[ "$fail" -eq 0 ] diff --git a/luci-app-daede/root/usr/share/rpcd/acl.d/luci-app-daede.json b/luci-app-daede/root/usr/share/rpcd/acl.d/luci-app-daede.json index 8698a530f..ccdde365c 100644 --- a/luci-app-daede/root/usr/share/rpcd/acl.d/luci-app-daede.json +++ b/luci-app-daede/root/usr/share/rpcd/acl.d/luci-app-daede.json @@ -79,7 +79,10 @@ "/usr/share/luci-app-daede/update-pkg.sh luci-app-daede": [ "exec" ], "/usr/share/luci-app-daede/fetch-clash-yaml.sh *": [ "exec" ], "/usr/share/luci-app-daede/gen-dae-config.sh generate": [ "exec" ], - "/usr/share/luci-app-daede/gen-dae-config.sh import": [ "exec" ] + "/usr/share/luci-app-daede/gen-dae-config.sh import": [ "exec" ], + "/usr/share/luci-app-daede/daed-sub-update.sh": [ "exec" ], + "/usr/share/luci-app-daede/daed-sub-cron.sh enable": [ "exec" ], + "/usr/share/luci-app-daede/daed-sub-cron.sh disable": [ "exec" ] }, "uci": [ "dae", "daed", "daede" ] } diff --git a/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc b/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc index a978eaead..bd288c5a7 100644 --- a/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc +++ b/luci-app-fchomo/root/usr/share/fchomo/generate_server.uc @@ -39,6 +39,14 @@ function parse_users(cfg) { /* Main */ const config = {}; +/* Cache START */ +/* Cache settings */ +config.profile = { + "store-selected": false, + "store-fake-ip": false +}; +/* Cache END */ + /* Inbound START */ config.listeners = []; uci.foreach(uciconf, uciserver, (cfg) => { diff --git a/luci-app-virtualdog/Makefile b/luci-app-virtualdog/Makefile index 9f3973431..7c1ada447 100644 --- a/luci-app-virtualdog/Makefile +++ b/luci-app-virtualdog/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=virtualdog -PKG_VERSION:=1.0.0 -PKG_RELEASE:=1 +PKG_VERSION:=1.0.1 +PKG_RELEASE:=2 LUCI_DEPENDS:=+virtualdog LUCI_MINIFY_CSS:=0 LUCI_MINIFY_JS:=0 diff --git a/luci-app-virtualdog/luasrc/controller/virtualdog.lua b/luci-app-virtualdog/luasrc/controller/virtualdog.lua index 076cc32f6..480508803 100644 --- a/luci-app-virtualdog/luasrc/controller/virtualdog.lua +++ b/luci-app-virtualdog/luasrc/controller/virtualdog.lua @@ -17,9 +17,11 @@ function virtualdog_status() local sys = require "luci.sys" local uci = require "luci.model.uci".cursor() local port = uci:get_first("virtualdog", "virtualdog", "port") or "8080" + local access_token = uci:get_first("virtualdog", "virtualdog", "access_token") or "" local status = { running = (sys.call("pidof virtualdogd >/dev/null") == 0), - port = port + port = port, + access_token = access_token } http.prepare_content("application/json") http.write_json(status) diff --git a/luci-app-virtualdog/luasrc/model/cbi/virtualdog.lua b/luci-app-virtualdog/luasrc/model/cbi/virtualdog.lua index 7106feb97..6fcd28559 100644 --- a/luci-app-virtualdog/luasrc/model/cbi/virtualdog.lua +++ b/luci-app-virtualdog/luasrc/model/cbi/virtualdog.lua @@ -23,12 +23,5 @@ port.description = translate("Port for VirtualDog HTTP server.") local access_token = s:option(Value, "access_token", translate("Access token")) access_token.password = true -access_token.optional = true - -local help = s:option(DummyValue, "_kvm_help", translate("KVM packages")) -help.rawhtml = true -function help.cfgvalue() - return "
" .. virtualdog_model.kvm_help() .. "
" -end return m diff --git a/luci-app-virtualdog/luasrc/model/virtualdog.lua b/luci-app-virtualdog/luasrc/model/virtualdog.lua deleted file mode 100644 index 2e4d5a4de..000000000 --- a/luci-app-virtualdog/luasrc/model/virtualdog.lua +++ /dev/null @@ -1,7 +0,0 @@ -local virtualdog = {} - -virtualdog.kvm_help = function() - return "amd KVM使用 opkg install kmod-kvm-amd\nintel KVM使用 opkg install kmod-kvm-intel" -end - -return virtualdog diff --git a/luci-app-virtualdog/luasrc/view/virtualdog/virtualdog_status.htm b/luci-app-virtualdog/luasrc/view/virtualdog/virtualdog_status.htm index 5faf005f7..6677a3046 100644 --- a/luci-app-virtualdog/luasrc/view/virtualdog/virtualdog_status.htm +++ b/luci-app-virtualdog/luasrc/view/virtualdog/virtualdog_status.htm @@ -7,7 +7,7 @@ XHR.poll(5, '<%=url("admin/services/virtualdog_status")%>', null, function(x, st } if (st.running) { el.innerHTML = '
<%:The VirtualDog service is running.%>' - + "

\" onclick=\"window.open('http://" + window.location.hostname + ":" + st.port + "/')\"/>"; + + "

\" onclick=\"window.open('http://" + window.location.hostname + ":" + st.port + "/auth?token=" + st.access_token + "')\"/>"; } } }); diff --git a/luci-app-virtualdog/po/zh-cn/virtualdog.po b/luci-app-virtualdog/po/zh-cn/virtualdog.po index 32861157f..b3e74c7a2 100644 --- a/luci-app-virtualdog/po/zh-cn/virtualdog.po +++ b/luci-app-virtualdog/po/zh-cn/virtualdog.po @@ -28,8 +28,6 @@ msgstr "VirtualDog HTTP 服务端口。" msgid "Access token" msgstr "访问令牌" -msgid "KVM packages" -msgstr "KVM 依赖" msgid "The VirtualDog service is not running." msgstr "VirtualDog 服务未运行。" diff --git a/natflow/Makefile b/natflow/Makefile index b8b6ec401..bbe7dc0f2 100644 --- a/natflow/Makefile +++ b/natflow/Makefile @@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=natflow PKG_VERSION:=20260531 -PKG_RELEASE:=26 +PKG_RELEASE:=27 PKG_SOURCE:=$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=dab8eb7a37937b4cc848e63003a6a22097098b15 +PKG_SOURCE_VERSION:=2c0dcb153602970189b18bb9ca6cf2bbcca4d992 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_MAINTAINER:=Chen Minqiang PKG_LICENSE:=GPL-2.0 diff --git a/torrserver/Makefile b/torrserver/Makefile index 0a5443eb3..bc72c5aab 100644 --- a/torrserver/Makefile +++ b/torrserver/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=torrserver -PKG_VERSION:=MatriX.141.8 -PKG_RELEASE:=9 +PKG_VERSION:=MatriX.141.9 +PKG_RELEASE:=10 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/YouROK/TorrServer.git -PKG_SOURCE_VERSION:=6e2e02d1be6ac8e75023c5fb3fb4f7c554b6c98c +PKG_SOURCE_VERSION:=9ba8f2a8a37869eda85eb2f1deaac71e89a183af PKG_MIRROR_HASH:=skip PKG_MAINTAINER:=Konstantine Shevlakov