Update On Wed Jul 9 20:40:03 CEST 2025

This commit is contained in:
github-action[bot]
2025-07-09 20:40:03 +02:00
parent 5eb156494e
commit 13badb47a6
28 changed files with 255 additions and 172 deletions

1
.github/update.log vendored
View File

@@ -1052,3 +1052,4 @@ Update On Sat Jul 5 20:35:56 CEST 2025
Update On Sun Jul 6 20:36:31 CEST 2025 Update On Sun Jul 6 20:36:31 CEST 2025
Update On Mon Jul 7 20:39:12 CEST 2025 Update On Mon Jul 7 20:39:12 CEST 2025
Update On Tue Jul 8 20:39:34 CEST 2025 Update On Tue Jul 8 20:39:34 CEST 2025
Update On Wed Jul 9 20:39:55 CEST 2025

View File

@@ -32,7 +32,7 @@
"country-emoji": "1.5.6", "country-emoji": "1.5.6",
"dayjs": "1.11.13", "dayjs": "1.11.13",
"framer-motion": "12.16.0", "framer-motion": "12.16.0",
"i18next": "25.3.1", "i18next": "25.3.2",
"jotai": "2.12.5", "jotai": "2.12.5",
"json-schema": "0.4.0", "json-schema": "0.4.0",
"material-react-table": "3.2.1", "material-react-table": "3.2.1",
@@ -87,11 +87,11 @@
"unplugin-auto-import": "19.3.0", "unplugin-auto-import": "19.3.0",
"unplugin-icons": "22.1.0", "unplugin-icons": "22.1.0",
"validator": "13.15.15", "validator": "13.15.15",
"vite": "7.0.2", "vite": "7.0.3",
"vite-plugin-html": "3.2.2", "vite-plugin-html": "3.2.2",
"vite-plugin-sass-dts": "1.3.31", "vite-plugin-sass-dts": "1.3.31",
"vite-plugin-svgr": "4.3.0", "vite-plugin-svgr": "4.3.0",
"vite-tsconfig-paths": "5.1.4", "vite-tsconfig-paths": "5.1.4",
"zod": "3.25.75" "zod": "3.25.76"
} }
} }

View File

@@ -30,7 +30,7 @@
"react-i18next": "15.6.0", "react-i18next": "15.6.0",
"react-use": "17.6.0", "react-use": "17.6.0",
"tailwindcss": "4.1.11", "tailwindcss": "4.1.11",
"vite": "7.0.2", "vite": "7.0.3",
"vite-tsconfig-paths": "5.1.4" "vite-tsconfig-paths": "5.1.4"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -2,10 +2,10 @@
"manifest_version": 1, "manifest_version": 1,
"latest": { "latest": {
"mihomo": "v1.19.11", "mihomo": "v1.19.11",
"mihomo_alpha": "alpha-2b84dd3", "mihomo_alpha": "alpha-ce2675a",
"clash_rs": "v0.8.1", "clash_rs": "v0.8.1",
"clash_premium": "2023-09-05-gdcc8d87", "clash_premium": "2023-09-05-gdcc8d87",
"clash_rs_alpha": "0.8.1-alpha+sha.874c62e" "clash_rs_alpha": "0.8.1-alpha+sha.86171e1"
}, },
"arch_template": { "arch_template": {
"mihomo": { "mihomo": {
@@ -69,5 +69,5 @@
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
} }
}, },
"updated_at": "2025-07-07T22:21:30.028Z" "updated_at": "2025-07-08T22:21:31.499Z"
} }

View File

@@ -108,7 +108,7 @@
"typescript": "5.8.3", "typescript": "5.8.3",
"typescript-eslint": "8.36.0" "typescript-eslint": "8.36.0"
}, },
"packageManager": "pnpm@10.12.4", "packageManager": "pnpm@10.13.1",
"engines": { "engines": {
"node": "22.17.0" "node": "22.17.0"
}, },

View File

@@ -247,7 +247,7 @@ importers:
version: 4.1.11 version: 4.1.11
'@tanstack/router-zod-adapter': '@tanstack/router-zod-adapter':
specifier: 1.81.5 specifier: 1.81.5
version: 1.81.5(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.75) version: 1.81.5(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.76)
'@tauri-apps/api': '@tauri-apps/api':
specifier: 2.5.0 specifier: 2.5.0
version: 2.5.0 version: 2.5.0
@@ -273,8 +273,8 @@ importers:
specifier: 12.16.0 specifier: 12.16.0
version: 12.16.0(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 12.16.0(@emotion/is-prop-valid@1.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
i18next: i18next:
specifier: 25.3.1 specifier: 25.3.2
version: 25.3.1(typescript@5.8.3) version: 25.3.2(typescript@5.8.3)
jotai: jotai:
specifier: 2.12.5 specifier: 2.12.5
version: 2.12.5(@types/react@19.1.8)(react@19.1.0) version: 2.12.5(@types/react@19.1.8)(react@19.1.0)
@@ -307,7 +307,7 @@ importers:
version: 7.6.2(a582b6f7a523f1e20a2297e7a0fb44e0) version: 7.6.2(a582b6f7a523f1e20a2297e7a0fb44e0)
react-i18next: react-i18next:
specifier: 15.6.0 specifier: 15.6.0
version: 15.6.0(i18next@25.3.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) version: 15.6.0(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
react-markdown: react-markdown:
specifier: 10.1.0 specifier: 10.1.0
version: 10.1.0(@types/react@19.1.8)(react@19.1.0) version: 10.1.0(@types/react@19.1.8)(react@19.1.0)
@@ -353,7 +353,7 @@ importers:
version: 1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.125.4)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) version: 1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.125.4)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)
'@tanstack/router-plugin': '@tanstack/router-plugin':
specifier: 1.125.6 specifier: 1.125.6
version: 1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
'@tauri-apps/plugin-clipboard-manager': '@tauri-apps/plugin-clipboard-manager':
specifier: 2.2.2 specifier: 2.2.2
version: 2.2.2 version: 2.2.2
@@ -389,13 +389,13 @@ importers:
version: 13.15.2 version: 13.15.2
'@vitejs/plugin-legacy': '@vitejs/plugin-legacy':
specifier: 7.0.0 specifier: 7.0.0
version: 7.0.0(terser@5.36.0)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 7.0.0(terser@5.36.0)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: 4.6.0 specifier: 4.6.0
version: 4.6.0(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 4.6.0(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
'@vitejs/plugin-react-swc': '@vitejs/plugin-react-swc':
specifier: 3.10.2 specifier: 3.10.2
version: 3.10.2(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 3.10.2(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
change-case: change-case:
specifier: 5.4.4 specifier: 5.4.4
version: 5.4.4 version: 5.4.4
@@ -433,23 +433,23 @@ importers:
specifier: 13.15.15 specifier: 13.15.15
version: 13.15.15 version: 13.15.15
vite: vite:
specifier: 7.0.2 specifier: 7.0.3
version: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) version: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
vite-plugin-html: vite-plugin-html:
specifier: 3.2.2 specifier: 3.2.2
version: 3.2.2(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 3.2.2(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
vite-plugin-sass-dts: vite-plugin-sass-dts:
specifier: 1.3.31 specifier: 1.3.31
version: 1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
vite-plugin-svgr: vite-plugin-svgr:
specifier: 4.3.0 specifier: 4.3.0
version: 4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
vite-tsconfig-paths: vite-tsconfig-paths:
specifier: 5.1.4 specifier: 5.1.4
version: 5.1.4(typescript@5.8.3)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 5.1.4(typescript@5.8.3)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
zod: zod:
specifier: 3.25.75 specifier: 3.25.76
version: 3.25.75 version: 3.25.76
frontend/ui: frontend/ui:
dependencies: dependencies:
@@ -482,7 +482,7 @@ importers:
version: 19.1.8 version: 19.1.8
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: 4.6.0 specifier: 4.6.0
version: 4.6.0(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 4.6.0(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
ahooks: ahooks:
specifier: 3.9.0 specifier: 3.9.0
version: 3.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 3.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -503,7 +503,7 @@ importers:
version: 6.0.0(react@19.1.0) version: 6.0.0(react@19.1.0)
react-i18next: react-i18next:
specifier: 15.6.0 specifier: 15.6.0
version: 15.6.0(i18next@25.3.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) version: 15.6.0(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
react-use: react-use:
specifier: 17.6.0 specifier: 17.6.0
version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 17.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -511,11 +511,11 @@ importers:
specifier: 4.1.11 specifier: 4.1.11
version: 4.1.11 version: 4.1.11
vite: vite:
specifier: 7.0.2 specifier: 7.0.3
version: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) version: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
vite-tsconfig-paths: vite-tsconfig-paths:
specifier: 5.1.4 specifier: 5.1.4
version: 5.1.4(typescript@5.8.3)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 5.1.4(typescript@5.8.3)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
devDependencies: devDependencies:
'@emotion/react': '@emotion/react':
specifier: 11.14.0 specifier: 11.14.0
@@ -540,7 +540,7 @@ importers:
version: 5.1.0(typescript@5.8.3) version: 5.1.0(typescript@5.8.3)
vite-plugin-dts: vite-plugin-dts:
specifier: 4.5.4 specifier: 4.5.4
version: 4.5.4(@types/node@22.15.33)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)) version: 4.5.4(@types/node@22.15.33)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
scripts: scripts:
dependencies: dependencies:
@@ -566,8 +566,8 @@ importers:
specifier: 7.7.2 specifier: 7.7.2
version: 7.7.2 version: 7.7.2
zod: zod:
specifier: 3.25.75 specifier: 3.25.76
version: 3.25.75 version: 3.25.76
devDependencies: devDependencies:
'@octokit/types': '@octokit/types':
specifier: 14.1.0 specifier: 14.1.0
@@ -5476,8 +5476,8 @@ packages:
hyphenate-style-name@1.1.0: hyphenate-style-name@1.1.0:
resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
i18next@25.3.1: i18next@25.3.2:
resolution: {integrity: sha512-S4CPAx8LfMOnURnnJa8jFWvur+UX/LWcl6+61p9VV7SK2m0445JeBJ6tLD0D5SR0H29G4PYfWkEhivKG5p4RDg==} resolution: {integrity: sha512-JSnbZDxRVbphc5jiptxr3o2zocy5dEqpVm9qCGdJwRNO+9saUJS0/u4LnM/13C23fUEWxAylPqKU/NpMV/IjqA==}
peerDependencies: peerDependencies:
typescript: ^5 typescript: ^5
peerDependenciesMeta: peerDependenciesMeta:
@@ -8324,8 +8324,8 @@ packages:
vite: vite:
optional: true optional: true
vite@7.0.2: vite@7.0.3:
resolution: {integrity: sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==} resolution: {integrity: sha512-y2L5oJZF7bj4c0jgGYgBNSdIu+5HF+m68rn2cQXFbGoShdhV1phX9rbnxy9YXj82aS8MMsCLAAFkRxZeWdldrQ==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -8564,8 +8564,8 @@ packages:
zod@3.25.67: zod@3.25.67:
resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==}
zod@3.25.75: zod@3.25.76:
resolution: {integrity: sha512-OhpzAmVzabPOL6C3A3gpAifqr9MqihV/Msx3gor2b2kviCgcb+HM9SEOpMWwwNp9MRunWnhtAKUoo0AHhjyPPg==} resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
zwitch@2.0.4: zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -11201,11 +11201,11 @@ snapshots:
recast: 0.23.11 recast: 0.23.11
source-map: 0.7.4 source-map: 0.7.4
tsx: 4.20.3 tsx: 4.20.3
zod: 3.25.75 zod: 3.25.76
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@tanstack/router-plugin@1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))': '@tanstack/router-plugin@1.125.6(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
dependencies: dependencies:
'@babel/core': 7.27.7 '@babel/core': 7.27.7
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7)
@@ -11220,10 +11220,10 @@ snapshots:
babel-dead-code-elimination: 1.0.10 babel-dead-code-elimination: 1.0.10
chokidar: 3.6.0 chokidar: 3.6.0
unplugin: 2.3.5 unplugin: 2.3.5
zod: 3.25.75 zod: 3.25.76
optionalDependencies: optionalDependencies:
'@tanstack/react-router': 1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router': 1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -11238,10 +11238,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.75)': '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(zod@3.25.76)':
dependencies: dependencies:
'@tanstack/react-router': 1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router': 1.125.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
zod: 3.25.75 zod: 3.25.76
'@tanstack/store@0.7.0': {} '@tanstack/store@0.7.0': {}
@@ -11828,7 +11828,7 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.10.1': '@unrs/resolver-binding-win32-x64-msvc@1.10.1':
optional: true optional: true
'@vitejs/plugin-legacy@7.0.0(terser@5.36.0)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))': '@vitejs/plugin-legacy@7.0.0(terser@5.36.0)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
dependencies: dependencies:
'@babel/core': 7.27.4 '@babel/core': 7.27.4
'@babel/preset-env': 7.27.2(@babel/core@7.27.4) '@babel/preset-env': 7.27.2(@babel/core@7.27.4)
@@ -11839,19 +11839,19 @@ snapshots:
regenerator-runtime: 0.14.1 regenerator-runtime: 0.14.1
systemjs: 6.15.1 systemjs: 6.15.1
terser: 5.36.0 terser: 5.36.0
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vitejs/plugin-react-swc@3.10.2(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))': '@vitejs/plugin-react-swc@3.10.2(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
dependencies: dependencies:
'@rolldown/pluginutils': 1.0.0-beta.11 '@rolldown/pluginutils': 1.0.0-beta.11
'@swc/core': 1.12.1 '@swc/core': 1.12.1
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@swc/helpers' - '@swc/helpers'
'@vitejs/plugin-react@4.6.0(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))': '@vitejs/plugin-react@4.6.0(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
dependencies: dependencies:
'@babel/core': 7.27.4 '@babel/core': 7.27.4
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.4) '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.4)
@@ -11859,7 +11859,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.19 '@rolldown/pluginutils': 1.0.0-beta.19
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
react-refresh: 0.17.0 react-refresh: 0.17.0
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -14175,7 +14175,7 @@ snapshots:
hyphenate-style-name@1.1.0: {} hyphenate-style-name@1.1.0: {}
i18next@25.3.1(typescript@5.8.3): i18next@25.3.2(typescript@5.8.3):
dependencies: dependencies:
'@babel/runtime': 7.27.6 '@babel/runtime': 7.27.6
optionalDependencies: optionalDependencies:
@@ -15779,11 +15779,11 @@ snapshots:
dependencies: dependencies:
react: 19.1.0 react: 19.1.0
react-i18next@15.6.0(i18next@25.3.1(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): react-i18next@15.6.0(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3):
dependencies: dependencies:
'@babel/runtime': 7.27.6 '@babel/runtime': 7.27.6
html-parse-stringify: 3.0.1 html-parse-stringify: 3.0.1
i18next: 25.3.1(typescript@5.8.3) i18next: 25.3.2(typescript@5.8.3)
react: 19.1.0 react: 19.1.0
optionalDependencies: optionalDependencies:
react-dom: 19.1.0(react@19.1.0) react-dom: 19.1.0(react@19.1.0)
@@ -17196,7 +17196,7 @@ snapshots:
- rollup - rollup
- supports-color - supports-color
vite-plugin-dts@4.5.4(@types/node@22.15.33)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)): vite-plugin-dts@4.5.4(@types/node@22.15.33)(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
dependencies: dependencies:
'@microsoft/api-extractor': 7.51.0(@types/node@22.15.33) '@microsoft/api-extractor': 7.51.0(@types/node@22.15.33)
'@rollup/pluginutils': 5.1.4(rollup@4.40.0) '@rollup/pluginutils': 5.1.4(rollup@4.40.0)
@@ -17209,13 +17209,13 @@ snapshots:
magic-string: 0.30.17 magic-string: 0.30.17
typescript: 5.8.3 typescript: 5.8.3
optionalDependencies: optionalDependencies:
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- rollup - rollup
- supports-color - supports-color
vite-plugin-html@3.2.2(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)): vite-plugin-html@3.2.2(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
dependencies: dependencies:
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
colorette: 2.0.20 colorette: 2.0.20
@@ -17229,39 +17229,39 @@ snapshots:
html-minifier-terser: 6.1.0 html-minifier-terser: 6.1.0
node-html-parser: 5.4.2 node-html-parser: 5.4.2
pathe: 0.2.0 pathe: 0.2.0
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
vite-plugin-sass-dts@1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)): vite-plugin-sass-dts@1.3.31(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.89.2)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
dependencies: dependencies:
postcss: 8.5.6 postcss: 8.5.6
postcss-js: 4.0.1(postcss@8.5.6) postcss-js: 4.0.1(postcss@8.5.6)
prettier: 3.6.2 prettier: 3.6.2
sass-embedded: 1.89.2 sass-embedded: 1.89.2
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
vite-plugin-svgr@4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)): vite-plugin-svgr@4.3.0(rollup@4.40.0)(typescript@5.8.3)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
dependencies: dependencies:
'@rollup/pluginutils': 5.1.3(rollup@4.40.0) '@rollup/pluginutils': 5.1.3(rollup@4.40.0)
'@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/core': 8.1.0(typescript@5.8.3)
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3))
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
- typescript - typescript
vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)): vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)):
dependencies: dependencies:
debug: 4.3.7 debug: 4.3.7
globrex: 0.1.2 globrex: 0.1.2
tsconfck: 3.0.3(typescript@5.8.3) tsconfck: 3.0.3(typescript@5.8.3)
optionalDependencies: optionalDependencies:
vite: 7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0) vite: 7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
vite@7.0.2(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0): vite@7.0.3(@types/node@22.15.33)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0):
dependencies: dependencies:
esbuild: 0.25.0 esbuild: 0.25.0
fdir: 6.4.6(picomatch@4.0.2) fdir: 6.4.6(picomatch@4.0.2)
@@ -17504,6 +17504,6 @@ snapshots:
zod@3.25.67: {} zod@3.25.67: {}
zod@3.25.75: {} zod@3.25.76: {}
zwitch@2.0.4: {} zwitch@2.0.4: {}

View File

@@ -10,7 +10,7 @@
"filesize": "10.1.6", "filesize": "10.1.6",
"p-retry": "6.2.1", "p-retry": "6.2.1",
"semver": "7.7.2", "semver": "7.7.2",
"zod": "3.25.75" "zod": "3.25.76"
}, },
"devDependencies": { "devDependencies": {
"@octokit/types": "14.1.0", "@octokit/types": "14.1.0",

View File

@@ -70,7 +70,7 @@ caldata_extract_reverse() {
local caldata local caldata
mtd=$(find_mtd_chardev "$part") mtd=$(find_mtd_chardev "$part")
reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd) reversed=$(hexdump -v -s $offset -n $count -e '1/1 "%02x "' $mtd)
for byte in $reversed; do for byte in $reversed; do
caldata="\x${byte}${caldata}" caldata="\x${byte}${caldata}"
@@ -122,49 +122,43 @@ caldata_valid() {
return $? return $?
} }
caldata_patch_chksum() { caldata_patch_data() {
local mac=$1 local data=$1
local mac_offset=$(($2)) local data_count=$((${#1} / 2))
local chksum_offset=$(($3)) [ -n "$2" ] && local data_offset=$(($2))
[ -n "$3" ] && local chksum_offset=$(($3))
local target=$4 local target=$4
local xor_mac local fw_data
local xor_fw_mac local fw_chksum
local xor_fw_chksum
xor_mac=${mac//:/} [ -z "$data" -o -z "$data_offset" ] && return
xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}"
xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}"
xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE)
xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac)
printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \
dd of=$target conv=notrunc bs=1 seek=$chksum_offset count=2
}
caldata_patch_mac() {
local mac=$1
local mac_offset=$(($2))
local chksum_offset=$3
local target=$4
[ -z "$mac" -o -z "$mac_offset" ] && return
[ -n "$target" ] || target=/lib/firmware/$FIRMWARE [ -n "$target" ] || target=/lib/firmware/$FIRMWARE
[ -n "$chksum_offset" ] && caldata_patch_chksum "$mac" "$mac_offset" "$chksum_offset" "$target" fw_data=$(hexdump -v -n $data_count -s $data_offset -e '1/1 "%02x"' $target)
macaddr_2bin $mac | dd of=$target conv=notrunc oflag=seek_bytes bs=6 seek=$mac_offset count=1 || \ if [ "$data" != "$fw_data" ]; then
caldata_die "failed to write MAC address to eeprom file"
if [ -n "$chksum_offset" ]; then
fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '1/1 "%02x"' $target)
fw_chksum=$(xor $fw_chksum $(data_2xor_val $fw_data) $(data_2xor_val $data))
data_2bin $fw_chksum | \
dd of=$target conv=notrunc bs=1 seek=$chksum_offset count=2 || \
caldata_die "failed to write chksum to eeprom file"
fi
data_2bin $data | \
dd of=$target conv=notrunc bs=1 seek=$data_offset count=$data_count || \
caldata_die "failed to write data to eeprom file"
fi
} }
ath9k_patch_mac() { ath9k_patch_mac() {
local mac=$1 local mac=$1
local target=$2 local target=$2
caldata_patch_mac "$mac" 0x2 "" "$target" caldata_patch_data "${mac//:/}" 0x2 "" "$target"
} }
ath9k_patch_mac_crc() { ath9k_patch_mac_crc() {
@@ -173,12 +167,52 @@ ath9k_patch_mac_crc() {
local chksum_offset=$((mac_offset - 10)) local chksum_offset=$((mac_offset - 10))
local target=$4 local target=$4
caldata_patch_mac "$mac" "$mac_offset" "$chksum_offset" "$target" caldata_patch_data "${mac//:/}" "$mac_offset" "$chksum_offset" "$target"
} }
ath10k_patch_mac() { ath10k_patch_mac() {
local mac=$1 local mac=$1
local target=$2 local target=$2
caldata_patch_mac "$mac" 0x6 0x2 "$target" caldata_patch_data "${mac//:/}" 0x6 0x2 "$target"
} }
ath11k_patch_mac() {
local mac=$1
# mac_id from 0 to 5
local mac_id=$2
local target=$3
[ -z "$mac_id" ] && return
caldata_patch_data "${mac//:/}" $(printf "0x%x" $(($mac_id * 0x6 + 0xe))) 0xa "$target"
}
ath10k_remove_regdomain() {
local target=$1
caldata_patch_data "0000" 0xc 0x2 "$target"
}
ath11k_remove_regdomain() {
local target=$1
local regdomain
local regdomain_data
regdomain=$(hexdump -v -n 2 -s 0x34 -e '1/1 "%02x"' $target)
caldata_patch_data "0000" 0x34 0xa "$target"
for offset in 0x450 0x458 0x500 0x5a8; do
regdomain_data=$(hexdump -v -n 2 -s $offset -e '1/1 "%02x"' $target)
if [ "$regdomain" == "$regdomain_data" ]; then
caldata_patch_data "0000" $offset 0xa "$target"
fi
done
}
ath11k_set_macflag() {
local target=$1
caldata_patch_data "0100" 0x3e 0xa "$target"
}

View File

@@ -66,7 +66,7 @@ get_mac_ascii() {
local key="$2" local key="$2"
local mac_dirty local mac_dirty
mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p') mac_dirty=$(strings "$part" | sed -n "s/^$key\\(=\\?\)//p")
# "canonicalize" mac # "canonicalize" mac
[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" [ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty"
@@ -275,16 +275,10 @@ macaddr_unsetbit_mc() {
macaddr_random() { macaddr_random() {
local randsrc=$(get_mac_binary /dev/urandom 0) local randsrc=$(get_mac_binary /dev/urandom 0)
echo "$(macaddr_unsetbit_mc "$(macaddr_setbit_la "${randsrc}")")" echo "$(macaddr_unsetbit_mc "$(macaddr_setbit_la "${randsrc}")")"
} }
macaddr_2bin() {
local mac=$1
echo -ne \\x${mac//:/\\x}
}
macaddr_canonicalize() { macaddr_canonicalize() {
local mac="$1" local mac="$1"
local canon="" local canon=""

View File

@@ -69,7 +69,7 @@ ipq807x_setup_macs()
case "$board" in case "$board" in
aliyun,ap8220) aliyun,ap8220)
wan_mac=$(cat $(find_mtd_part product_info) | awk -F '\t' '/product.mac/{print $2}') wan_mac=$(mtd_get_mac_ascii product_info product.mac)
lan_mac=$(macaddr_add "$wan_mac" 1) lan_mac=$(macaddr_add "$wan_mac" 1)
label_mac="$wan_mac" label_mac="$wan_mac"
;; ;;

View File

@@ -11,7 +11,7 @@ board=$(board_name)
case "$board" in case "$board" in
aliyun,ap8220) aliyun,ap8220)
label_mac=$(cat $(find_mtd_part product_info) | awk -F '\t' '/product.mac/{print $2}') label_mac=$(mtd_get_mac_ascii product_info product.mac)
[ "$PHYNBR" = "0" ] && macaddr_add $label_mac 2 > /sys${DEVPATH}/macaddress [ "$PHYNBR" = "0" ] && macaddr_add $label_mac 2 > /sys${DEVPATH}/macaddress
[ "$PHYNBR" = "1" ] && macaddr_add $label_mac 3 > /sys${DEVPATH}/macaddress [ "$PHYNBR" = "1" ] && macaddr_add $label_mac 3 > /sys${DEVPATH}/macaddress
;; ;;

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=filebrowser PKG_NAME:=filebrowser
PKG_VERSION:=2.36.3 PKG_VERSION:=2.37.0
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}? PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}?
PKG_HASH:=7eae13f16a21a1d6f964f57356408eb11fc5fc4f0fd0ccce1b62877d876e0451 PKG_HASH:=d4a67f6c531098b4c6c0a07e0ee9fc7607aab1467052747d9468aeda1c1b98f3
PKG_LICENSE:=Apache-2.0 PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE PKG_LICENSE_FILES:=LICENSE

View File

@@ -9,6 +9,7 @@ local fs = api.fs
local http = require "luci.http" local http = require "luci.http"
local util = require "luci.util" local util = require "luci.util"
local i18n = require "luci.i18n" local i18n = require "luci.i18n"
local jsonStringify = luci.jsonc.stringify
function index() function index()
if not nixio.fs.access("/etc/config/passwall") then if not nixio.fs.access("/etc/config/passwall") then
@@ -106,7 +107,7 @@ end
local function http_write_json(content) local function http_write_json(content)
http.prepare_content("application/json") http.prepare_content("application/json")
http.write_json(content or {code = 1}) http.write(jsonStringify(content or {code = 1}))
end end
function reset_config() function reset_config()
@@ -357,7 +358,7 @@ function connect_status()
end end
end end
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
luci.http.write_json(e) http.write(jsonStringify(e))
end end
function ping_node() function ping_node()
@@ -616,21 +617,20 @@ function create_backup()
end end
function restore_backup() function restore_backup()
http.prepare_content("application/json")
local ok, err = pcall(function() local ok, err = pcall(function()
local filename = http.formvalue("filename") local filename = http.formvalue("filename")
local chunk = http.formvalue("chunk") local chunk = http.formvalue("chunk")
local chunk_index = tonumber(http.formvalue("chunk_index") or "-1") local chunk_index = tonumber(http.formvalue("chunk_index") or "-1")
local total_chunks = tonumber(http.formvalue("total_chunks") or "-1") local total_chunks = tonumber(http.formvalue("total_chunks") or "-1")
if not filename or not chunk then if not filename or not chunk then
http.write_json({ status = "error", message = "Missing filename or chunk" }) http_write_json({ status = "error", message = "Missing filename or chunk" })
return return
end end
local file_path = "/tmp/" .. filename local file_path = "/tmp/" .. filename
local decoded = nixio.bin.b64decode(chunk) local decoded = nixio.bin.b64decode(chunk)
local fp = io.open(file_path, "a+") local fp = io.open(file_path, "a+")
if not fp then if not fp then
http.write_json({ status = "error", message = "Failed to open file for writing: " .. file_path }) http_write_json({ status = "error", message = "Failed to open file for writing: " .. file_path })
return return
end end
fp:write(decoded) fp:write(decoded)
@@ -656,13 +656,13 @@ function restore_backup()
end end
api.sys.call("rm -rf " .. temp_dir) api.sys.call("rm -rf " .. temp_dir)
fs.remove(file_path) fs.remove(file_path)
http.write_json({ status = "success", message = "Upload completed", path = file_path }) http_write_json({ status = "success", message = "Upload completed", path = file_path })
else else
http.write_json({ status = "success", message = "Chunk received" }) http_write_json({ status = "success", message = "Chunk received" })
end end
end) end)
if not ok then if not ok then
http.write_json({ status = "error", message = tostring(err) }) http_write_json({ status = "error", message = tostring(err) })
end end
end end

View File

@@ -39,7 +39,7 @@ local api = require "luci.passwall.api"
<h3><%:Restore Backup File%></h3> <h3><%:Restore Backup File%></h3>
<div class="cbi-value" id="_upload_div"> <div class="cbi-value" id="_upload_div">
<div class="up-cbi-value-field"> <div class="up-cbi-value-field">
<input class="cbi-input-file" type="file" id="ulfile" name="ulfile" accept=".tar.gz" required /> <input class="cbi-input-file" type="file" id="ulfile" accept=".tar.gz" />
<br /> <br />
<div class="up-button-container"> <div class="up-button-container">
<input class="btn cbi-button cbi-button-apply" type="button" id="upload-btn" onclick="do_upload()" value="<%:UL Restore%>" /> <input class="btn cbi-button cbi-button-apply" type="button" id="upload-btn" onclick="do_upload()" value="<%:UL Restore%>" />
@@ -94,6 +94,7 @@ local api = require "luci.passwall.api"
} }
function close_upload_win(btn) { function close_upload_win(btn) {
document.getElementById("ulfile").value = "";
document.getElementById("upload-modal").style.display = "none"; document.getElementById("upload-modal").style.display = "none";
} }
@@ -151,11 +152,13 @@ local api = require "luci.passwall.api"
} }
if (!file.name.endsWith(".tar.gz")) { if (!file.name.endsWith(".tar.gz")) {
alert("<%:Invalid file type. Please upload a .tar.gz file.%>"); alert("<%:Invalid file type. Please upload a .tar.gz file.%>");
fileInput.value = "";
return; return;
} }
const maxSize = 10 * 1024 * 1024; // 10MB const maxSize = 10 * 1024 * 1024; // 10MB
if (file.size > maxSize) { if (file.size > maxSize) {
alert("<%:File size exceeds 10MB limit.%>"); alert("<%:File size exceeds 10MB limit.%>");
fileInput.value = "";
return; return;
} }

View File

@@ -123,7 +123,7 @@ function getRuntimeLog(name, filename) {
let log_textarea = E('div', { 'id': 'log_textarea' }, let log_textarea = E('div', { 'id': 'log_textarea' },
E('img', { E('img', {
'src': L.resource('icons/loading.gif'), 'src': L.resource('icons/loading.svg'),
'alt': _('Loading'), 'alt': _('Loading'),
'style': 'vertical-align:middle' 'style': 'vertical-align:middle'
}, _('Collecting data...')) }, _('Collecting data...'))

View File

@@ -1,5 +1,8 @@
#!/bin/sh #!/bin/sh
[ -f "/www/luci-static/resources/icons/loading.gif" ] && \
sed -i "s,/loading.svg,/loading.gif,g" "/www/luci-static/resources/view/homeproxy/status.js"
uci -q batch <<-EOF >"/dev/null" uci -q batch <<-EOF >"/dev/null"
delete firewall.homeproxy_pre delete firewall.homeproxy_pre

View File

@@ -9,6 +9,7 @@ local fs = api.fs
local http = require "luci.http" local http = require "luci.http"
local util = require "luci.util" local util = require "luci.util"
local i18n = require "luci.i18n" local i18n = require "luci.i18n"
local jsonStringify = luci.jsonc.stringify
function index() function index()
if not nixio.fs.access("/etc/config/passwall") then if not nixio.fs.access("/etc/config/passwall") then
@@ -106,7 +107,7 @@ end
local function http_write_json(content) local function http_write_json(content)
http.prepare_content("application/json") http.prepare_content("application/json")
http.write_json(content or {code = 1}) http.write(jsonStringify(content or {code = 1}))
end end
function reset_config() function reset_config()
@@ -357,7 +358,7 @@ function connect_status()
end end
end end
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
luci.http.write_json(e) http.write(jsonStringify(e))
end end
function ping_node() function ping_node()
@@ -616,21 +617,20 @@ function create_backup()
end end
function restore_backup() function restore_backup()
http.prepare_content("application/json")
local ok, err = pcall(function() local ok, err = pcall(function()
local filename = http.formvalue("filename") local filename = http.formvalue("filename")
local chunk = http.formvalue("chunk") local chunk = http.formvalue("chunk")
local chunk_index = tonumber(http.formvalue("chunk_index") or "-1") local chunk_index = tonumber(http.formvalue("chunk_index") or "-1")
local total_chunks = tonumber(http.formvalue("total_chunks") or "-1") local total_chunks = tonumber(http.formvalue("total_chunks") or "-1")
if not filename or not chunk then if not filename or not chunk then
http.write_json({ status = "error", message = "Missing filename or chunk" }) http_write_json({ status = "error", message = "Missing filename or chunk" })
return return
end end
local file_path = "/tmp/" .. filename local file_path = "/tmp/" .. filename
local decoded = nixio.bin.b64decode(chunk) local decoded = nixio.bin.b64decode(chunk)
local fp = io.open(file_path, "a+") local fp = io.open(file_path, "a+")
if not fp then if not fp then
http.write_json({ status = "error", message = "Failed to open file for writing: " .. file_path }) http_write_json({ status = "error", message = "Failed to open file for writing: " .. file_path })
return return
end end
fp:write(decoded) fp:write(decoded)
@@ -656,13 +656,13 @@ function restore_backup()
end end
api.sys.call("rm -rf " .. temp_dir) api.sys.call("rm -rf " .. temp_dir)
fs.remove(file_path) fs.remove(file_path)
http.write_json({ status = "success", message = "Upload completed", path = file_path }) http_write_json({ status = "success", message = "Upload completed", path = file_path })
else else
http.write_json({ status = "success", message = "Chunk received" }) http_write_json({ status = "success", message = "Chunk received" })
end end
end) end)
if not ok then if not ok then
http.write_json({ status = "error", message = tostring(err) }) http_write_json({ status = "error", message = tostring(err) })
end end
end end

View File

@@ -39,7 +39,7 @@ local api = require "luci.passwall.api"
<h3><%:Restore Backup File%></h3> <h3><%:Restore Backup File%></h3>
<div class="cbi-value" id="_upload_div"> <div class="cbi-value" id="_upload_div">
<div class="up-cbi-value-field"> <div class="up-cbi-value-field">
<input class="cbi-input-file" type="file" id="ulfile" name="ulfile" accept=".tar.gz" required /> <input class="cbi-input-file" type="file" id="ulfile" accept=".tar.gz" />
<br /> <br />
<div class="up-button-container"> <div class="up-button-container">
<input class="btn cbi-button cbi-button-apply" type="button" id="upload-btn" onclick="do_upload()" value="<%:UL Restore%>" /> <input class="btn cbi-button cbi-button-apply" type="button" id="upload-btn" onclick="do_upload()" value="<%:UL Restore%>" />
@@ -94,6 +94,7 @@ local api = require "luci.passwall.api"
} }
function close_upload_win(btn) { function close_upload_win(btn) {
document.getElementById("ulfile").value = "";
document.getElementById("upload-modal").style.display = "none"; document.getElementById("upload-modal").style.display = "none";
} }
@@ -151,11 +152,13 @@ local api = require "luci.passwall.api"
} }
if (!file.name.endsWith(".tar.gz")) { if (!file.name.endsWith(".tar.gz")) {
alert("<%:Invalid file type. Please upload a .tar.gz file.%>"); alert("<%:Invalid file type. Please upload a .tar.gz file.%>");
fileInput.value = "";
return; return;
} }
const maxSize = 10 * 1024 * 1024; // 10MB const maxSize = 10 * 1024 * 1024; // 10MB
if (file.size > maxSize) { if (file.size > maxSize) {
alert("<%:File size exceeds 10MB limit.%>"); alert("<%:File size exceeds 10MB limit.%>");
fileInput.value = "";
return; return;
} }

View File

@@ -14,5 +14,6 @@ public enum ECoreType
hysteria2 = 26, hysteria2 = 26,
brook = 27, brook = 27,
overtls = 28, overtls = 28,
shadowquic = 29,
v2rayN = 99 v2rayN = 99
} }

View File

@@ -507,6 +507,7 @@ public class Global
{ ECoreType.juicity, "juicity/juicity" }, { ECoreType.juicity, "juicity/juicity" },
{ ECoreType.brook, "txthinking/brook" }, { ECoreType.brook, "txthinking/brook" },
{ ECoreType.overtls, "ShadowsocksR-Live/overtls" }, { ECoreType.overtls, "ShadowsocksR-Live/overtls" },
{ ECoreType.shadowquic, "spongebob888/shadowquic" },
{ ECoreType.v2rayN, "2dust/v2rayN" }, { ECoreType.v2rayN, "2dust/v2rayN" },
}; };

View File

@@ -200,6 +200,15 @@ public sealed class CoreInfoHandler
Arguments = "-r client -c {0}", Arguments = "-r client -c {0}",
Url = GetCoreUrl(ECoreType.overtls), Url = GetCoreUrl(ECoreType.overtls),
AbsolutePath = false, AbsolutePath = false,
},
new CoreInfo
{
CoreType = ECoreType.shadowquic,
CoreExes = [ "shadowquic", "shadowquic"],
Arguments = "-c {0}",
Url = GetCoreUrl(ECoreType.shadowquic),
AbsolutePath = false,
} }
]; ];

View File

@@ -7,4 +7,4 @@ X-GNOME-Autostart-enabled=true
Name[en_US]=v2rayN Name[en_US]=v2rayN
Name=v2rayN Name=v2rayN
Comment[en_US]=v2rayN Comment[en_US]=v2rayN
Comment=v2rayN Comment=v2rayN

View File

@@ -29,9 +29,6 @@ set_gnome_proxy() {
echo "Ignored Hosts: $IGNORE_HOSTS" echo "Ignored Hosts: $IGNORE_HOSTS"
elif [ "$MODE" == "none" ]; then elif [ "$MODE" == "none" ]; then
echo "GNOME: Proxy disabled." echo "GNOME: Proxy disabled."
else
echo "GNOME: Invalid mode. Use 'none' or 'manual'."
exit 1
fi fi
} }
@@ -69,9 +66,6 @@ set_kde_proxy() {
# Disable proxy # Disable proxy
$KWRITECONFIG --file kioslaverc --group "Proxy Settings" --key ProxyType 0 $KWRITECONFIG --file kioslaverc --group "Proxy Settings" --key ProxyType 0
echo "KDE: Proxy disabled." echo "KDE: Proxy disabled."
else
echo "KDE: Invalid mode. Use 'none' or 'manual'."
exit 1
fi fi
# Apply changes by restarting KDE's network settings # Apply changes by restarting KDE's network settings
@@ -84,7 +78,7 @@ detect_desktop_environment() {
echo "gnome" echo "gnome"
return return
fi fi
if [[ "$XDG_CURRENT_DESKTOP" == *"XFCE"* ]] || [[ "$XDG_SESSION_DESKTOP" == *"XFCE"* ]]; then if [[ "$XDG_CURRENT_DESKTOP" == *"XFCE"* ]] || [[ "$XDG_SESSION_DESKTOP" == *"XFCE"* ]]; then
echo "gnome" echo "gnome"
return return
@@ -94,7 +88,7 @@ detect_desktop_environment() {
echo "gnome" echo "gnome"
return return
fi fi
if [[ "$XDG_CURRENT_DESKTOP" == *"UKUI"* ]] || [[ "$XDG_SESSION_DESKTOP" == *"ukui"* ]]; then if [[ "$XDG_CURRENT_DESKTOP" == *"UKUI"* ]] || [[ "$XDG_SESSION_DESKTOP" == *"ukui"* ]]; then
echo "gnome" echo "gnome"
return return
@@ -117,6 +111,15 @@ detect_desktop_environment() {
return return
fi fi
done done
# Fallback to GNOME method if CLI utility is available. This solves the
# proxy configuration issues on minimal installation systems, like setups
# with only window managers, that borrow some parts from big DEs.
if command -v gsettings >/dev/null 2>&1; then
echo "gnome"
return
fi
echo "unsupported" echo "unsupported"
} }
@@ -134,6 +137,11 @@ PROXY_IP=$2
PROXY_PORT=$3 PROXY_PORT=$3
IGNORE_HOSTS=$4 IGNORE_HOSTS=$4
if ! [[ "$MODE" =~ ^(manual|none)$ ]]; then
echo "Invalid mode. Use 'none' or 'manual'." >&2
exit 1
fi
# Detect desktop environment # Detect desktop environment
DE=$(detect_desktop_environment) DE=$(detect_desktop_environment)
@@ -144,6 +152,6 @@ elif [ "$DE" == "kde" ]; then
set_gnome_proxy "$MODE" "$PROXY_IP" "$PROXY_PORT" "$IGNORE_HOSTS" set_gnome_proxy "$MODE" "$PROXY_IP" "$PROXY_PORT" "$IGNORE_HOSTS"
set_kde_proxy "$MODE" "$PROXY_IP" "$PROXY_PORT" "$IGNORE_HOSTS" set_kde_proxy "$MODE" "$PROXY_IP" "$PROXY_PORT" "$IGNORE_HOSTS"
else else
echo "Unsupported desktop environment: $DE" echo "Unsupported desktop environment: $DE" >&2
exit 1 exit 1
fi fi

View File

@@ -34,6 +34,8 @@ public class StatusBarViewModel : MyReactiveObject
public ReactiveCommand<Unit, Unit> SubUpdateViaProxyCmd { get; } public ReactiveCommand<Unit, Unit> SubUpdateViaProxyCmd { get; }
public ReactiveCommand<Unit, Unit> CopyProxyCmdToClipboardCmd { get; } public ReactiveCommand<Unit, Unit> CopyProxyCmdToClipboardCmd { get; }
public ReactiveCommand<Unit, Unit> NotifyLeftClickCmd { get; } public ReactiveCommand<Unit, Unit> NotifyLeftClickCmd { get; }
public ReactiveCommand<Unit, Unit> ShowWindowCmd { get; }
public ReactiveCommand<Unit, Unit> HideWindowCmd { get; }
#region System Proxy #region System Proxy
@@ -91,6 +93,9 @@ public class StatusBarViewModel : MyReactiveObject
[Reactive] [Reactive]
public bool EnableTun { get; set; } public bool EnableTun { get; set; }
[Reactive]
public bool BlIsNonWindows { get; set; }
#endregion UI #endregion UI
public StatusBarViewModel(Func<EViewAction, object?, Task<bool>>? updateView) public StatusBarViewModel(Func<EViewAction, object?, Task<bool>>? updateView)
@@ -100,6 +105,7 @@ public class StatusBarViewModel : MyReactiveObject
SelectedServer = new(); SelectedServer = new();
RunningServerToolTipText = "-"; RunningServerToolTipText = "-";
BlSystemProxyPacVisible = Utils.IsWindows(); BlSystemProxyPacVisible = Utils.IsWindows();
BlIsNonWindows = Utils.IsNonWindows();
if (_config.TunModeItem.EnableTun && AllowEnableTun()) if (_config.TunModeItem.EnableTun && AllowEnableTun())
{ {
@@ -143,11 +149,21 @@ public class StatusBarViewModel : MyReactiveObject
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(null); Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(null);
await Task.CompletedTask; await Task.CompletedTask;
}); });
ShowWindowCmd = ReactiveCommand.CreateFromTask(async () =>
{
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(true);
await Task.CompletedTask;
});
HideWindowCmd = ReactiveCommand.CreateFromTask(async () =>
{
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(false);
await Task.CompletedTask;
});
AddServerViaClipboardCmd = ReactiveCommand.CreateFromTask(async () => AddServerViaClipboardCmd = ReactiveCommand.CreateFromTask(async () =>
{ {
await AddServerViaClipboard(); await AddServerViaClipboard();
}); });
AddServerViaScanCmd = ReactiveCommand.CreateFromTask(async () => AddServerViaScanCmd = ReactiveCommand.CreateFromTask(async () =>
{ {
await AddServerViaScan(); await AddServerViaScan();

View File

@@ -32,7 +32,15 @@
ToolTipText="{Binding RunningServerToolTipText}"> ToolTipText="{Binding RunningServerToolTipText}">
<TrayIcon.Menu> <TrayIcon.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Command="{Binding NotifyLeftClickCmd}" Header="{x:Static resx:ResUI.menuShowOrHideMainWindow}" /> <NativeMenuItem
Command="{Binding ShowWindowCmd}"
Header="{x:Static resx:ResUI.TbDisplayGUI}"
IsVisible="{Binding BlIsNonWindows}" />
<NativeMenuItem
Command="{Binding NotifyLeftClickCmd}"
Header="{x:Static resx:ResUI.menuShowOrHideMainWindow}"
IsVisible="{Binding BlIsNonWindows}" />
<NativeMenuItem Command="{Binding CopyProxyCmdToClipboardCmd}" Header="{x:Static resx:ResUI.menuCopyProxyCmdToClipboard}" />
<NativeMenuItemSeparator /> <NativeMenuItemSeparator />
<NativeMenuItem <NativeMenuItem
Command="{Binding SystemProxyClearCmd}" Command="{Binding SystemProxyClearCmd}"
@@ -60,8 +68,6 @@
<NativeMenuItem Command="{Binding SubUpdateCmd}" Header="{x:Static resx:ResUI.menuSubUpdate}" /> <NativeMenuItem Command="{Binding SubUpdateCmd}" Header="{x:Static resx:ResUI.menuSubUpdate}" />
<NativeMenuItem Command="{Binding SubUpdateViaProxyCmd}" Header="{x:Static resx:ResUI.menuSubUpdateViaProxy}" /> <NativeMenuItem Command="{Binding SubUpdateViaProxyCmd}" Header="{x:Static resx:ResUI.menuSubUpdateViaProxy}" />
<NativeMenuItemSeparator /> <NativeMenuItemSeparator />
<NativeMenuItem Command="{Binding CopyProxyCmdToClipboardCmd}" Header="{x:Static resx:ResUI.menuCopyProxyCmdToClipboard}" />
<NativeMenuItemSeparator />
<NativeMenuItem Click="MenuExit_Click" Header="{x:Static resx:ResUI.menuExit}" /> <NativeMenuItem Click="MenuExit_Click" Header="{x:Static resx:ResUI.menuExit}" />
</NativeMenu> </NativeMenu>
</TrayIcon.Menu> </TrayIcon.Menu>

View File

@@ -159,13 +159,13 @@
<item>گوم زیڌن</item> <item>گوم زیڌن</item>
</string-array> </string-array>
<string name="title_pref_speed_enabled">ر وندن نشۉݩ داڌن سورعت</string> <string name="title_pref_speed_enabled">ر وندن نشووݩ داڌن سورعت</string>
<string name="summary_pref_speed_enabled">نشۉݩ داڌن سورعت هیم سکویی من وارسۊویا. نماڌ وارسۊوی و ری و کار گرؽڌن آلشت ابۊ.</string> <string name="summary_pref_speed_enabled">نشووݩ داڌن سورعت هیم سکویی من وارسۊویا. نماڌ وارسۊوی و ری و کار گرؽڌن آلشت ابۊ.</string>
<string name="title_pref_sniffing_enabled">ر وندن Sniffing</string> <string name="title_pref_sniffing_enabled">ر وندن Sniffing</string>
<string name="summary_pref_sniffing_enabled">دامنه sniff ن ز کتن امتهۉݩ کۊنین (پؽش فرز رۊشن)</string> <string name="summary_pref_sniffing_enabled">دامنه sniff ن ز کتن امتهووݩ کۊنین (پؽش فرز رۊشن)</string>
<string name="title_pref_route_only_enabled">ر وندن routeOnly</string> <string name="title_pref_route_only_enabled">ر وندن routeOnly</string>
<string name="summary_pref_route_only_enabled">ز نوم دامنه sniffed تینا سی تور جوستن استفاڌه کۊنین وو نشۊوی مۉرد نزرن و عونوان نشۊوی IP ووردارین.</string> <string name="summary_pref_route_only_enabled">ز نوم دامنه sniffed تینا سی تور جوستن استفاڌه کۊنین وو نشۊوی موورد نزرن و عونوان نشۊوی IP ووردارین.</string>
<string name="title_pref_local_dns_enabled">ر وندن DNS مهلی</string> <string name="title_pref_local_dns_enabled">ر وندن DNS مهلی</string>
<string name="summary_pref_local_dns_enabled">درخاستا DNS و هسته و من ایان وو و دست ماژول DNS پردازشت ابۊن (پؽشنهاڌ ابۊ ٱر لنگ تور جوستن سی دور زیڌن نشۊویا LAN وو وولات ٱسلی هڌین فعال بۊ)</string> <string name="summary_pref_local_dns_enabled">درخاستا DNS و هسته و من ایان وو و دست ماژول DNS پردازشت ابۊن (پؽشنهاڌ ابۊ ٱر لنگ تور جوستن سی دور زیڌن نشۊویا LAN وو وولات ٱسلی هڌین فعال بۊ)</string>
@@ -176,18 +176,18 @@
<string name="title_pref_prefer_ipv6">ترجی IPv6</string> <string name="title_pref_prefer_ipv6">ترجی IPv6</string>
<string name="summary_pref_prefer_ipv6">تورا IPv6 ن فعال کۊنین وو نشۊویا IPv6 ن ترجی بڌین</string> <string name="summary_pref_prefer_ipv6">تورا IPv6 ن فعال کۊنین وو نشۊویا IPv6 ن ترجی بڌین</string>
<string name="title_pref_remote_dns">ز ر دیر (اختیاری) DNS (udp/tcp/https/quic) (اختیاری)</string> <string name="title_pref_remote_dns">DNS ز ر دیر (اختیاری) (udp/tcp/https/quic) (اختیاری)</string>
<string name="summary_pref_remote_dns">DNS</string> <string name="summary_pref_remote_dns">DNS</string>
<string name="title_pref_vpn_dns">VPN DNS (تینا IPv4/v6)</string> <string name="title_pref_vpn_dns">VPN DNS (تینا IPv4/v6)</string>
<string name="title_pref_vpn_bypass_lan">ز شبکه مهلی اگوڌرته؟ VPN</string> <string name="title_pref_vpn_bypass_lan">VPN ز شبکه مهلی اگوڌرته؟</string>
<string name="title_pref_vpn_interface_address">نشۊوی رابت VPN</string> <string name="title_pref_vpn_interface_address">نشۊوی رابت VPN</string>
<string name="title_pref_domestic_dns">منی (اختیاری) DNS</string> <string name="title_pref_domestic_dns">DNS منی (اختیاری)</string>
<string name="summary_pref_domestic_dns">DNS</string> <string name="summary_pref_domestic_dns">DNS</string>
<string name="title_pref_dns_hosts">هاست موستقیم (قالوو: دامنه: نشۊوی،...) DNS</string> <string name="title_pref_dns_hosts">DNS هاست موستقیم (قالوو: دامنه: نشۊوی،...)</string>
<string name="summary_pref_dns_hosts">دامنه:نشۊوی،...</string> <string name="summary_pref_dns_hosts">دامنه:نشۊوی،...</string>
<string name="title_pref_delay_test_url">نشۊوی اینترنتی آزمایش تئخیر واقعی (http/https)</string> <string name="title_pref_delay_test_url">نشۊوی اینترنتی آزمایش تئخیر واقعی (http/https)</string>
@@ -215,8 +215,8 @@
<string name="title_pref_append_http_proxy">پروکسی HTTP ن و VPN ازاف کۊنین</string> <string name="title_pref_append_http_proxy">پروکسی HTTP ن و VPN ازاف کۊنین</string>
<string name="summary_pref_append_http_proxy">پروکسی HTTP ن موسقیمن ز (مۊرۊرگر/ی قرد ز برنومه یل لادراری بیڌه)، بؽ استفاڌه ز دسگا NIC مجازی (Android 10+) استفاڌه ابۊ.</string> <string name="summary_pref_append_http_proxy">پروکسی HTTP ن موسقیمن ز (مۊرۊرگر/ی قرد ز برنومه یل لادراری بیڌه)، بؽ استفاڌه ز دسگا NIC مجازی (Android 10+) استفاڌه ابۊ.</string>
<string name="title_pref_double_column_display">ر وندن نشۉݩ داڌن دو سۊتۊنی</string> <string name="title_pref_double_column_display">ر وندن نشووݩ داڌن دو سۊتۊنی</string>
<string name="summary_pref_double_column_display">نومگه نمایه یل من دو سۊتۊن نشۉݩ داڌه ابۊن وو چینۉ ترین موئتوا بیشتری ن سیل کۊنین. سی ر وستن، وا برنومه ن ز نۊ ر ونین.</string> <string name="summary_pref_double_column_display">نومگه نمایه یل من دو سۊتۊن نشووݩ داڌه ابۊن وو چینۉ ترین موئتوا بیشتری ن سیل کۊنین. سی ر وستن، وا برنومه ن ز نۊ ر ونین.</string>
<!-- AboutActivity --> <!-- AboutActivity -->
<string name="title_pref_feedback">فشناڌن منشڌ</string> <string name="title_pref_feedback">فشناڌن منشڌ</string>
@@ -244,7 +244,7 @@
<string name="title_outbound_domain_resolve_method">بارت پؽش هل دامنه دری</string> <string name="title_outbound_domain_resolve_method">بارت پؽش هل دامنه دری</string>
<string name="title_mode">هالت</string> <string name="title_mode">هالت</string>
<string name="title_mode_help">سی دووسمندیا وو هیاری بیشتر، ری ای هؽل بزݩ</string> <string name="title_mode_help">سی دووسمندیا وو هیاری بیشتر، ری ای هؽل بزݩ</string>
<string name="title_language">زۉݩ</string> <string name="title_language">زووݩ</string>
<string name="title_ui_settings">سامووا رابت منتوری</string> <string name="title_ui_settings">سامووا رابت منتوری</string>
<string name="title_pref_ui_mode_night">سامووا هالت رابت منتوری</string> <string name="title_pref_ui_mode_night">سامووا هالت رابت منتوری</string>
@@ -269,7 +269,7 @@
<string name="title_sub_update">ورۊ کردن اشتراک جرگه سکویی</string> <string name="title_sub_update">ورۊ کردن اشتراک جرگه سکویی</string>
<string name="title_ping_all_server">Tcping کانفیگا جرگه سکویی</string> <string name="title_ping_all_server">Tcping کانفیگا جرگه سکویی</string>
<string name="title_real_ping_all_server">تئخیر واقعی کانفیگا جرگه سکویی</string> <string name="title_real_ping_all_server">تئخیر واقعی کانفیگا جرگه سکویی</string>
<string name="title_create_intelligent_selection_all_server">Creating Intelligent Selection Current Group Configuration</string> <string name="title_create_intelligent_selection_all_server">وورکل پسند هۊشمند کانفیگ جرگه سکویی</string>
<string name="title_user_asset_setting">فایلا بونچک جوقرافیایی</string> <string name="title_user_asset_setting">فایلا بونچک جوقرافیایی</string>
<string name="title_sort_by_test_results">ترتیب و ری نتیجه یل آزمایش</string> <string name="title_sort_by_test_results">ترتیب و ری نتیجه یل آزمایش</string>
<string name="title_filter_config">فیلتر کردن کانفیگا</string> <string name="title_filter_config">فیلتر کردن کانفیگا</string>
@@ -379,12 +379,12 @@
<item>هل وو ٱووردن و میزبووݩ یل دامنه DNS</item> <item>هل وو ٱووردن و میزبووݩ یل دامنه DNS</item>
<item>هل وو جایونی دامنه</item> <item>هل وو جایونی دامنه</item>
</string-array> </string-array>
<string name="intelligent_selection">Intelligent Selection</string> <string name="intelligent_selection">پسند هۊشمند</string>
<string name="sub_setting_intelligent_selection_filter">Remarks Intelligent Selection regular filter</string> <string name="sub_setting_intelligent_selection_filter">گوڌنا دیاری پسند هۊشمند فیلتر مئمۊلی</string>
<string name="title_intelligent_selection_method">Intelligent Selection Method</string> <string name="title_intelligent_selection_method">بارت پسند هۊشمند</string>
<string-array name="intelligent_selection_method"> <string-array name="intelligent_selection_method">
<item>Least Ping</item> <item>بلم ترین پینگ</item>
<item>Least Load</item> <item>هدقل بار</item>
</string-array> </string-array>
</resources> </resources>

View File

@@ -268,7 +268,7 @@
<string name="title_sub_update">Обновить подписку группы</string> <string name="title_sub_update">Обновить подписку группы</string>
<string name="title_ping_all_server">Проверить профили группы</string> <string name="title_ping_all_server">Проверить профили группы</string>
<string name="title_real_ping_all_server">Время отклика профилей группы</string> <string name="title_real_ping_all_server">Время отклика профилей группы</string>
<string name="title_create_intelligent_selection_all_server">Creating Intelligent Selection Current Group Configuration</string> <string name="title_create_intelligent_selection_all_server">Создать конфигурацию умного выбора</string>
<string name="title_user_asset_setting">Файлы ресурсов</string> <string name="title_user_asset_setting">Файлы ресурсов</string>
<string name="title_sort_by_test_results">Сортировать по результатам теста</string> <string name="title_sort_by_test_results">Сортировать по результатам теста</string>
<string name="title_filter_config">Фильтр групп</string> <string name="title_filter_config">Фильтр групп</string>
@@ -378,12 +378,12 @@
<item>Определять и добавлять к узлам DNS</item> <item>Определять и добавлять к узлам DNS</item>
<item>Определять и заменять домен</item> <item>Определять и заменять домен</item>
</string-array> </string-array>
<string name="intelligent_selection">Intelligent Selection</string> <string name="intelligent_selection">Умный выбор</string>
<string name="sub_setting_intelligent_selection_filter">Remarks Intelligent Selection regular filter</string> <string name="sub_setting_intelligent_selection_filter">Название фильтра умного выбора</string>
<string name="title_intelligent_selection_method">Intelligent Selection Method</string> <string name="title_intelligent_selection_method">Принцип умного выбора</string>
<string-array name="intelligent_selection_method"> <string-array name="intelligent_selection_method">
<item>Least Ping</item> <item>Наименьшая задержка</item>
<item>Least Load</item> <item>Наименьшая нагрузка</item>
</string-array> </string-array>
</resources> </resources>

View File

@@ -3273,6 +3273,10 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
# web_creator may work around age-verification for all videos but requires PO token # web_creator may work around age-verification for all videos but requires PO token
append_client('tv_embedded', 'web_creator') append_client('tv_embedded', 'web_creator')
status = traverse_obj(pr, ('playabilityStatus', 'status', {str}))
if status not in ('OK', 'LIVE_STREAM_OFFLINE', 'AGE_CHECK_REQUIRED', 'AGE_VERIFICATION_REQUIRED'):
self.write_debug(f'{video_id}: {client} player response playability status: {status}')
prs.extend(deprioritized_prs) prs.extend(deprioritized_prs)
if skipped_clients: if skipped_clients: