mirror of
https://github.com/bolucat/Archive.git
synced 2026-04-22 16:07:49 +08:00
Update On Sat Apr 5 20:32:58 CEST 2025
This commit is contained in:
@@ -963,3 +963,4 @@ Update On Tue Apr 1 20:37:22 CEST 2025
|
||||
Update On Wed Apr 2 20:37:16 CEST 2025
|
||||
Update On Thu Apr 3 20:36:49 CEST 2025
|
||||
Update On Fri Apr 4 20:36:13 CEST 2025
|
||||
Update On Sat Apr 5 20:32:49 CEST 2025
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ on:
|
||||
- Alpha
|
||||
tags:
|
||||
- "v*"
|
||||
pull_request_target:
|
||||
pull_request:
|
||||
branches:
|
||||
- Alpha
|
||||
concurrency:
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"build": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tanstack/react-query": "5.71.5",
|
||||
"@tanstack/react-query": "5.71.10",
|
||||
"@tauri-apps/api": "2.4.0",
|
||||
"ahooks": "3.8.4",
|
||||
"dayjs": "1.11.13",
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
"@emotion/styled": "11.14.0",
|
||||
"@juggle/resize-observer": "3.4.0",
|
||||
"@material/material-color-utilities": "0.3.0",
|
||||
"@mui/icons-material": "6.4.9",
|
||||
"@mui/icons-material": "6.4.10",
|
||||
"@mui/lab": "6.0.0-dev.240424162023-9968b4889d",
|
||||
"@mui/material": "6.4.9",
|
||||
"@mui/material": "6.4.10",
|
||||
"@nyanpasu/interface": "workspace:^",
|
||||
"@nyanpasu/ui": "workspace:^",
|
||||
"@tailwindcss/postcss": "4.0.17",
|
||||
@@ -55,7 +55,7 @@
|
||||
"@emotion/react": "11.14.0",
|
||||
"@iconify/json": "2.2.323",
|
||||
"@monaco-editor/react": "4.7.0",
|
||||
"@tanstack/react-query": "5.71.5",
|
||||
"@tanstack/react-query": "5.71.10",
|
||||
"@tanstack/react-router": "1.114.34",
|
||||
"@tanstack/router-devtools": "1.114.34",
|
||||
"@tanstack/router-plugin": "1.114.34",
|
||||
@@ -85,7 +85,7 @@
|
||||
"unplugin-auto-import": "19.1.2",
|
||||
"unplugin-icons": "22.1.0",
|
||||
"validator": "13.15.0",
|
||||
"vite": "6.2.3",
|
||||
"vite": "6.2.5",
|
||||
"vite-plugin-html": "3.2.2",
|
||||
"vite-plugin-sass-dts": "1.3.31",
|
||||
"vite-plugin-svgr": "4.3.0",
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@material/material-color-utilities": "0.3.0",
|
||||
"@mui/icons-material": "6.4.9",
|
||||
"@mui/icons-material": "6.4.10",
|
||||
"@mui/lab": "6.0.0-dev.240424162023-9968b4889d",
|
||||
"@mui/material": "6.4.9",
|
||||
"@mui/material": "6.4.10",
|
||||
"@radix-ui/react-portal": "1.1.4",
|
||||
"@radix-ui/react-scroll-area": "1.2.3",
|
||||
"@tauri-apps/api": "2.4.0",
|
||||
@@ -35,7 +35,7 @@
|
||||
"react-i18next": "15.4.1",
|
||||
"react-use": "17.6.0",
|
||||
"tailwindcss": "4.0.17",
|
||||
"vite": "6.2.3",
|
||||
"vite": "6.2.5",
|
||||
"vite-tsconfig-paths": "5.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"manifest_version": 1,
|
||||
"latest": {
|
||||
"mihomo": "v1.19.4",
|
||||
"mihomo_alpha": "alpha-323973f",
|
||||
"mihomo_alpha": "alpha-190047c",
|
||||
"clash_rs": "v0.7.6",
|
||||
"clash_premium": "2023-09-05-gdcc8d87",
|
||||
"clash_rs_alpha": "0.7.6-alpha+sha.5af4aa5"
|
||||
@@ -69,5 +69,5 @@
|
||||
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
||||
}
|
||||
},
|
||||
"updated_at": "2025-04-03T22:20:50.117Z"
|
||||
"updated_at": "2025-04-04T22:20:45.107Z"
|
||||
}
|
||||
|
||||
Generated
+140
-99
@@ -175,8 +175,8 @@ importers:
|
||||
frontend/interface:
|
||||
dependencies:
|
||||
'@tanstack/react-query':
|
||||
specifier: 5.71.5
|
||||
version: 5.71.5(react@19.1.0)
|
||||
specifier: 5.71.10
|
||||
version: 5.71.10(react@19.1.0)
|
||||
'@tauri-apps/api':
|
||||
specifier: 2.4.0
|
||||
version: 2.4.0
|
||||
@@ -227,14 +227,14 @@ importers:
|
||||
specifier: 0.3.0
|
||||
version: 0.3.0
|
||||
'@mui/icons-material':
|
||||
specifier: 6.4.9
|
||||
version: 6.4.9(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
specifier: 6.4.10
|
||||
version: 6.4.10(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/lab':
|
||||
specifier: 6.0.0-dev.240424162023-9968b4889d
|
||||
version: 6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
version: 6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material':
|
||||
specifier: 6.4.9
|
||||
version: 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 6.4.10
|
||||
version: 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@nyanpasu/interface':
|
||||
specifier: workspace:^
|
||||
version: link:../interface
|
||||
@@ -279,13 +279,13 @@ importers:
|
||||
version: 0.4.0
|
||||
material-react-table:
|
||||
specifier: 3.2.1
|
||||
version: 3.2.1(461b1675e977ce7ddfccdb41b23a2b68)
|
||||
version: 3.2.1(16cae48942a23fa283356967984e1dc9)
|
||||
monaco-editor:
|
||||
specifier: 0.52.2
|
||||
version: 0.52.2
|
||||
mui-color-input:
|
||||
specifier: 5.0.1
|
||||
version: 5.0.1(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
version: 5.0.1(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react:
|
||||
specifier: 19.1.0
|
||||
version: 19.1.0
|
||||
@@ -300,7 +300,7 @@ importers:
|
||||
version: 1.6.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react-hook-form-mui:
|
||||
specifier: 7.5.1
|
||||
version: 7.5.1(520e6035d6408ad75a0cc5e04e702c31)
|
||||
version: 7.5.1(b72ea0bc365d989ec4315188915e6c3b)
|
||||
react-i18next:
|
||||
specifier: 15.4.1
|
||||
version: 15.4.1(i18next@24.2.3(typescript@5.8.2))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -339,8 +339,8 @@ importers:
|
||||
specifier: 4.7.0
|
||||
version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/react-query':
|
||||
specifier: 5.71.5
|
||||
version: 5.71.5(react@19.1.0)
|
||||
specifier: 5.71.10
|
||||
version: 5.71.10(react@19.1.0)
|
||||
'@tanstack/react-router':
|
||||
specifier: 1.114.34
|
||||
version: 1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -349,7 +349,7 @@ importers:
|
||||
version: 1.114.34(@tanstack/react-router@1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.114.33)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tiny-invariant@1.3.3)
|
||||
'@tanstack/router-plugin':
|
||||
specifier: 1.114.34
|
||||
version: 1.114.34(@tanstack/react-router@1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 1.114.34(@tanstack/react-router@1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
'@tauri-apps/plugin-clipboard-manager':
|
||||
specifier: 2.2.2
|
||||
version: 2.2.2
|
||||
@@ -385,13 +385,13 @@ importers:
|
||||
version: 13.12.3
|
||||
'@vitejs/plugin-legacy':
|
||||
specifier: 6.0.2
|
||||
version: 6.0.2(terser@5.36.0)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 6.0.2(terser@5.36.0)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
'@vitejs/plugin-react':
|
||||
specifier: 4.3.4
|
||||
version: 4.3.4(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 4.3.4(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
'@vitejs/plugin-react-swc':
|
||||
specifier: 3.8.1
|
||||
version: 3.8.1(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 3.8.1(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
change-case:
|
||||
specifier: 5.4.4
|
||||
version: 5.4.4
|
||||
@@ -429,20 +429,20 @@ importers:
|
||||
specifier: 13.15.0
|
||||
version: 13.15.0
|
||||
vite:
|
||||
specifier: 6.2.3
|
||||
version: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite-plugin-html:
|
||||
specifier: 3.2.2
|
||||
version: 3.2.2(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 3.2.2(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
vite-plugin-sass-dts:
|
||||
specifier: 1.3.31
|
||||
version: 1.3.31(postcss@8.5.3)(prettier@3.5.3)(sass-embedded@1.86.3)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 1.3.31(postcss@8.5.3)(prettier@3.5.3)(sass-embedded@1.86.3)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
vite-plugin-svgr:
|
||||
specifier: 4.3.0
|
||||
version: 4.3.0(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 4.3.0(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
vite-tsconfig-paths:
|
||||
specifier: 5.1.4
|
||||
version: 5.1.4(typescript@5.8.2)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 5.1.4(typescript@5.8.2)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
zod:
|
||||
specifier: 3.24.2
|
||||
version: 3.24.2
|
||||
@@ -453,14 +453,14 @@ importers:
|
||||
specifier: 0.3.0
|
||||
version: 0.3.0
|
||||
'@mui/icons-material':
|
||||
specifier: 6.4.9
|
||||
version: 6.4.9(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
specifier: 6.4.10
|
||||
version: 6.4.10(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/lab':
|
||||
specifier: 6.0.0-dev.240424162023-9968b4889d
|
||||
version: 6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
version: 6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material':
|
||||
specifier: 6.4.9
|
||||
version: 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
specifier: 6.4.10
|
||||
version: 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@radix-ui/react-portal':
|
||||
specifier: 1.1.4
|
||||
version: 1.1.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -478,7 +478,7 @@ importers:
|
||||
version: 19.0.12
|
||||
'@vitejs/plugin-react':
|
||||
specifier: 4.3.4
|
||||
version: 4.3.4(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 4.3.4(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
ahooks:
|
||||
specifier: 3.8.4
|
||||
version: 3.8.4(react@19.1.0)
|
||||
@@ -507,11 +507,11 @@ importers:
|
||||
specifier: 4.0.17
|
||||
version: 4.0.17
|
||||
vite:
|
||||
specifier: 6.2.3
|
||||
version: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite-tsconfig-paths:
|
||||
specifier: 5.1.4
|
||||
version: 5.1.4(typescript@5.8.2)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 5.1.4(typescript@5.8.2)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
devDependencies:
|
||||
'@emotion/react':
|
||||
specifier: 11.14.0
|
||||
@@ -536,7 +536,7 @@ importers:
|
||||
version: 5.1.0(typescript@5.8.2)
|
||||
vite-plugin-dts:
|
||||
specifier: 4.5.3
|
||||
version: 4.5.3(@types/node@22.13.17)(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
version: 4.5.3(@types/node@22.13.17)(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))
|
||||
|
||||
scripts:
|
||||
dependencies:
|
||||
@@ -1774,14 +1774,14 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/core-downloads-tracker@6.4.9':
|
||||
resolution: {integrity: sha512-3UvsvOjqZJcokHKSzA1lskj2XMM/G5GBgge6ykwmAij2pGGxydGxAXirQlLaeoMwTKDS6BcrLqPZyPVwzri20A==}
|
||||
'@mui/core-downloads-tracker@6.4.10':
|
||||
resolution: {integrity: sha512-cblGjlM6+xsptwyaALw8RbRIUoqmKxOqLxlk2LkTDhxqUuql1YSOKKLH3w+Yd2QLz28b7MR65sx1OjsRZUfOSQ==}
|
||||
|
||||
'@mui/icons-material@6.4.9':
|
||||
resolution: {integrity: sha512-a8l63VIscBteJlh31R88aVgHelCcrhl3Rk0GnN8znTsGhcam9mFeo4Xlw+gLUYQP7mxVcVt3WP9XJkwXWZflnw==}
|
||||
'@mui/icons-material@6.4.10':
|
||||
resolution: {integrity: sha512-c2KdFl4KZ0QYC+JSDTMCNjcuOL2rVSdIx/beo7FwJDh2e9XqC1MoLCjw6L1Jo40zbArkgJyg3oFORbXcRfgZOA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@mui/material': ^6.4.9
|
||||
'@mui/material': ^6.4.10
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
peerDependenciesMeta:
|
||||
@@ -1806,13 +1806,13 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/material@6.4.9':
|
||||
resolution: {integrity: sha512-+5dExw9xUUFujIW889gB3qrfjeNo3YjYW7aWVZ6BlBIJnKpJ0jNcYZJpBUFoXt/FUV5Wy1V+/+XzR3Is2mXX2w==}
|
||||
'@mui/material@6.4.10':
|
||||
resolution: {integrity: sha512-L1B0+Vg9NFjo3NcfODH3bohl6fIkzjyDBHBHb3Al4QI7owaJrFm2sSDyfz++iatzICug6U6q5tHLQrCLO71xkg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@emotion/react': ^11.5.0
|
||||
'@emotion/styled': ^11.3.0
|
||||
'@mui/material-pigment-css': ^6.4.9
|
||||
'@mui/material-pigment-css': ^6.4.10
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
@@ -1846,6 +1846,16 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/private-theming@6.4.9':
|
||||
resolution: {integrity: sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
peerDependenciesMeta:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/styled-engine@5.16.6':
|
||||
resolution: {integrity: sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
@@ -1901,8 +1911,8 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/system@6.4.8':
|
||||
resolution: {integrity: sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA==}
|
||||
'@mui/system@6.4.10':
|
||||
resolution: {integrity: sha512-RyBGQwP3tgo4JEibK+RwVu1a6nQ6y8urMCNsb2aiN/nvTxxumq6P26aoG4GTUf8L4O1sthC4lMXlP4r8ixDkMg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@emotion/react': ^11.5.0
|
||||
@@ -1917,8 +1927,8 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/system@6.4.9':
|
||||
resolution: {integrity: sha512-JOj7efXGtZn+NIzX8KDyMpO1QKc0DhilPBsxvci1xAvI1e5AtAtfzrEuV5ZvN+lz2BDuzngCWlllnqQ/cg40RQ==}
|
||||
'@mui/system@6.4.8':
|
||||
resolution: {integrity: sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@emotion/react': ^11.5.0
|
||||
@@ -1961,6 +1971,16 @@ packages:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/utils@6.4.9':
|
||||
resolution: {integrity: sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
'@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
react: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
peerDependenciesMeta:
|
||||
'@types/react':
|
||||
optional: true
|
||||
|
||||
'@mui/x-date-pickers@7.9.0':
|
||||
resolution: {integrity: sha512-GMDprioHlYmNle8Cbh6TxB4QThDGgqJxfH/R/p/5dNk+Tn5vB1gZSDMn3wVxItiEV6tDXbkyS5gPhSMVFDGvAA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
@@ -2782,11 +2802,11 @@ packages:
|
||||
resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
'@tanstack/query-core@5.71.5':
|
||||
resolution: {integrity: sha512-XOQ5SyjCdwhxyLksGKWSL5poqyEXYPDnsrZAzJm2LgrMm4Yh6VOrfC+IFosXreDw9HNqC11YAMY3HlfHjNzuaA==}
|
||||
'@tanstack/query-core@5.71.10':
|
||||
resolution: {integrity: sha512-/fKEY8fO1nbszfrBatzmhJa1nEwIKn0c6Tv2A1ocSA5OiD2GukOIV8nnBbvJRgZb/VIoBy9/N4PVbABI8YQLow==}
|
||||
|
||||
'@tanstack/react-query@5.71.5':
|
||||
resolution: {integrity: sha512-WpxZWy4fDASjY+iAaXB+aY+LC95PQ34W6EWVkjJ0hdzWWbczFnr9nHvHkVDpwdR18I1NO8igNGQJFrLrgyzI8Q==}
|
||||
'@tanstack/react-query@5.71.10':
|
||||
resolution: {integrity: sha512-mQYM/ObpL8YMDz8vCoUuHkbe8Yu7NnVRH8aBaBa/3zlufjp1f1VuWjeO3TcumNHfuVMDwEAGinsgwrB7OKADiQ==}
|
||||
peerDependencies:
|
||||
react: ^18 || ^19
|
||||
|
||||
@@ -8019,8 +8039,8 @@ packages:
|
||||
vite:
|
||||
optional: true
|
||||
|
||||
vite@6.2.3:
|
||||
resolution: {integrity: sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==}
|
||||
vite@6.2.5:
|
||||
resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==}
|
||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -9668,21 +9688,21 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/core-downloads-tracker@6.4.9': {}
|
||||
'@mui/core-downloads-tracker@6.4.10': {}
|
||||
|
||||
'@mui/icons-material@6.4.9(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)':
|
||||
'@mui/icons-material@6.4.10(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/material': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react: 19.1.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/lab@6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
'@mui/lab@6.0.0-dev.240424162023-9968b4889d(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/base': 5.0.0-beta.42(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/system': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/types': 7.2.24(@types/react@19.0.12)
|
||||
'@mui/utils': 6.4.8(@types/react@19.0.12)(react@19.1.0)
|
||||
@@ -9695,13 +9715,13 @@ snapshots:
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
'@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/core-downloads-tracker': 6.4.9
|
||||
'@mui/system': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/core-downloads-tracker': 6.4.10
|
||||
'@mui/system': 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/types': 7.2.24(@types/react@19.0.12)
|
||||
'@mui/utils': 6.4.8(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/utils': 6.4.9(@types/react@19.0.12)(react@19.1.0)
|
||||
'@popperjs/core': 2.11.8
|
||||
'@types/react-transition-group': 4.4.12(@types/react@19.0.12)
|
||||
clsx: 2.1.1
|
||||
@@ -9734,6 +9754,15 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/private-theming@6.4.9(@types/react@19.0.12)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/utils': 6.4.9(@types/react@19.0.12)(react@19.1.0)
|
||||
prop-types: 15.8.1
|
||||
react: 19.1.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/styled-engine@5.16.6(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
@@ -9787,13 +9816,13 @@ snapshots:
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/system@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)':
|
||||
'@mui/system@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/private-theming': 6.4.8(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/styled-engine': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(react@19.1.0)
|
||||
'@mui/private-theming': 6.4.9(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/styled-engine': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(react@19.1.0)
|
||||
'@mui/types': 7.2.24(@types/react@19.0.12)
|
||||
'@mui/utils': 6.4.8(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/utils': 6.4.9(@types/react@19.0.12)(react@19.1.0)
|
||||
clsx: 2.1.1
|
||||
csstype: 3.1.3
|
||||
prop-types: 15.8.1
|
||||
@@ -9803,11 +9832,11 @@ snapshots:
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/system@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)':
|
||||
'@mui/system@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/private-theming': 6.4.8(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/styled-engine': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(react@19.1.0)
|
||||
'@mui/styled-engine': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(react@19.1.0)
|
||||
'@mui/types': 7.2.24(@types/react@19.0.12)
|
||||
'@mui/utils': 6.4.8(@types/react@19.0.12)(react@19.1.0)
|
||||
clsx: 2.1.1
|
||||
@@ -9847,11 +9876,23 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/x-date-pickers@7.9.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
'@mui/utils@6.4.9(@types/react@19.0.12)(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/types': 7.2.24(@types/react@19.0.12)
|
||||
'@types/prop-types': 15.7.14
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
react: 19.1.0
|
||||
react-is: 19.0.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
'@mui/x-date-pickers@7.9.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
'@mui/base': 5.0.0-beta.70(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/system': 5.16.7(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/utils': 5.16.6(@types/react@19.0.12)(react@19.1.0)
|
||||
'@types/react-transition-group': 4.4.12(@types/react@19.0.12)
|
||||
@@ -10606,11 +10647,11 @@ snapshots:
|
||||
dependencies:
|
||||
remove-accents: 0.5.0
|
||||
|
||||
'@tanstack/query-core@5.71.5': {}
|
||||
'@tanstack/query-core@5.71.10': {}
|
||||
|
||||
'@tanstack/react-query@5.71.5(react@19.1.0)':
|
||||
'@tanstack/react-query@5.71.10(react@19.1.0)':
|
||||
dependencies:
|
||||
'@tanstack/query-core': 5.71.5
|
||||
'@tanstack/query-core': 5.71.10
|
||||
react: 19.1.0
|
||||
|
||||
'@tanstack/react-router-devtools@1.114.34(@tanstack/react-router@1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.114.33)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tiny-invariant@1.3.3)':
|
||||
@@ -10694,7 +10735,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@tanstack/react-router': 1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
|
||||
'@tanstack/router-plugin@1.114.34(@tanstack/react-router@1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
'@tanstack/router-plugin@1.114.34(@tanstack/react-router@1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.9
|
||||
'@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9)
|
||||
@@ -10715,7 +10756,7 @@ snapshots:
|
||||
zod: 3.24.2
|
||||
optionalDependencies:
|
||||
'@tanstack/react-router': 1.114.34(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -11224,7 +11265,7 @@ snapshots:
|
||||
|
||||
'@ungap/structured-clone@1.2.0': {}
|
||||
|
||||
'@vitejs/plugin-legacy@6.0.2(terser@5.36.0)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
'@vitejs/plugin-legacy@6.0.2(terser@5.36.0)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.9
|
||||
'@babel/preset-env': 7.26.9(@babel/core@7.26.9)
|
||||
@@ -11235,25 +11276,25 @@ snapshots:
|
||||
regenerator-runtime: 0.14.1
|
||||
systemjs: 6.15.1
|
||||
terser: 5.36.0
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@vitejs/plugin-react-swc@3.8.1(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
'@vitejs/plugin-react-swc@3.8.1(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@swc/core': 1.11.11
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- '@swc/helpers'
|
||||
|
||||
'@vitejs/plugin-react@4.3.4(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
'@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@babel/core': 7.26.0
|
||||
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0)
|
||||
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0)
|
||||
'@types/babel__core': 7.20.5
|
||||
react-refresh: 0.14.2
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -14134,13 +14175,13 @@ snapshots:
|
||||
escape-string-regexp: 4.0.0
|
||||
optional: true
|
||||
|
||||
material-react-table@3.2.1(461b1675e977ce7ddfccdb41b23a2b68):
|
||||
material-react-table@3.2.1(16cae48942a23fa283356967984e1dc9):
|
||||
dependencies:
|
||||
'@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.1.0)
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/icons-material': 6.4.9(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/material': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/icons-material': 6.4.10(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/material': 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/match-sorter-utils': 8.19.4
|
||||
'@tanstack/react-table': 8.20.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@tanstack/react-virtual': 3.11.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
@@ -14491,12 +14532,12 @@ snapshots:
|
||||
|
||||
muggle-string@0.4.1: {}
|
||||
|
||||
mui-color-input@5.0.1(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||
mui-color-input@5.0.1(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||
dependencies:
|
||||
'@ctrl/tinycolor': 4.1.0
|
||||
'@emotion/react': 11.14.0(@types/react@19.0.12)(react@19.1.0)
|
||||
'@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/material': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
optionalDependencies:
|
||||
@@ -15065,14 +15106,14 @@ snapshots:
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
|
||||
react-hook-form-mui@7.5.1(520e6035d6408ad75a0cc5e04e702c31):
|
||||
react-hook-form-mui@7.5.1(b72ea0bc365d989ec4315188915e6c3b):
|
||||
dependencies:
|
||||
'@mui/material': 6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/material': 6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
react: 19.1.0
|
||||
react-hook-form: 7.52.1(react@19.1.0)
|
||||
optionalDependencies:
|
||||
'@mui/icons-material': 6.4.9(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.9(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@mui/icons-material': 6.4.10(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(react@19.1.0)
|
||||
'@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@mui/material@6.4.10(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react@19.1.0))(@types/react@19.0.12)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.0.12)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
|
||||
react-hook-form@7.52.1(react@19.1.0):
|
||||
dependencies:
|
||||
@@ -16433,7 +16474,7 @@ snapshots:
|
||||
- rollup
|
||||
- supports-color
|
||||
|
||||
vite-plugin-dts@4.5.3(@types/node@22.13.17)(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
vite-plugin-dts@4.5.3(@types/node@22.13.17)(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
dependencies:
|
||||
'@microsoft/api-extractor': 7.51.0(@types/node@22.13.17)
|
||||
'@rollup/pluginutils': 5.1.4(rollup@4.34.3)
|
||||
@@ -16446,13 +16487,13 @@ snapshots:
|
||||
magic-string: 0.30.17
|
||||
typescript: 5.8.2
|
||||
optionalDependencies:
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- rollup
|
||||
- supports-color
|
||||
|
||||
vite-plugin-html@3.2.2(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
vite-plugin-html@3.2.2(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
colorette: 2.0.20
|
||||
@@ -16466,39 +16507,39 @@ snapshots:
|
||||
html-minifier-terser: 6.1.0
|
||||
node-html-parser: 5.4.2
|
||||
pathe: 0.2.0
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
|
||||
vite-plugin-sass-dts@1.3.31(postcss@8.5.3)(prettier@3.5.3)(sass-embedded@1.86.3)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
vite-plugin-sass-dts@1.3.31(postcss@8.5.3)(prettier@3.5.3)(sass-embedded@1.86.3)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-js: 4.0.1(postcss@8.5.3)
|
||||
prettier: 3.5.3
|
||||
sass-embedded: 1.86.3
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
|
||||
vite-plugin-svgr@4.3.0(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
vite-plugin-svgr@4.3.0(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 5.1.3(rollup@4.34.3)
|
||||
'@svgr/core': 8.1.0(typescript@5.8.2)
|
||||
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.2))
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite-tsconfig-paths@5.1.4(typescript@5.8.2)(vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
vite-tsconfig-paths@5.1.4(typescript@5.8.2)(vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)):
|
||||
dependencies:
|
||||
debug: 4.3.7
|
||||
globrex: 0.1.2
|
||||
tsconfck: 3.0.3(typescript@5.8.2)
|
||||
optionalDependencies:
|
||||
vite: 6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
vite: 6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite@6.2.3(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0):
|
||||
vite@6.2.5(@types/node@22.13.17)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.2)(sass-embedded@1.86.3)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0):
|
||||
dependencies:
|
||||
esbuild: 0.25.0
|
||||
postcss: 8.5.3
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#### 已知问题
|
||||
- 仅在Ubuntu 22.04/24.04,Fedora 41 **Gnome桌面环境** 做过简单测试,不保证其他其他Linux发行版可用,将在未来做进一步适配和调优
|
||||
- MacOS 自定义图标与速率显示推荐图标尺寸为 256x256。其他尺寸(可能)会导致不正常图标和速率间隙
|
||||
- MacOS 下 MacBook 外接显示器且盒盖关闭时速率图标闪烁
|
||||
- MacOS 下 墙贴主要为浅色,Tray 图标深色时图标闪烁
|
||||
- Linux 下 Clash Verge Rev 内存占用显著高于 Windows / MacOS
|
||||
|
||||
### 2.2.3-alpha 相对于 2.2.2
|
||||
@@ -18,6 +18,7 @@
|
||||
- 相同节点名称可能导致的页面渲染出错
|
||||
- URL Schemes被截断的问题
|
||||
- 首页流量统计卡更好的时间戳范围
|
||||
- 静默启动无法触发自动轻量化计时器
|
||||
|
||||
#### 新增了:
|
||||
- Mihomo(Meta)内核升级至 1.19.4
|
||||
|
||||
@@ -103,7 +103,7 @@ pub async fn patch_profiles_config(profiles: IProfiles) -> CmdResult<bool> {
|
||||
);
|
||||
handle::Handle::notice_message(
|
||||
"config_validate::file_not_found",
|
||||
&format!("{}", file_path.display()),
|
||||
format!("{}", file_path.display()),
|
||||
);
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ impl Hotkey {
|
||||
let enable_global_hotkey = verge.latest().enable_global_hotkey.unwrap_or(true);
|
||||
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Initializing hotkeys with enable: {}",
|
||||
@@ -44,7 +44,7 @@ impl Hotkey {
|
||||
|
||||
if let Some(hotkeys) = verge.latest().hotkeys.as_ref() {
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Has {} hotkeys need to register",
|
||||
@@ -59,7 +59,7 @@ impl Hotkey {
|
||||
match (key, func) {
|
||||
(Some(key), Some(func)) => {
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Registering hotkey: {} -> {}",
|
||||
@@ -78,7 +78,7 @@ impl Hotkey {
|
||||
);
|
||||
} else {
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Successfully registered hotkey {} -> {}",
|
||||
@@ -103,7 +103,7 @@ impl Hotkey {
|
||||
}
|
||||
self.current.lock().clone_from(hotkeys);
|
||||
} else {
|
||||
logging!(info, Type::Hotkey, true, "No hotkeys configured");
|
||||
logging!(debug, Type::Hotkey, true, "No hotkeys configured");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@@ -121,7 +121,7 @@ impl Hotkey {
|
||||
let manager = app_handle.global_shortcut();
|
||||
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Attempting to register hotkey: {} for function: {}",
|
||||
@@ -131,7 +131,7 @@ impl Hotkey {
|
||||
|
||||
if manager.is_registered(hotkey) {
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Hotkey {} was already registered, unregistering first",
|
||||
@@ -143,14 +143,14 @@ impl Hotkey {
|
||||
let f = match func.trim() {
|
||||
"open_or_close_dashboard" => {
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Registering open_or_close_dashboard function"
|
||||
);
|
||||
|| {
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"=== Hotkey Dashboard Window Operation Start ==="
|
||||
@@ -159,7 +159,7 @@ impl Hotkey {
|
||||
// 使用 spawn_blocking 来确保在正确的线程上执行
|
||||
async_runtime::spawn_blocking(|| {
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Toggle dashboard window visibility"
|
||||
@@ -188,12 +188,12 @@ impl Hotkey {
|
||||
true,
|
||||
"Window does not exist, creating a new one"
|
||||
);
|
||||
resolve::create_window();
|
||||
resolve::create_window(true);
|
||||
}
|
||||
});
|
||||
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"=== Hotkey Dashboard Window Operation End ==="
|
||||
@@ -220,18 +220,18 @@ impl Hotkey {
|
||||
|
||||
let _ = manager.on_shortcut(hotkey, move |app_handle, hotkey, event| {
|
||||
if event.state == ShortcutState::Pressed {
|
||||
logging!(info, Type::Hotkey, true, "Hotkey pressed: {:?}", hotkey);
|
||||
logging!(debug, Type::Hotkey, true, "Hotkey pressed: {:?}", hotkey);
|
||||
|
||||
if hotkey.key == Code::KeyQ && is_quit {
|
||||
if let Some(window) = app_handle.get_webview_window("main") {
|
||||
if window.is_focused().unwrap_or(false) {
|
||||
logging!(info, Type::Hotkey, true, "Executing quit function");
|
||||
logging!(debug, Type::Hotkey, true, "Executing quit function");
|
||||
f();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 直接执行函数,不做任何状态检查
|
||||
logging!(info, Type::Hotkey, true, "Executing function directly");
|
||||
logging!(debug, Type::Hotkey, true, "Executing function directly");
|
||||
|
||||
// 获取全局热键状态
|
||||
let is_enable_global_hotkey = Config::verge()
|
||||
@@ -255,7 +255,7 @@ impl Hotkey {
|
||||
});
|
||||
|
||||
logging!(
|
||||
info,
|
||||
debug,
|
||||
Type::Hotkey,
|
||||
true,
|
||||
"Successfully registered hotkey {} for {}",
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use crate::{config::Config, core::CoreManager, feat};
|
||||
use crate::{
|
||||
config::Config, core::CoreManager, feat, logging, logging_error, utils::logging::Type,
|
||||
};
|
||||
use anyhow::{Context, Result};
|
||||
use delay_timer::prelude::{DelayTimer, DelayTimerBuilder, TaskBuilder};
|
||||
use once_cell::sync::OnceCell;
|
||||
@@ -54,18 +56,18 @@ impl Timer {
|
||||
)
|
||||
.is_err()
|
||||
{
|
||||
log::debug!(target: "app", "Timer already initialized, skipping...");
|
||||
logging!(debug, Type::Timer, "Timer already initialized, skipping...");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
log::info!(target: "app", "Initializing timer...");
|
||||
logging!(info, Type::Timer, true, "Initializing timer...");
|
||||
|
||||
// Initialize timer tasks
|
||||
if let Err(e) = self.refresh() {
|
||||
// Reset initialization flag on error
|
||||
self.initialized
|
||||
.store(false, std::sync::atomic::Ordering::SeqCst);
|
||||
log::error!(target: "app", "Failed to initialize timer: {}", e);
|
||||
logging_error!(Type::Timer, false, "Failed to initialize timer: {}", e);
|
||||
return Err(e);
|
||||
}
|
||||
|
||||
@@ -98,15 +100,15 @@ impl Timer {
|
||||
|
||||
for uid in profiles_to_update {
|
||||
if let Some(task) = timer_map.get(&uid) {
|
||||
log::info!(target: "app", "Advancing task for uid: {}", uid);
|
||||
logging!(info, Type::Timer, "Advancing task for uid: {}", uid);
|
||||
if let Err(e) = delay_timer.advance_task(task.task_id) {
|
||||
log::warn!(target: "app", "Failed to advance task {}: {}", uid, e);
|
||||
logging!(warn, Type::Timer, "Failed to advance task {}: {}", uid, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log::info!(target: "app", "Timer initialization completed");
|
||||
logging!(info, Type::Timer, "Timer initialization completed");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -116,11 +118,16 @@ impl Timer {
|
||||
let diff_map = self.gen_diff();
|
||||
|
||||
if diff_map.is_empty() {
|
||||
log::debug!(target: "app", "No timer changes needed");
|
||||
logging!(debug, Type::Timer, "No timer changes needed");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
log::info!(target: "app", "Refreshing {} timer tasks", diff_map.len());
|
||||
logging!(
|
||||
info,
|
||||
Type::Timer,
|
||||
"Refreshing {} timer tasks",
|
||||
diff_map.len()
|
||||
);
|
||||
|
||||
// Apply changes while holding locks
|
||||
let mut timer_map = self.timer_map.write();
|
||||
@@ -131,9 +138,16 @@ impl Timer {
|
||||
DiffFlag::Del(tid) => {
|
||||
timer_map.remove(&uid);
|
||||
if let Err(e) = delay_timer.remove_task(tid) {
|
||||
log::warn!(target: "app", "Failed to remove task {} for uid {}: {}", tid, uid, e);
|
||||
logging!(
|
||||
warn,
|
||||
Type::Timer,
|
||||
"Failed to remove task {} for uid {}: {}",
|
||||
tid,
|
||||
uid,
|
||||
e
|
||||
);
|
||||
} else {
|
||||
log::debug!(target: "app", "Removed task {} for uid {}", tid, uid);
|
||||
logging!(debug, Type::Timer, "Removed task {} for uid {}", tid, uid);
|
||||
}
|
||||
}
|
||||
DiffFlag::Add(tid, interval) => {
|
||||
@@ -146,16 +160,23 @@ impl Timer {
|
||||
timer_map.insert(uid.clone(), task);
|
||||
|
||||
if let Err(e) = self.add_task(&mut delay_timer, uid.clone(), tid, interval) {
|
||||
log::error!(target: "app", "Failed to add task for uid {}: {}", uid, e);
|
||||
logging_error!(Type::Timer, "Failed to add task for uid {}: {}", uid, e);
|
||||
timer_map.remove(&uid); // Rollback on failure
|
||||
} else {
|
||||
log::debug!(target: "app", "Added task {} for uid {}", tid, uid);
|
||||
logging!(debug, Type::Timer, "Added task {} for uid {}", tid, uid);
|
||||
}
|
||||
}
|
||||
DiffFlag::Mod(tid, interval) => {
|
||||
// Remove old task first
|
||||
if let Err(e) = delay_timer.remove_task(tid) {
|
||||
log::warn!(target: "app", "Failed to remove old task {} for uid {}: {}", tid, uid, e);
|
||||
logging!(
|
||||
warn,
|
||||
Type::Timer,
|
||||
"Failed to remove old task {} for uid {}: {}",
|
||||
tid,
|
||||
uid,
|
||||
e
|
||||
);
|
||||
}
|
||||
|
||||
// Then add the new one
|
||||
@@ -168,10 +189,10 @@ impl Timer {
|
||||
timer_map.insert(uid.clone(), task);
|
||||
|
||||
if let Err(e) = self.add_task(&mut delay_timer, uid.clone(), tid, interval) {
|
||||
log::error!(target: "app", "Failed to update task for uid {}: {}", uid, e);
|
||||
logging_error!(Type::Timer, "Failed to update task for uid {}: {}", uid, e);
|
||||
timer_map.remove(&uid); // Rollback on failure
|
||||
} else {
|
||||
log::debug!(target: "app", "Updated task {} for uid {}", tid, uid);
|
||||
logging!(debug, Type::Timer, "Updated task {} for uid {}", tid, uid);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -250,7 +271,14 @@ impl Timer {
|
||||
tid: TaskID,
|
||||
minutes: u64,
|
||||
) -> Result<()> {
|
||||
log::info!(target: "app", "Adding task: uid={}, id={}, interval={}min", uid, tid, minutes);
|
||||
logging!(
|
||||
info,
|
||||
Type::Timer,
|
||||
"Adding task: uid={}, id={}, interval={}min",
|
||||
uid,
|
||||
tid,
|
||||
minutes
|
||||
);
|
||||
|
||||
// Create a task with reasonable retries and backoff
|
||||
let task = TaskBuilder::default()
|
||||
@@ -275,7 +303,7 @@ impl Timer {
|
||||
/// Async task with better error handling and logging
|
||||
async fn async_task(uid: String) {
|
||||
let task_start = std::time::Instant::now();
|
||||
log::info!(target: "app", "Running timer task for profile: {}", uid);
|
||||
logging!(info, Type::Timer, "Running timer task for profile: {}", uid);
|
||||
|
||||
// Update profile
|
||||
let profile_result = feat::update_profile(uid.clone(), None).await;
|
||||
@@ -286,23 +314,26 @@ impl Timer {
|
||||
match CoreManager::global().update_config().await {
|
||||
Ok(_) => {
|
||||
let duration = task_start.elapsed().as_millis();
|
||||
log::info!(
|
||||
target: "app",
|
||||
logging!(
|
||||
info,
|
||||
Type::Timer,
|
||||
"Timer task completed successfully for uid: {} (took {}ms)",
|
||||
uid, duration
|
||||
uid,
|
||||
duration
|
||||
);
|
||||
}
|
||||
Err(e) => {
|
||||
log::error!(
|
||||
target: "app",
|
||||
logging_error!(
|
||||
Type::Timer,
|
||||
"Failed to refresh config after profile update for uid {}: {}",
|
||||
uid, e
|
||||
uid,
|
||||
e
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
log::error!(target: "app", "Failed to update profile uid {}: {}", uid, e);
|
||||
logging_error!(Type::Timer, "Failed to update profile uid {}: {}", uid, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ impl Tray {
|
||||
match tray_event.as_str() {
|
||||
"system_proxy" => feat::toggle_system_proxy(),
|
||||
"tun_mode" => feat::toggle_tun_mode(None),
|
||||
"main_window" => resolve::create_window(),
|
||||
"main_window" => resolve::create_window(true),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
@@ -309,13 +309,8 @@ impl Tray {
|
||||
|
||||
let rate = rate_guard.as_ref();
|
||||
let rate_bytes = SpeedRate::add_speed_text(is_custom_icon, bytes, rate).unwrap();
|
||||
|
||||
let _ = tray.set_icon(Some(tauri::image::Image::from_bytes(&rate_bytes)?));
|
||||
if !is_custom_icon {
|
||||
let _ = tray.set_icon_as_template(!is_colorful);
|
||||
} else {
|
||||
let _ = tray.set_icon_as_template(false);
|
||||
}
|
||||
let _ = tray.set_icon_as_template(!is_custom_icon && !is_colorful);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -680,7 +675,7 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) {
|
||||
println!("change mode to: {}", mode);
|
||||
feat::change_clash_mode(mode.into());
|
||||
}
|
||||
"open_window" => resolve::create_window(),
|
||||
"open_window" => resolve::create_window(true),
|
||||
"system_proxy" => feat::toggle_system_proxy(),
|
||||
"tun_mode" => feat::toggle_tun_mode(None),
|
||||
"copy_env" => feat::copy_clash_env(),
|
||||
|
||||
@@ -94,13 +94,6 @@ impl SpeedRate {
|
||||
image::DynamicImage::new_rgba8(0, 0)
|
||||
};
|
||||
|
||||
// 判断是否为彩色图标
|
||||
let is_colorful = if let Some(bytes) = icon_bytes.clone() {
|
||||
!crate::utils::help::is_monochrome_image_from_bytes(&bytes).unwrap_or(false)
|
||||
} else {
|
||||
false
|
||||
};
|
||||
|
||||
let total_width = match (is_custom_icon, icon_bytes.is_some()) {
|
||||
(true, true) => 510,
|
||||
(true, false) => 740,
|
||||
@@ -126,18 +119,28 @@ impl SpeedRate {
|
||||
}
|
||||
}
|
||||
|
||||
let is_colorful = if let Some(bytes) = icon_bytes.clone() {
|
||||
!crate::utils::help::is_monochrome_image_from_bytes(&bytes).unwrap_or(false)
|
||||
} else {
|
||||
false
|
||||
};
|
||||
|
||||
// 选择文本颜色
|
||||
let (text_color, shadow_color) = if is_colorful {
|
||||
// 彩色图标使用黑色文本和轻微白色阴影
|
||||
(
|
||||
Rgba([255u8, 255u8, 255u8, 255u8]),
|
||||
Rgba([0u8, 0u8, 0u8, 160u8]),
|
||||
Rgba([144u8, 144u8, 144u8, 255u8]),
|
||||
// Rgba([255u8, 255u8, 255u8, 128u8]),
|
||||
Rgba([0u8, 0u8, 0u8, 128u8]),
|
||||
)
|
||||
// (
|
||||
// Rgba([160u8, 160u8, 160u8, 255u8]),
|
||||
// // Rgba([255u8, 255u8, 255u8, 128u8]),
|
||||
// Rgba([0u8, 0u8, 0u8, 255u8]),
|
||||
// )
|
||||
} else {
|
||||
// 单色图标使用白色文本和轻微黑色阴影
|
||||
(
|
||||
Rgba([255u8, 255u8, 255u8, 255u8]),
|
||||
Rgba([0u8, 0u8, 0u8, 120u8]),
|
||||
Rgba([0u8, 0u8, 0u8, 128u8]),
|
||||
)
|
||||
};
|
||||
// 减小字体大小以适应文本区域
|
||||
|
||||
@@ -6,8 +6,6 @@ use crate::{
|
||||
module::mihomo::MihomoManager,
|
||||
utils::resolve,
|
||||
};
|
||||
use tauri::Manager;
|
||||
use tauri_plugin_window_state::{AppHandleExt, StateFlags};
|
||||
|
||||
/// Open or close the dashboard window
|
||||
#[allow(dead_code)]
|
||||
@@ -47,43 +45,10 @@ pub fn open_or_close_dashboard() {
|
||||
} else {
|
||||
println!("No existing window found, creating new window");
|
||||
log::info!(target: "app", "No existing window found, creating new window");
|
||||
resolve::create_window();
|
||||
resolve::create_window(true);
|
||||
}
|
||||
}
|
||||
|
||||
/// Setup window state monitor to save window position and size in real-time
|
||||
pub fn setup_window_state_monitor(app_handle: &tauri::AppHandle) {
|
||||
// 暂时移除实时监控-保存窗口位置和大小,这个特性可能会导致窗口异常大小和位置,需要进一步优化
|
||||
//
|
||||
|
||||
// let window = app_handle.get_webview_window("main").unwrap();
|
||||
// let app_handle_clone = app_handle.clone();
|
||||
|
||||
// // 监听窗口移动事件
|
||||
// let app_handle_move = app_handle_clone.clone();
|
||||
// window.on_window_event(move |event| {
|
||||
// match event {
|
||||
// // 窗口移动时保存状态
|
||||
// tauri::WindowEvent::Moved(_) => {
|
||||
// let _ = app_handle_move.save_window_state(StateFlags::all());
|
||||
// }
|
||||
// // 窗口调整大小时保存状态
|
||||
// tauri::WindowEvent::Resized(_) => {
|
||||
// let _ = app_handle_move.save_window_state(StateFlags::all());
|
||||
// }
|
||||
// // 其他可能改变窗口状态的事件
|
||||
// tauri::WindowEvent::ScaleFactorChanged { .. } => {
|
||||
// let _ = app_handle_move.save_window_state(StateFlags::all());
|
||||
// }
|
||||
// // 窗口关闭时保存
|
||||
// tauri::WindowEvent::CloseRequested { .. } => {
|
||||
// let _ = app_handle_move.save_window_state(StateFlags::all());
|
||||
// }
|
||||
// _ => {}
|
||||
// }
|
||||
// });
|
||||
}
|
||||
|
||||
/// 优化的应用退出函数
|
||||
pub fn quit(code: Option<i32>) {
|
||||
log::debug!(target: "app", "启动退出流程");
|
||||
|
||||
@@ -13,6 +13,7 @@ use crate::{
|
||||
const LIGHT_WEIGHT_TASK_UID: &str = "light_weight_task";
|
||||
|
||||
pub fn enable_auto_light_weight_mode() {
|
||||
Timer::global().init().unwrap();
|
||||
logging!(info, Type::Lightweight, true, "开启自动轻量模式");
|
||||
setup_window_close_listener();
|
||||
setup_webview_focus_listener();
|
||||
|
||||
@@ -39,10 +39,7 @@ impl PlatformSpecification {
|
||||
// 使用默认值避免在同步上下文中执行异步操作
|
||||
let running_mode = "NotRunning".to_string();
|
||||
|
||||
let is_admin = match system::is_admin() {
|
||||
Ok(value) => value,
|
||||
Err(_) => false,
|
||||
};
|
||||
let is_admin = system::is_admin().unwrap_or_default();
|
||||
|
||||
Self {
|
||||
system_name,
|
||||
|
||||
@@ -86,12 +86,17 @@ macro_rules! wrap_err {
|
||||
#[macro_export]
|
||||
macro_rules! logging {
|
||||
// 带 println 的版本(支持格式化参数)
|
||||
($level:ident, $type:expr, $print:expr, $($arg:tt)*) => {
|
||||
($level:ident, $type:expr, true, $($arg:tt)*) => {
|
||||
println!("{} {}", $type, format_args!($($arg)*));
|
||||
log::$level!(target: "app", "{} {}", $type, format_args!($($arg)*));
|
||||
};
|
||||
|
||||
// 不带 println 的版本
|
||||
// 带 println 的版本(使用 false 明确不打印)
|
||||
($level:ident, $type:expr, false, $($arg:tt)*) => {
|
||||
log::$level!(target: "app", "{} {}", $type, format_args!($($arg)*));
|
||||
};
|
||||
|
||||
// 不带 print 参数的版本(默认不打印)
|
||||
($level:ident, $type:expr, $($arg:tt)*) => {
|
||||
log::$level!(target: "app", "{} {}", $type, format_args!($($arg)*));
|
||||
};
|
||||
@@ -99,7 +104,7 @@ macro_rules! logging {
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! logging_error {
|
||||
// Version with println and Result expression
|
||||
// 1. 处理 Result<T, E>,带打印控制
|
||||
($type:expr, $print:expr, $expr:expr) => {
|
||||
match $expr {
|
||||
Ok(_) => {},
|
||||
@@ -107,28 +112,28 @@ macro_rules! logging_error {
|
||||
if $print {
|
||||
println!("[{}] Error: {}", $type, err);
|
||||
}
|
||||
log::error!(target: "app", "{} {}", $type, err);
|
||||
log::error!(target: "app", "[{}] {}", $type, err);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Version without println and Result expression
|
||||
// 2. 处理 Result<T, E>,默认不打印
|
||||
($type:expr, $expr:expr) => {
|
||||
if let Err(err) = $expr {
|
||||
log::error!(target: "app", "{} {}", $type, err);
|
||||
log::error!(target: "app", "[{}] {}", $type, err);
|
||||
}
|
||||
};
|
||||
|
||||
// Version with println and custom message
|
||||
($type:expr, $print:expr, $($arg:tt)*) => {
|
||||
// 3. 处理格式化字符串,带打印控制
|
||||
($type:expr, $print:expr, $fmt:literal $(, $arg:expr)*) => {
|
||||
if $print {
|
||||
println!("[{}] {}", $type, format_args!($($arg)*));
|
||||
println!("[{}] {}", $type, format_args!($fmt $(, $arg)*));
|
||||
}
|
||||
log::error!(target: "app", "{} {}", $type, format_args!($($arg)*));
|
||||
log::error!(target: "app", "[{}] {}", $type, format_args!($fmt $(, $arg)*));
|
||||
};
|
||||
|
||||
// Version without println and custom message
|
||||
($type:expr, $($arg:tt)*) => {
|
||||
log::error!(target: "app", "{} {}", $type, format_args!($($arg)*));
|
||||
// 4. 处理格式化字符串,不带 bool 时,默认 `false`
|
||||
($type:expr, $fmt:literal $(, $arg:expr)*) => {
|
||||
logging_error!($type, false, $fmt $(, $arg)*);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -61,35 +61,6 @@ pub async fn resolve_setup(app: &mut App) {
|
||||
logging!(trace, Type::Config, true, "Initial config");
|
||||
logging_error!(Type::Config, true, Config::init_config().await);
|
||||
|
||||
// if service::check_service().await.is_err() {
|
||||
// match service::install_service().await {
|
||||
// Ok(_) => {
|
||||
// log::info!(target:"app", "install service susccess.");
|
||||
// #[cfg(not(target_os = "macos"))]
|
||||
// std::thread::sleep(std::time::Duration::from_millis(1000));
|
||||
// #[cfg(target_os = "macos")]
|
||||
// {
|
||||
// let mut service_runing = false;
|
||||
// for _ in 0..40 {
|
||||
// if service::check_service().await.is_ok() {
|
||||
// service_runing = true;
|
||||
// break;
|
||||
// } else {
|
||||
// log::warn!(target: "app", "service not runing, sleep 500ms and check again.");
|
||||
// std::thread::sleep(std::time::Duration::from_millis(500));
|
||||
// }
|
||||
// }
|
||||
// if !service_runing {
|
||||
// log::warn!(target: "app", "service not running, will fallback to user mode");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// Err(e) => {
|
||||
// log::warn!(target: "app", "failed to install service: {e:?}, will fallback to user mode");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
logging!(trace, Type::Core, "Starting CoreManager");
|
||||
logging_error!(Type::Core, true, CoreManager::global().init().await);
|
||||
|
||||
@@ -112,22 +83,21 @@ pub async fn resolve_setup(app: &mut App) {
|
||||
sysopt::Sysopt::global().init_guard_sysproxy()
|
||||
);
|
||||
|
||||
// 初始化热键
|
||||
logging!(trace, Type::System, true, "Initial hotkeys");
|
||||
logging_error!(Type::System, true, hotkey::Hotkey::global().init());
|
||||
let is_silent_start = { Config::verge().data().enable_silent_start }.unwrap_or(false);
|
||||
create_window(!is_silent_start);
|
||||
|
||||
let silent_start = { Config::verge().data().enable_silent_start };
|
||||
if !silent_start.unwrap_or(false) {
|
||||
create_window();
|
||||
}
|
||||
|
||||
logging_error!(Type::Tray, true, tray::Tray::global().update_part());
|
||||
logging_error!(Type::System, true, timer::Timer::global().init());
|
||||
|
||||
let enable_auto_light_weight_mode = { Config::verge().data().enable_auto_light_weight_mode };
|
||||
if enable_auto_light_weight_mode.unwrap_or(false) {
|
||||
lightweight::enable_auto_light_weight_mode();
|
||||
}
|
||||
|
||||
logging_error!(Type::Tray, true, tray::Tray::global().update_part());
|
||||
|
||||
// 初始化热键
|
||||
logging!(trace, Type::System, true, "Initial hotkeys");
|
||||
logging_error!(Type::System, true, hotkey::Hotkey::global().init());
|
||||
}
|
||||
|
||||
/// reset system proxy (异步版)
|
||||
@@ -151,7 +121,7 @@ pub async fn resolve_reset_async() {
|
||||
}
|
||||
|
||||
/// create main window
|
||||
pub fn create_window() {
|
||||
pub fn create_window(is_showup: bool) {
|
||||
logging!(info, Type::Window, true, "Creating window");
|
||||
|
||||
let app_handle = handle::Handle::global().app_handle().unwrap();
|
||||
@@ -226,17 +196,19 @@ pub fn create_window() {
|
||||
|
||||
match window {
|
||||
Ok(window) => {
|
||||
logging!(
|
||||
info,
|
||||
Type::Window,
|
||||
true,
|
||||
"Window created successfully, making window visible"
|
||||
);
|
||||
let _ = window.show();
|
||||
let _ = window.set_focus();
|
||||
logging!(info, Type::Window, true, "Window created successfully");
|
||||
if is_showup {
|
||||
println!("is showup");
|
||||
let _ = window.show();
|
||||
let _ = window.set_focus();
|
||||
} else {
|
||||
let _ = window.hide();
|
||||
#[cfg(target_os = "macos")]
|
||||
AppHandleManager::global().set_activation_policy_accessory();
|
||||
}
|
||||
|
||||
// 设置窗口状态监控,实时保存窗口位置和大小
|
||||
crate::feat::setup_window_state_monitor(&app_handle);
|
||||
// crate::feat::setup_window_state_monitor(&app_handle);
|
||||
|
||||
// 标记前端UI已准备就绪,向前端发送启动完成事件
|
||||
let app_handle_clone = app_handle.clone();
|
||||
@@ -310,7 +282,7 @@ pub async fn resolve_scheme(param: String) -> Result<()> {
|
||||
Some(url) => {
|
||||
log::info!(target:"app", "decoded subscription url: {}", url);
|
||||
|
||||
create_window();
|
||||
create_window(false);
|
||||
match PrfItem::from_url(url.as_ref(), name, None, None).await {
|
||||
Ok(item) => {
|
||||
let uid = item.uid.clone().unwrap();
|
||||
|
||||
@@ -49,7 +49,7 @@ pub fn embed_server() {
|
||||
|
||||
tauri::async_runtime::spawn(async move {
|
||||
let visible = warp::path!("commands" / "visible").map(move || {
|
||||
resolve::create_window();
|
||||
resolve::create_window(false);
|
||||
"ok"
|
||||
});
|
||||
|
||||
|
||||
+21
-3
@@ -16,12 +16,30 @@
|
||||
ethernet0 = &gmac1;
|
||||
mmc0 = &sdmmc;
|
||||
mmc1 = &sdhci;
|
||||
led-boot = &sys_led;
|
||||
led-failsafe = &sys_led;
|
||||
led-running = &sys_led;
|
||||
led-upgrade = &sys_led;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial2:1500000n8";
|
||||
};
|
||||
|
||||
adc-key-maskrom {
|
||||
compatible = "adc-keys";
|
||||
io-channels = <&saradc 0>;
|
||||
io-channel-names = "buttons";
|
||||
keyup-threshold-microvolt = <1800000>;
|
||||
poll-interval = <100>;
|
||||
|
||||
button-maskrom {
|
||||
label = "Maskrom";
|
||||
linux,code = <KEY_VENDOR>;
|
||||
press-threshold-microvolt = <1800>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
pinctrl-names = "default";
|
||||
@@ -30,7 +48,7 @@
|
||||
button-user {
|
||||
debounce-interval = <50>;
|
||||
gpios = <&gpio1 RK_PC0 GPIO_ACTIVE_LOW>;
|
||||
label = "User Button";
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
};
|
||||
};
|
||||
@@ -40,9 +58,9 @@
|
||||
|
||||
sys_led: led-0 {
|
||||
color = <LED_COLOR_ID_RED>;
|
||||
function = LED_FUNCTION_HEARTBEAT;
|
||||
function = LED_FUNCTION_POWER;
|
||||
gpios = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
default-state = "on";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&sys_led_pin>;
|
||||
};
|
||||
|
||||
Vendored
+1
-1
@@ -14,7 +14,7 @@ on:
|
||||
- Alpha
|
||||
tags:
|
||||
- "v*"
|
||||
pull_request_target:
|
||||
pull_request:
|
||||
branches:
|
||||
- Alpha
|
||||
concurrency:
|
||||
|
||||
+15
-10
@@ -25,7 +25,7 @@ jobs:
|
||||
path: |
|
||||
src/third_party/llvm-build/Release+Asserts/
|
||||
src/gn/
|
||||
src/qemu-user-static*.deb
|
||||
src/qemu-user*.deb
|
||||
key: toolchains-posix-${{ hashFiles('CHROMIUM_VERSION') }}-v${{ env.CACHE_EPOCH }}
|
||||
- name: Cache PGO (Linux, OpenWrt)
|
||||
uses: actions/cache@v4
|
||||
@@ -45,8 +45,8 @@ jobs:
|
||||
- run: ./get-clang.sh
|
||||
- run: EXTRA_FLAGS='target_os="android"' ./get-clang.sh
|
||||
- run: |
|
||||
if [ ! -f qemu-user-static*.deb ]; then
|
||||
wget https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qemu/qemu-user-static_8.0%2Bdfsg-4_amd64.deb
|
||||
if [ ! -f qemu-user*.deb ]; then
|
||||
wget https://snapshot.debian.org/archive/debian/20250405T083429Z/pool/main/q/qemu/qemu-user_9.2.2%2Bds-1%2Bb2_amd64.deb
|
||||
fi
|
||||
cache-toolchains-win:
|
||||
runs-on: windows-2022
|
||||
@@ -97,7 +97,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x64, x86, arm64, arm, mipsel, mips64el, riscv64]
|
||||
arch: [x64, x86, arm64, arm, mipsel, mips64el, riscv64, loong64]
|
||||
env:
|
||||
EXTRA_FLAGS: 'target_cpu="${{ matrix.arch }}"'
|
||||
BUNDLE: naiveproxy-${{ github.event.release.tag_name }}-${{ github.job }}-${{ matrix.arch }}
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
path: |
|
||||
src/third_party/llvm-build/Release+Asserts/
|
||||
src/gn/
|
||||
src/qemu-user-static*.deb
|
||||
src/qemu-user*.deb
|
||||
key: toolchains-posix-${{ hashFiles('CHROMIUM_VERSION') }}-v${{ env.CACHE_EPOCH }}
|
||||
- name: Cache PGO (Linux, OpenWrt)
|
||||
uses: actions/cache@v4
|
||||
@@ -138,7 +138,7 @@ jobs:
|
||||
sudo apt update
|
||||
sudo apt install ninja-build pkg-config ccache bubblewrap
|
||||
sudo apt remove -y qemu-user-binfmt
|
||||
sudo dpkg -i qemu-user-static*.deb
|
||||
sudo dpkg -i qemu-user*.deb
|
||||
# libc6-i386 interferes with x86 build
|
||||
sudo apt remove libc6-i386
|
||||
- run: ./get-clang.sh
|
||||
@@ -192,7 +192,7 @@ jobs:
|
||||
path: |
|
||||
src/third_party/llvm-build/Release+Asserts/
|
||||
src/gn/
|
||||
src/qemu-user-static*.deb
|
||||
src/qemu-user*.deb
|
||||
key: toolchains-posix-${{ hashFiles('CHROMIUM_VERSION') }}-v${{ env.CACHE_EPOCH }}
|
||||
- name: Cache AFDO (Android)
|
||||
uses: actions/cache@v4
|
||||
@@ -222,7 +222,7 @@ jobs:
|
||||
sudo apt update
|
||||
sudo apt install ninja-build pkg-config ccache bubblewrap
|
||||
sudo apt remove -y qemu-user-binfmt
|
||||
sudo dpkg -i qemu-user-static*.deb
|
||||
sudo dpkg -i qemu-user*.deb
|
||||
# libc6-i386 interferes with x86 build
|
||||
sudo apt remove libc6-i386
|
||||
- run: ./get-clang.sh
|
||||
@@ -510,6 +510,11 @@ jobs:
|
||||
target_cpu: riscv64
|
||||
openwrt_release: '23.05.0'
|
||||
openwrt_gcc_ver: '12.3.0'
|
||||
- arch: loongarch64
|
||||
openwrt: "target=loongarch64 subtarget=generic"
|
||||
target_cpu: loong64
|
||||
openwrt_release: '24.10.0'
|
||||
openwrt_gcc_ver: '13.3.0'
|
||||
env:
|
||||
EXTRA_FLAGS: target_cpu="${{ matrix.target_cpu }}" target_os="openwrt" ${{ matrix.extra }} enable_shadow_metadata=false
|
||||
OPENWRT_FLAGS: arch=${{ matrix.arch }} release=${{ matrix.openwrt_release || '18.06.0' }} gcc_ver=${{ matrix.openwrt_gcc_ver || '7.3.0' }} ${{ matrix.openwrt }}
|
||||
@@ -522,7 +527,7 @@ jobs:
|
||||
path: |
|
||||
src/third_party/llvm-build/Release+Asserts/
|
||||
src/gn/
|
||||
src/qemu-user-static*.deb
|
||||
src/qemu-user*.deb
|
||||
key: toolchains-posix-${{ hashFiles('CHROMIUM_VERSION') }}-v${{ env.CACHE_EPOCH }}
|
||||
- name: Cache PGO (Linux, OpenWrt)
|
||||
uses: actions/cache@v4
|
||||
@@ -547,7 +552,7 @@ jobs:
|
||||
sudo apt update
|
||||
sudo apt install ninja-build pkg-config ccache bubblewrap
|
||||
sudo apt remove -y qemu-user-binfmt
|
||||
sudo dpkg -i qemu-user-static*.deb
|
||||
sudo dpkg -i qemu-user*.deb
|
||||
# libc6-i386 interferes with x86 build
|
||||
sudo apt remove libc6-i386
|
||||
- run: ./get-clang.sh
|
||||
|
||||
@@ -1154,12 +1154,8 @@ void PartitionAllocSupport::ReconfigureAfterFeatureListInit(
|
||||
UmaHistogramCounts100("Memory.PartitionAlloc.PartitionRoot.ExtrasSize",
|
||||
int(extras_size));
|
||||
|
||||
#if !defined(__MUSL__)
|
||||
// This call causes hanging in pthread_getattr_np() under qemu-user, see
|
||||
// https://www.openwall.com/lists/musl/2017/06/15/9.
|
||||
partition_alloc::internal::StackTopRegistry::Get().NotifyThreadCreated(
|
||||
partition_alloc::internal::GetStackTop());
|
||||
#endif
|
||||
|
||||
allocator_shim::internal::PartitionAllocMalloc::Allocator()
|
||||
->EnableThreadCacheIfSupported();
|
||||
|
||||
@@ -368,7 +368,7 @@ declare_args() {
|
||||
|
||||
stack_scan_supported =
|
||||
current_cpu == "x64" || current_cpu == "x86" || current_cpu == "arm" ||
|
||||
current_cpu == "arm64" || current_cpu == "riscv64"
|
||||
current_cpu == "arm64" || current_cpu == "riscv64" || current_cpu == "loong64"
|
||||
|
||||
# We want to provide assertions that guard against inconsistent build
|
||||
# args, but there is no point in having them fire if we're not building
|
||||
|
||||
@@ -521,6 +521,9 @@ if (is_clang_or_gcc) {
|
||||
} else if (current_cpu == "riscv64") {
|
||||
assert(stack_scan_supported)
|
||||
sources += [ "stack/asm/riscv64/push_registers_asm.cc" ]
|
||||
} else if (current_cpu == "loong64") {
|
||||
assert(stack_scan_supported)
|
||||
sources += [ "stack/asm/loong64/push_registers_asm.cc" ]
|
||||
} else {
|
||||
# To support a trampoline for another arch, please refer to v8/src/heap/base.
|
||||
assert(!stack_scan_supported)
|
||||
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
// Copyright 2023 The Chromium Authors
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// Push all callee-saved registers to get them on the stack for conservative
|
||||
// stack scanning.
|
||||
//
|
||||
// See asm/x64/push_registers_asm.cc for why the function is not generated
|
||||
// using clang.
|
||||
//
|
||||
// Calling convention source:
|
||||
// https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html
|
||||
asm(".global PAPushAllRegistersAndIterateStack \n"
|
||||
".type PAPushAllRegistersAndIterateStack, %function \n"
|
||||
".hidden PAPushAllRegistersAndIterateStack \n"
|
||||
"PAPushAllRegistersAndIterateStack: \n"
|
||||
// Push all callee-saved registers and save return address.
|
||||
" addi.d $sp, $sp, -96 \n"
|
||||
// Save return address.
|
||||
" st.d $ra, $sp, 88 \n"
|
||||
// sp is callee-saved.
|
||||
" st.d $sp, $sp, 80 \n"
|
||||
// s0-s9(fp) are callee-saved.
|
||||
" st.d $fp, $sp, 72 \n"
|
||||
" st.d $s8, $sp, 64 \n"
|
||||
" st.d $s7, $sp, 56 \n"
|
||||
" st.d $s6, $sp, 48 \n"
|
||||
" st.d $s5, $sp, 40 \n"
|
||||
" st.d $s4, $sp, 32 \n"
|
||||
" st.d $s3, $sp, 24 \n"
|
||||
" st.d $s2, $sp, 16 \n"
|
||||
" st.d $s1, $sp, 8 \n"
|
||||
" st.d $s0, $sp, 0 \n"
|
||||
// Maintain frame pointer(fp is s9).
|
||||
" move $fp, $sp \n"
|
||||
// Pass 1st parameter (a0) unchanged (Stack*).
|
||||
// Pass 2nd parameter (a1) unchanged (StackVisitor*).
|
||||
// Save 3rd parameter (a2; IterateStackCallback) to a3.
|
||||
" move $a3, $a2 \n"
|
||||
// Pass 3rd parameter as sp (stack pointer).
|
||||
" move $a2, $sp \n"
|
||||
// Call the callback.
|
||||
" jirl $ra, $a3, 0 \n"
|
||||
// Load return address.
|
||||
" ld.d $ra, $sp, 88 \n"
|
||||
// Restore frame pointer.
|
||||
" ld.d $fp, $sp, 72 \n"
|
||||
" addi.d $sp, $sp, 96 \n"
|
||||
" jr $ra \n");
|
||||
@@ -55,7 +55,7 @@ namespace base {
|
||||
// defined as a constant.
|
||||
|
||||
// These constants are borrowed from glibc’s (arch)/bits/pthread_stack_min.h.
|
||||
#if defined(ARCH_CPU_ARM64)
|
||||
#if defined(ARCH_CPU_ARM64) || defined(ARCH_CPU_LOONGARCH64)
|
||||
#define PTHREAD_STACK_MIN_CONST \
|
||||
(__builtin_constant_p(PTHREAD_STACK_MIN) ? PTHREAD_STACK_MIN : 131072)
|
||||
#else
|
||||
|
||||
@@ -216,11 +216,14 @@ config("default_libs") {
|
||||
# linking can have run-time side effects, nothing should be listed here.
|
||||
libs = []
|
||||
} else if (is_linux || is_chromeos) {
|
||||
libs = [
|
||||
"dl",
|
||||
"pthread",
|
||||
"rt",
|
||||
]
|
||||
# loong64 uses newer libc that subsumes libdl.so etc.
|
||||
if (current_cpu != "loong64") {
|
||||
libs = [
|
||||
"dl",
|
||||
"pthread",
|
||||
"rt",
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1530,7 +1530,7 @@ config("compiler_cpu_abi") {
|
||||
}
|
||||
cflags += [ "-mabi=lp64d" ]
|
||||
} else if (current_cpu == "loong64") {
|
||||
if (is_clang) {
|
||||
if (is_clang && current_os != "openwrt") {
|
||||
cflags += [ "--target=loongarch64-linux-gnu" ]
|
||||
ldflags += [ "--target=loongarch64-linux-gnu" ]
|
||||
}
|
||||
|
||||
@@ -61,6 +61,8 @@ config("compiler") {
|
||||
arch = "mips64el"
|
||||
} else if (current_cpu == "riscv64") {
|
||||
arch = "riscv64"
|
||||
} else if (current_cpu == "loong64") {
|
||||
arch = "loongarch64"
|
||||
} else {
|
||||
assert(false, "Architecture not supported")
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ TRIPLES = {
|
||||
"mips64el": "mips64el-linux-gnuabi64",
|
||||
"ppc64el": "powerpc64le-linux-gnu",
|
||||
"riscv64": "riscv64-linux-gnu",
|
||||
"loong64": "loongarch64-linux-gnu",
|
||||
}
|
||||
|
||||
REQUIRED_TOOLS = [
|
||||
@@ -71,6 +72,8 @@ PACKAGES_EXT = "xz"
|
||||
RELEASE_FILE = "Release"
|
||||
RELEASE_FILE_GPG = "Release.gpg"
|
||||
|
||||
GCC_VERSION = 10
|
||||
|
||||
# List of development packages. Dependencies are automatically included.
|
||||
DEBIAN_PACKAGES = [
|
||||
"libc6-dev",
|
||||
@@ -318,7 +321,7 @@ def hacks_and_patches(install_root: str, script_dir: str, arch: str) -> None:
|
||||
"include",
|
||||
TRIPLES[arch],
|
||||
"c++",
|
||||
"10",
|
||||
f"{GCC_VERSION}",
|
||||
"bits",
|
||||
"c++config.h",
|
||||
)
|
||||
@@ -345,11 +348,17 @@ def hacks_and_patches(install_root: str, script_dir: str, arch: str) -> None:
|
||||
for lib in ["libc.so.6", "libm.so.6", "libcrypt.so.1"]:
|
||||
# RISCV64 is new and has no backward compatibility.
|
||||
# Reversioning would remove necessary symbols and cause linking failures.
|
||||
if arch == "riscv64":
|
||||
if arch == "riscv64" or arch == "loong64":
|
||||
continue
|
||||
lib_path = os.path.join(install_root, "lib", TRIPLES[arch], lib)
|
||||
reversion_glibc.reversion_glibc(lib_path)
|
||||
|
||||
if not os.path.exists(os.path.join(install_root, "lib")):
|
||||
os.symlink(os.path.join("usr", "lib"), os.path.join(install_root, "lib"))
|
||||
|
||||
if (os.path.exists(os.path.join(install_root, "usr", "lib64")) and
|
||||
not os.path.exists(os.path.join(install_root, "lib64"))):
|
||||
os.symlink(os.path.join("usr", "lib64"), os.path.join(install_root, "lib64"))
|
||||
|
||||
def replace_in_file(file_path: str, search_pattern: str,
|
||||
replace_pattern: str) -> None:
|
||||
@@ -477,7 +486,7 @@ def removing_unnecessary_files(install_root, arch):
|
||||
# Preserve these files.
|
||||
gcc_triple = "i686-linux-gnu" if arch == "i386" else TRIPLES[arch]
|
||||
ALLOWLIST = {
|
||||
f"usr/lib/gcc/{gcc_triple}/10/libgcc.a",
|
||||
f"usr/lib/gcc/{gcc_triple}/{GCC_VERSION}/libgcc.a",
|
||||
f"usr/lib/{TRIPLES[arch]}/libc_nonshared.a",
|
||||
}
|
||||
|
||||
@@ -702,12 +711,25 @@ def main():
|
||||
sanity_check()
|
||||
|
||||
# RISCV64 only has support in debian-ports, no support in bookworm.
|
||||
global ARCHIVE_URL, APT_SOURCES_LIST
|
||||
if args.architecture == "riscv64":
|
||||
global ARCHIVE_URL, APT_SOURCES_LIST
|
||||
# This is the last snapshot that uses glibc 2.31, similar to bullseye
|
||||
ARCHIVE_URL = "https://snapshot.debian.org/archive/debian-ports/20210906T080750Z/"
|
||||
APT_SOURCES_LIST = [("sid", ["main"])]
|
||||
|
||||
if args.architecture == "loong64":
|
||||
ARCHIVE_URL = "https://snapshot.debian.org/archive/debian-ports/20240531T134713Z/"
|
||||
APT_SOURCES_LIST = [("sid", ["main"])]
|
||||
|
||||
global GCC_VERSION, DEBIAN_PACKAGES
|
||||
GCC_VERSION = 13
|
||||
DEBIAN_PACKAGES = [
|
||||
"libc6-dev",
|
||||
f"libgcc-{GCC_VERSION}-dev",
|
||||
f"libstdc++-{GCC_VERSION}-dev",
|
||||
"linux-libc-dev",
|
||||
]
|
||||
|
||||
if args.command == "build":
|
||||
build_sysroot(args.architecture)
|
||||
elif args.command == "upload":
|
||||
|
||||
@@ -79,3 +79,33 @@ rm -rf $SDK_PATH
|
||||
if [ -d "$sysroot/lib/gcc/arm-openwrt-linux-muslgnueabi" ]; then
|
||||
mv "$sysroot/lib/gcc/arm-openwrt-linux-muslgnueabi" "$sysroot/lib/gcc/arm-openwrt-linux-musleabi"
|
||||
fi
|
||||
|
||||
if [ "$arch" = "loongarch64" ]; then
|
||||
if grep HWCAP_LOONGARCH_LSX "$sysroot/include/bits/hwcap.h"; then
|
||||
echo "$sysroot/include/bits/hwcap.h" is already populated
|
||||
exit 1
|
||||
fi
|
||||
# https://www.openwall.com/lists/musl/2025/04/03/3
|
||||
cat >"$sysroot/include/bits/hwcap.h" <<EOF
|
||||
/* The following must match the kernel's <asm/hwcap.h>. */
|
||||
/* HWCAP flags */
|
||||
#define HWCAP_LOONGARCH_CPUCFG (1 << 0)
|
||||
#define HWCAP_LOONGARCH_LAM (1 << 1)
|
||||
#define HWCAP_LOONGARCH_UAL (1 << 2)
|
||||
#define HWCAP_LOONGARCH_FPU (1 << 3)
|
||||
#define HWCAP_LOONGARCH_LSX (1 << 4)
|
||||
#define HWCAP_LOONGARCH_LASX (1 << 5)
|
||||
#define HWCAP_LOONGARCH_CRC32 (1 << 6)
|
||||
#define HWCAP_LOONGARCH_COMPLEX (1 << 7)
|
||||
#define HWCAP_LOONGARCH_CRYPTO (1 << 8)
|
||||
#define HWCAP_LOONGARCH_LVZ (1 << 9)
|
||||
#define HWCAP_LOONGARCH_LBT_X86 (1 << 10)
|
||||
#define HWCAP_LOONGARCH_LBT_ARM (1 << 11)
|
||||
#define HWCAP_LOONGARCH_LBT_MIPS (1 << 12)
|
||||
#define HWCAP_LOONGARCH_PTW (1 << 13)
|
||||
EOF
|
||||
|
||||
# https://www.openwall.com/lists/musl/2022/03/22/4
|
||||
# But this breaks C++.
|
||||
sed -i 's/extcontext\[\] /extcontext\[0\] /' "$sysroot/include/bits/signal.h"
|
||||
fi
|
||||
|
||||
@@ -41,6 +41,7 @@ case "$target_os" in
|
||||
mipsel) SYSROOT_ARCH=mipsel;;
|
||||
mips64el) SYSROOT_ARCH=mips64el;;
|
||||
riscv64) SYSROOT_ARCH=riscv64;;
|
||||
loong64) SYSROOT_ARCH=loong64;;
|
||||
esac
|
||||
if [ "$SYSROOT_ARCH" ]; then
|
||||
WITH_SYSROOT="out/sysroot-build/bullseye/bullseye_${SYSROOT_ARCH}_staging"
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
#define OPENSSL_32_BIT
|
||||
#elif defined(__myriad2__)
|
||||
#define OPENSSL_32_BIT
|
||||
#elif defined(__loongarch__) && __SIZEOF_POINTER__ == 8
|
||||
#define OPENSSL_64_BIT
|
||||
#else
|
||||
// The list above enumerates the platforms that BoringSSL supports. For these
|
||||
// platforms we keep a reasonable bar of not breaking them: automated test
|
||||
|
||||
@@ -78,6 +78,8 @@ def start_naive(naive_args, config_file):
|
||||
with_qemu = 'mips64el'
|
||||
elif argv.target_cpu == 'riscv64':
|
||||
with_qemu = 'riscv64'
|
||||
elif argv.target_cpu == 'loong64':
|
||||
with_qemu = 'loong64'
|
||||
|
||||
if argv.rootfs:
|
||||
if not with_qemu:
|
||||
@@ -89,7 +91,7 @@ def start_naive(naive_args, config_file):
|
||||
cmdline = ['bwrap', '--die-with-parent', '--bind', argv.rootfs, '/',
|
||||
'--proc', '/proc', '--dev', '/dev', '--chdir', '/', '/naive']
|
||||
else:
|
||||
cmdline = [f'qemu-{with_qemu}-static',
|
||||
cmdline = [f'qemu-{with_qemu}',
|
||||
'-L', argv.rootfs, argv.naive]
|
||||
else:
|
||||
cmdline = [argv.naive]
|
||||
@@ -104,7 +106,9 @@ def start_naive(naive_args, config_file):
|
||||
print('terminate pid', proc.pid)
|
||||
proc.terminate()
|
||||
|
||||
timeout = threading.Timer(10, terminate, args=(proc,))
|
||||
# Some qemu-user tests take a while to start.
|
||||
# See https://gitlab.com/qemu-project/qemu/-/issues/1729
|
||||
timeout = threading.Timer(20, terminate, args=(proc,))
|
||||
timeout.start()
|
||||
while True:
|
||||
if proc.poll() is not None:
|
||||
|
||||
@@ -476,7 +476,7 @@
|
||||
|
||||
<string name="please_update">نسخه (%s) برنامه شما بسیار قدیمی شده است و در %s متوقف میشود. لطفاً به نسخه جدیدتر بهروزرسانی کنید</string>
|
||||
<string name="please_update_force">برنامه شما خیلی قدیمی شده است (%s). و در %s کار نمیکند. باید نسخه جدید را دانلود کنید!</string>
|
||||
<string name="connection_test_delete_unavailable">Clear unavailable</string>
|
||||
<string name="connection_test_delete_unavailable">پاککردن غیرقابلدسترسها</string>
|
||||
<string name="neko_plugin">افزونه پیشرفته</string>
|
||||
<string name="neko_plugin_summary">افزونههای پیشرفته میتوانند پروتکلهایی را ارائه دهند که به صورت پیشفرض در این برنامه پشتیبانی نشدهاند.\n\n هر کسی میتواند افزونههای پیشرفته بنویسد که میتوانند NekoBox را کنترل کنند. لطفا از منابع معتبر دانلود و نصب کنید.</string>
|
||||
<string name="neko_plugin_internal_error">مشکل داخلی %s</string>
|
||||
@@ -534,4 +534,6 @@
|
||||
<string name="group_not_subscription">نوع این گروه اشتراکی نیست</string>
|
||||
<string name="allow_insecure_on_request_sum">غیرفعال کردن بررسی گواهیها هنگام بهروزرسانی اشتراکها</string>
|
||||
<string name="global_allow_insecure">به اتصال محافظتنشده همیشه اجازه داده شود.</string>
|
||||
<string name="network_change_reset_connections">بازنشانی اتصال خروجی، هنگام تغییر شبکه</string>
|
||||
<string name="wake_reset_connections">بازنشانی اتصال خروجی، هنگام روشنشدن صفحه موبایل</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,409 +1,449 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="header_type">Тип заголовка</string>
|
||||
<string name="network">Сеть</string>
|
||||
<string name="security">Шифрование транспортного уровня</string>
|
||||
<string name="protocol">Протокол</string>
|
||||
<string name="enc_method">Метод шифрования</string>
|
||||
<string name="password">Пароль</string>
|
||||
<string name="key_opt">Ключ (необязательно)</string>
|
||||
<string name="password_opt">Пароль (необязательно)</string>
|
||||
<string name="username">Имя пользователя</string>
|
||||
<string name="traffic">%1$s↑ %2$s↓</string>
|
||||
<string name="transproxy_mode">Транспрокси-режим</string>
|
||||
<string name="require_transproxy">Включить входящий прокси-сервер</string>
|
||||
<string name="port_local_dns">Локальный порт DNS</string>
|
||||
<string name="dns_hosts">Перезапись домена</string>
|
||||
<string name="fakedns_message">Может вызвать необходимость перезапуска других приложений для повторного подключения к сети после остановки прокси</string>
|
||||
<string name="enable_fakedns">Включить FakeDNS</string>
|
||||
<string name="dns_routing_message">Разрешение доменов в обходных маршрутах с помощью Direct DNS. Помните о потенциальных утечках DNS</string>
|
||||
<string name="enable_dns_routing">Включить маршрутизацию DNS</string>
|
||||
<string name="direct_dns">Прямой DNS</string>
|
||||
<string name="remote_dns">Удаленный DNS</string>
|
||||
<string name="cag_dns">Настройки DNS</string>
|
||||
<string name="connection_test_error_status_code">Код ошибки: #%d</string>
|
||||
<string name="connection_test_fail">Интернет недоступен</string>
|
||||
<string name="connection_test_error">Ошибка: %s</string>
|
||||
<string name="connection_test_available_http">Успех: рукопожатие HTTP заняло %d мс</string>
|
||||
<string name="connection_test_available">Успех: рукопожатие HTTPS заняло %d мс</string>
|
||||
<string name="connection_test_testing">Тестирование…</string>
|
||||
<string name="speed_detail">Прокси :%1$s↑ %2$s↓
|
||||
\nПрямой :%3$s↑%4$s↓</string>
|
||||
<string name="allow_insecure_sum">Отключить проверку сертификата. При включении эта функция настолько же безопасна как передача пароля в открытом виде</string>
|
||||
<string name="allow_insecure">Разрешить небезопасное подключение</string>
|
||||
<string name="security_settings">Настройки безопасности</string>
|
||||
<string name="show_direct_speed_sum">Также в уведомлении показывать скорость трафика без прокси</string>
|
||||
<string name="show_direct_speed">Показать прямую скорость</string>
|
||||
<string name="show_stop_sum">Если вы не хотите использовать Quick Tile в качестве переключателя</string>
|
||||
<string name="show_stop">Показать кнопку остановки</string>
|
||||
<string name="cag_misc">Прочие настройки</string>
|
||||
<string name="speed_interval">Интервал обновления уведомлений о скорости</string>
|
||||
<string name="ws_browser_forwarding_sum">Перенаправьте соответствующие веб-сокеты через браузер.</string>
|
||||
<string name="ws_browser_forwarding">Пересылка через браузер</string>
|
||||
<string name="cag_ws">Настройки WebSocket</string>
|
||||
<string name="require_http">Включить входящий HTTP-трафик</string>
|
||||
<string name="general_settings">Настройки приложения</string>
|
||||
<string name="inbound_settings">Входящие настройки</string>
|
||||
<string name="allow_access_sum">Сервер будет слушать на адресе 0.0.0.0</string>
|
||||
<string name="allow_access">Разрешить подключения из локальной сети</string>
|
||||
<string name="cag_route">Настройки маршрута</string>
|
||||
<string name="port_http">Порт прокси HTTP</string>
|
||||
<string name="service_mode_proxy">Только прокси</string>
|
||||
<string name="service_mode">Сервисный режим</string>
|
||||
<string name="group_duplicate">Дубликат:
|
||||
\n%s</string>
|
||||
<string name="group_deleted">Удалено:
|
||||
\n%s</string>
|
||||
<string name="group_changed">Обновлено:
|
||||
\n%s</string>
|
||||
<string name="group_added">Создано:
|
||||
\n%s</string>
|
||||
<string name="group_delete_confirm_prompt">Вы уверены, что хотите удалить эту группу\?</string>
|
||||
<string name="group_diff">различия (%s)</string>
|
||||
<string name="group_show_diff">Сравнить группы</string>
|
||||
<string name="group_updated">%s: Обновлено %d прокси</string>
|
||||
<string name="group_no_difference">%s: Не отличаются</string>
|
||||
<string name="group_status_proxies_subscription">%d Прокси | Обновлено %s</string>
|
||||
<string name="group_status_proxies">%d прокси</string>
|
||||
<string name="group_status_empty_subscription">Еще не обновлено</string>
|
||||
<string name="group_status_empty">Пустая группа</string>
|
||||
<string name="group_edit_subscription">Редактировать подписку</string>
|
||||
<string name="group_edit">Редактировать группу</string>
|
||||
<string name="group_create_subscription">Создать подписку</string>
|
||||
<string name="group_create">Создать группу</string>
|
||||
<string name="group_name_required">Требуется название группы</string>
|
||||
<string name="group_subscription_link">Ссылка для подписки</string>
|
||||
<string name="group_update">Обновить</string>
|
||||
<string name="group_name">Имя группы</string>
|
||||
<string name="tile_title">Переключатель</string>
|
||||
<string name="quick_toggle">Переключить</string>
|
||||
<string name="group_default">Разгруппировано</string>
|
||||
<string name="document">Документ</string>
|
||||
<string name="theme">Тема</string>
|
||||
<string name="menu_about">О приложении</string>
|
||||
<string name="menu_group">Группы</string>
|
||||
<string name="menu_configuration">Конфигурация</string>
|
||||
<string name="logcat">Экспорт отладочной информации</string>
|
||||
<string name="version_x">Версия (%s)</string>
|
||||
<string name="server_port">Удаленный порт</string>
|
||||
<string name="server_address">Сервер</string>
|
||||
<string name="profile_name">Имя профиля</string>
|
||||
<string name="connection_test_url">URL-адрес проверки подключения</string>
|
||||
<string name="port_transproxy">Транспрокси-порт</string>
|
||||
<string name="port_proxy">Порт прокси SOCKS5</string>
|
||||
<string name="app_version">Версия</string>
|
||||
<string name="oss_licenses">Лицензии с открытым исходным кодом</string>
|
||||
<string name="telegram">Канал обновлений в Telegram</string>
|
||||
<string name="github">Исходный код</string>
|
||||
<string name="project">Проект</string>
|
||||
<string name="app_desc">Универсальный набор инструментов прокси для Android, написанный на Kotlin.</string>
|
||||
<plurals name="added">
|
||||
<item quantity="one">Добавлен</item>
|
||||
<item quantity="few">Добавлено %d прокси</item>
|
||||
<item quantity="many">Добавлено %d прокси</item>
|
||||
<item quantity="other">Добавлено %d прокси</item>
|
||||
</plurals>
|
||||
<plurals name="removed">
|
||||
<item quantity="one">Удалено</item>
|
||||
<item quantity="few">%d элемента удалены</item>
|
||||
<item quantity="many">%d элементов удалено</item>
|
||||
<item quantity="other">%d элементов удалено</item>
|
||||
</plurals>
|
||||
<string name="apps_message">%d приложений</string>
|
||||
<string name="select_apps">Выберите приложения</string>
|
||||
<string name="apps">Приложения</string>
|
||||
<string name="clear_profiles_message">Вы уверены, что хотите очистить эту группу\?</string>
|
||||
<string name="profile_import_message">Подтвердите, что хотите импортировать профиль %s\?</string>
|
||||
<string name="profile_import">Импортировать профиль</string>
|
||||
<string name="subscription_import_message">Подтвердите, что хотите импортировать подписку %s\? Если вы импортируете из ненадежного источника, это может привести к утечке вашего IP-адреса и такого поведения.</string>
|
||||
<string name="subscription_import">Импортировать подписку</string>
|
||||
<string name="subscription_traffic">%s Использовано / %s Осталось</string>
|
||||
<string name="subscription_used">%s Использовано</string>
|
||||
<string name="group_filter">Фильтр</string>
|
||||
<string name="subscription_update_message">Обновление %s …</string>
|
||||
<string name="subscription_update">Обновление подписки</string>
|
||||
<string name="service_subscription">Служба обновления подписки</string>
|
||||
<string name="ooc_missing_protocol">Подписка требует поддержки протокола %s, но ее нельзя найти. Неподдерживаемые профили игнорируются.</string>
|
||||
<string name="ooc_warning">Предупреждение</string>
|
||||
<string name="update_subscription_warning">Прокси-сервер не подключен, вы уверены, что хотите продолжить обновление\?</string>
|
||||
<string name="ooc_subscription_token_invalid">Недействительный токен OOCv1</string>
|
||||
<string name="download">Скачать</string>
|
||||
<string name="install_from_fdroid">Установить с F-Droid</string>
|
||||
<string name="install_from_play_store">Установить из Play Store</string>
|
||||
<string name="action_download">СКАЧАТЬ</string>
|
||||
<string name="action_learn_more">УЗНАТЬ БОЛЬШЕ</string>
|
||||
<string name="profile_requiring_plugin">Профиль %s требует установки подключаемого модуля %s, но он не найден.</string>
|
||||
<string name="missing_plugin">Отсутствующий плагин</string>
|
||||
<string name="confirm">Подтвердить</string>
|
||||
<string name="subscription_user_agent">UserAgent</string>
|
||||
<string name="update_when_connected_only_sum">Предотвратить утечку IP-адреса</string>
|
||||
<string name="update_when_connected_only">Обновлять только при подключении</string>
|
||||
<string name="auto_update_delay">Задержка автоматического обновления (в минутах)</string>
|
||||
<string name="auto_update">Автоматическое обновление</string>
|
||||
<string name="update_settings">Обновить настройки</string>
|
||||
<string name="force_resolve_sum">При обновлении преобразовать все доменные имена в IP-адреса. Хост и SNI будут добавлены автоматически, если это возможно</string>
|
||||
<string name="raw">Обычный</string>
|
||||
<string name="deduplication_sum">Удалить повторяющиеся конфигурации при обновлении</string>
|
||||
<string name="force_resolve">Принудительно разрешать доменные имена</string>
|
||||
<string name="delete_group_prompt">Вы уверены, что хотите удалить эту группу\?</string>
|
||||
<string name="subscription_type">Тип подписки</string>
|
||||
<string name="group_type">Тип группы</string>
|
||||
<string name="subscription_settings">Настройки подписки</string>
|
||||
<string name="subscription">Подписка</string>
|
||||
<string name="group_settings">Настройки группы</string>
|
||||
<string name="group_basic">Базовый</string>
|
||||
<string name="trojan_provider">Провайдер Trojan</string>
|
||||
<string name="protocol_settings">Настройки протокола</string>
|
||||
<string name="append_http_proxy_sum">HTTP-прокси будет использоваться напрямую из (браузера / некоторых поддерживаемых приложений), без использования виртуального сетевого интерфейса (Android 10+)</string>
|
||||
<string name="append_http_proxy">Добавить HTTP-прокси к VPN</string>
|
||||
<string name="connection_test_timeout">Тайм-аут</string>
|
||||
<string name="connection_test_unreachable">Недоступен</string>
|
||||
<string name="connection_test_refused">В соединении отказано</string>
|
||||
<string name="connection_test_domain_not_found">Домен не найден</string>
|
||||
<string name="connection_test_icmp_ping_unavailable">ICMPing недоступен</string>
|
||||
<string name="connection_test_tcp_ping_unavailable">TCPing недоступен</string>
|
||||
<string name="connection_test_clear_results">Очистить результаты теста</string>
|
||||
<string name="connection_test">Тест подключения</string>
|
||||
<string name="clear_traffic_statistics">Очистить статистику трафика</string>
|
||||
<string name="always_show_address_sum">Всегда отображать адрес сервера на карте конфигурации</string>
|
||||
<string name="always_show_address">Всегда показывать адрес</string>
|
||||
<string name="unavailable">Недоступен</string>
|
||||
<string name="standard">Стандарт</string>
|
||||
<string name="probe_interval">Интервал наблюдения балансировщика</string>
|
||||
<string name="api_port">Порт API</string>
|
||||
<string name="random">Случайный</string>
|
||||
<string name="list">Список</string>
|
||||
<string name="enable_log_sum">В целях отладки</string>
|
||||
<string name="enable_log">Включить журнал</string>
|
||||
<string name="auto">Авто</string>
|
||||
<string name="disable">Отключить</string>
|
||||
<string name="enable">Включить</string>
|
||||
<string name="follow_system">Использовать системную тему</string>
|
||||
<string name="night_mode">Ночной режим</string>
|
||||
<string name="lines">%d строк</string>
|
||||
<string name="route_warn">Перед добавлением собственных правил убедитесь, что вы прочитали документацию, иначе подключение к Интернету может не удасться.</string>
|
||||
<string name="license">Лицензия</string>
|
||||
<string name="need_reload">Перезагрузите прокси-сервис, чтобы применить изменения</string>
|
||||
<string name="apply">Применить</string>
|
||||
<string name="no">Нет</string>
|
||||
<string name="yes">Да</string>
|
||||
<string name="unsaved_changes_prompt">Есть несохраненные изменения. Сохранить\?</string>
|
||||
<string name="ss_cat">Настройки Shadowsocks</string>
|
||||
<string name="proxy_cat">Настройки сервера</string>
|
||||
<string name="plugin_auto_connect_unlock_only">Этот плагин может не работать с автоподключением</string>
|
||||
<string name="plugin_untrusted">Предупреждение: похоже, что этот плагин не из известного надежного источника.</string>
|
||||
<string name="plugin_unknown">Неизвестный плагин %s</string>
|
||||
<string name="plugin_disabled">Отключено</string>
|
||||
<string name="plugin_configure">Настроить…</string>
|
||||
<string name="plugin">Плагин</string>
|
||||
<string name="ignore_battery_optimizations_sum">Снять некоторые ограничения</string>
|
||||
<string name="ignore_battery_optimizations">Игнорировать оптимизации батареи</string>
|
||||
<string name="donate_info">Я люблю деньги</string>
|
||||
<string name="donate">Пожертвовать</string>
|
||||
<string name="deduplication">Дедупликация</string>
|
||||
<string name="no_proxies_found_in_clipboard">В буфере обмена не найдено ни одного прокси</string>
|
||||
<string name="no_proxies_found_in_file">В файле не найдено прокси-серверов</string>
|
||||
<string name="no_proxies_found_in_subscription">В подписке не найдено прокси-серверов</string>
|
||||
<string name="no_proxies_found">В ссылке не найдено прокси-серверов</string>
|
||||
<string name="error_title">Ошибка</string>
|
||||
<string name="cleartext_http_warning">Передача HTTP-трафика в виде открытого текста небезопасна</string>
|
||||
<string name="subscriptions">Подписки</string>
|
||||
<string name="not_connected">Не подключен</string>
|
||||
<string name="vpn_connected">Подключено, нажмите, чтобы проверить подключение</string>
|
||||
<string name="connecting">Подключение…</string>
|
||||
<string name="deprecated">Устарело</string>
|
||||
<string name="insecure">Ненадежный</string>
|
||||
<string name="undo">Отменить</string>
|
||||
<string name="add_profile_methods_manual_settings">Ручные настройки</string>
|
||||
<string name="add_profile_methods_scan_qr_code">Отсканировать QR-код</string>
|
||||
<string name="share_qr_nfc">QR-код</string>
|
||||
<string name="delete_confirm_prompt">Вы уверены, что хотите удалить этот профиль\?</string>
|
||||
<string name="delete">Удалить</string>
|
||||
<string name="profile_config">Конфигурация профиля</string>
|
||||
<string name="file_manager_missing">На вашем устройстве отсутствует стандартный селектор файлов Android, установите его, например Material Files.</string>
|
||||
<string name="action_import_err">Не удалось импортировать.</string>
|
||||
<string name="action_import_msg">Успешно импортировано!</string>
|
||||
<string name="action_export_err">Не удалось экспортировать.</string>
|
||||
<string name="action_export_msg">Успешно экспортировано!</string>
|
||||
<string name="action_import_file">Импортировать из файла</string>
|
||||
<string name="action_import">Импорт из буфера обмена</string>
|
||||
<string name="action_export">Экспортировать</string>
|
||||
<string name="action_export_clipboard">Экспорт в буфер обмена</string>
|
||||
<string name="action_export_file">Экспорт в файл</string>
|
||||
<string name="action_scan_china_apps">Сканировать китайские приложения</string>
|
||||
<string name="action_from_link">По подписке</string>
|
||||
<string name="action_create_group">Пустая группа</string>
|
||||
<string name="clear_profiles">Очистить</string>
|
||||
<string name="circular_reference_sum">Маршрут не может содержать сам себя.</string>
|
||||
<string name="circular_reference">Циклическая ссылка</string>
|
||||
<string name="config_settings">Настройки конфигурации</string>
|
||||
<string name="chain_settings">Настройки цепочки</string>
|
||||
<string name="balancer_strategy">Стратегия</string>
|
||||
<string name="balancer_type">Тип</string>
|
||||
<string name="balancer_settings">Настройки балансировщика</string>
|
||||
<string name="balancer">Балансер</string>
|
||||
<string name="custom_config">Пользовательская конфигурация</string>
|
||||
<string name="proxy_chain">Прокси-цепочка</string>
|
||||
<string name="select_profile">Выбрать профиль</string>
|
||||
<string name="add_profile">Добавить профиль</string>
|
||||
<string name="share">Поделиться</string>
|
||||
<string name="edit">Редактировать</string>
|
||||
<string name="settings">Настройки</string>
|
||||
<string name="clipboard_empty">Буфер обмена пуст</string>
|
||||
<string name="connect">Подключиться</string>
|
||||
<string name="profile_empty">Пожалуйста, выберите профиль</string>
|
||||
<string name="reboot_required">Не удалось запустить службу VPN. Возможно, вам потребуется перезагрузить устройство.</string>
|
||||
<string name="vpn_permission_denied">Отказано в разрешении на создание службы VPN</string>
|
||||
<string name="vpn_error">%s</string>
|
||||
<string name="stopping">Выключение…</string>
|
||||
<string name="stop">Остановить</string>
|
||||
<string name="service_failed">Не удалось:</string>
|
||||
<string name="invalid_server">Неверное имя сервера</string>
|
||||
<string name="forward_success">Прокси запустился.</string>
|
||||
<string name="service_proxy">Прокси-сервис</string>
|
||||
<string name="service_vpn">VPN-сервис</string>
|
||||
<string name="direct_boot_aware_summary">Выбранная вами информация профиля будет менее защищена</string>
|
||||
<string name="direct_boot_aware">Разрешить переключение на экране блокировки</string>
|
||||
<string name="auto_connect_summary">Включить прокси при запуске/обновлении приложения, если он был запущен до этого</string>
|
||||
<string name="auto_connect">Автоматическое подключение</string>
|
||||
<string name="show_system_apps">Показать системные приложения</string>
|
||||
<string name="bypass_apps">Обход</string>
|
||||
<string name="clear_selections">Очистить выбор</string>
|
||||
<string name="invert_selections">Инвертировать выбор</string>
|
||||
<string name="scanning">Сканирование…</string>
|
||||
<string name="search_apps">Поиск…</string>
|
||||
<string name="off">Выключенный</string>
|
||||
<string name="on">Включено</string>
|
||||
<string name="proxied_apps_summary">Настроить режим VPN для выбранных приложений</string>
|
||||
<string name="proxied_apps">Режим VPN для приложений</string>
|
||||
<string name="tcp_keep_alive_interval">Интервал доставки пакетов TCP keep-alive</string>
|
||||
<string name="mux_concurrency">Число одновременных подключений Mux</string>
|
||||
<string name="enable_mux">Включить мультиплексор</string>
|
||||
<string name="traffic_sniffing">Включить анализ трафика</string>
|
||||
<string name="domain_strategy">Стратегия разрешения доменов</string>
|
||||
<string name="route_opt_block_ads">Блокировать рекламу</string>
|
||||
<string name="route_opt_bypass_lan">Обход LAN</string>
|
||||
<string name="route_not_asset">Не файл ресурса: ожидался .db, а не %s</string>
|
||||
<string name="route_asset_updated">Обновлено</string>
|
||||
<string name="route_asset_no_update">Обновлений нет</string>
|
||||
<string name="route_asset_status">Локальная версия: %s</string>
|
||||
<string name="route_rules_official">Официальный</string>
|
||||
<string name="route_rules_provider">Поставщик ресурсов правил</string>
|
||||
<string name="route_assets">Ресурсы</string>
|
||||
<string name="route_manage_assets">Управление ресурсами маршрутов</string>
|
||||
<string name="route_reset">Сброс</string>
|
||||
<string name="route_bypass_ip">Правило IP для %s</string>
|
||||
<string name="route_bypass_domain">Правило домена для %s</string>
|
||||
<string name="empty_route_notice">Установите какие-либо правила перед сохранением</string>
|
||||
<string name="empty_route">Пустой маршрут</string>
|
||||
<string name="route_profile">Выбрать профиль…</string>
|
||||
<string name="route_block">Блокировать</string>
|
||||
<string name="route_bypass">Обход</string>
|
||||
<string name="route_proxy">Прокси</string>
|
||||
<string name="route_name">Название маршрута</string>
|
||||
<string name="delete_route_prompt">Вы уверены, что хотите удалить этот маршрут\?</string>
|
||||
<string name="route_add">Создать маршрут</string>
|
||||
<string name="menu_route">Маршруты</string>
|
||||
<string name="metered_summary">Подсказывать системе, что VPN следует рассматривать как сеть с лимитным тарифным планом</string>
|
||||
<string name="metered">Подсказка о соединении с лимитным тарифным планом</string>
|
||||
<string name="only">Исключительно</string>
|
||||
<string name="prefer">Предпочитать</string>
|
||||
<string name="ipv6">Маршрут IPv6</string>
|
||||
<string name="edit_config">Изменить конфигурацию</string>
|
||||
<string name="config_type">Тип конфигурации</string>
|
||||
<string name="extra_headers">Дополнительные заголовки</string>
|
||||
<string name="encryption">Шифрование</string>
|
||||
<string name="early_data_header_name">Имя заголовка ранних данных</string>
|
||||
<string name="certificates">Сертификаты</string>
|
||||
<string name="alpn">Согласование протокола уровня приложений</string>
|
||||
<string name="sni">Server Name Indication (SNI)</string>
|
||||
<string name="tls">Использовать TLS</string>
|
||||
<string name="grpc_service_name">Имя службы gRPC</string>
|
||||
<string name="http_path">HTTP-путь</string>
|
||||
<string name="http_host">HTTP-хост</string>
|
||||
<string name="ws_path">Путь к WebSocket</string>
|
||||
<string name="ws_host">Хост WebSocket</string>
|
||||
<string name="alter_id">Изменить ID</string>
|
||||
<string name="uuid">Логин пользователя</string>
|
||||
<string name="obfs_param">Параметры Obfs</string>
|
||||
<string name="obfs">Obfs</string>
|
||||
<string name="protocol_param">Параметры протокола</string>
|
||||
<string name="username_opt">Имя пользователя (необязательно)</string>
|
||||
<string name="speed">%s/с</string>
|
||||
<string name="hysteria_download_mbps">Максимальная скорость загрузки (в Мбит / с)</string>
|
||||
<string name="hysteria_upload_mbps">Максимальная скорость загрузки (в Мбит / с)</string>
|
||||
<string name="hysteria_auth_payload">Полезные данные аутентификации</string>
|
||||
<string name="hysteria_auth_type">Тип аутентификации</string>
|
||||
<string name="hysteria_obfs">Обфускация пароля</string>
|
||||
<string name="experimental_settings">Экспериментальный</string>
|
||||
<string name="route_need_vpn">Правило маршрутизации `%s` зависит от VPN, поэтому игнорируется.</string>
|
||||
<string name="route_for">Правило для %s</string>
|
||||
<string name="app_no_launcher">У приложения нет интерфейса.</string>
|
||||
<string name="copy_failed">Не удалось скопировать.</string>
|
||||
<string name="copy_success">Копировано успешно!</string>
|
||||
<string name="create_rule">Создать правило</string>
|
||||
<string name="open_market">Показать в маркете</string>
|
||||
<string name="open_settings">Открыть настройки</string>
|
||||
<string name="open_app">Открыть приложение</string>
|
||||
<string name="copy_package_name">Копировать имя пакета</string>
|
||||
<string name="copy_label">Копировать имя</string>
|
||||
<string name="udp_connections">%d UDP-соединений</string>
|
||||
<string name="tcp_connections">%d TCP-соединений</string>
|
||||
<string name="shadowsocks_plugin_v2ray">V2Ray (плагин Shadowsocks для Android)</string>
|
||||
<string name="shadowsocks_plugin_simple_obfs">Simple Obfs (плагин Shadowsocks для Android)</string>
|
||||
<string name="plugin_exists_but_on_shit_system">Профиль %s требует плагин %s, но поставщик вашего проприетарного оборудования (обычно это большие компании, занимающиеся слежкой и производители вредоносного ПО) изменил ваш Android, сделав плагин непригодным для использования.</string>
|
||||
<string name="group_order_by_delay">По задержке</string>
|
||||
<string name="group_order_by_name">По имени</string>
|
||||
<string name="group_order_origin">По происхождению</string>
|
||||
<string name="group_order">Сортировка</string>
|
||||
<string name="hysteria_disable_mtu_discovery">Отключить обнаружение MTU пути</string>
|
||||
<string name="hysteria_connection_receive_window">Окно получения соединения QUIC</string>
|
||||
<string name="hysteria_stream_receive_window">Окно приема потока QUIC</string>
|
||||
<string name="menu_traffic">Трафик</string>
|
||||
<string name="no_statistics">Статистики пока нет</string>
|
||||
<string name="clear_logcat">Очистить Logcat</string>
|
||||
<string name="menu_log">Логи</string>
|
||||
<string name="menu_tools">Инструменты</string>
|
||||
<string name="translate_platform">Платформа локализации</string>
|
||||
<string name="ssh_private_key_passphrase">Парольная фраза закрытого ключа</string>
|
||||
<string name="ssh_private_key">Закрытый ключ</string>
|
||||
<string name="ssh_public_key">Открытый ключ</string>
|
||||
<string name="ssh_auth_type_none">Без аутентификации</string>
|
||||
<string name="profile_traffic_statistics">Статистика трафика профиля</string>
|
||||
<string name="profile_traffic_statistics_summary">Когда отключено, использованный трафик не будет отображаться</string>
|
||||
<string name="app_statistics_disabled">Статистика трафика приложений отключена в настройках</string>
|
||||
<string name="warp_generate">Создать конфигурацию</string>
|
||||
<string name="generating">Создание…</string>
|
||||
<string name="tun_implementation">Реализация TUN</string>
|
||||
<string name="wireguard_local_address">Частный адрес</string>
|
||||
<string name="destination_override">Переопределять адрес назначения</string>
|
||||
<string name="resolve_destination_summary">Если адрес назначения является доменом, то он передается в соответствии со стратегией IPv6.</string>
|
||||
<string name="destination_override_summary">Использовать перехваченный домен для переопределения адреса назначения, а не только для маршрутизации</string>
|
||||
<string name="pcap_notice">Pcap файлы будут сохранены в %s</string>
|
||||
<string name="route_play_store">Правило Play Store для %s</string>
|
||||
<string name="route_opt_block_analysis">Блокировать аналитику</string>
|
||||
<string name="wireguard_public_key">Открытый ключ сервера</string>
|
||||
<string name="wireguard_psk">Пароль сервера</string>
|
||||
<string name="naive_insecure_concurrency">Небезопасный параллелизм</string>
|
||||
<string name="naive_insecure_concurrency_summary">Использовать N параллельных соединений для повышения отказоустойчивости в условиях ненадёжной сети. Большее число соединений увеличивает риск обнаружения туннелей и снижает безопасность. Этот проект стремится к максимальной защите от анализа трафика, следовательно, использование его небезопасным образом противоречит данной цели.
|
||||
\n
|
||||
\nЕсли придётся использовать данную функцию, попробуйте N=2, чтобы проверить, решит ли это проблему. Настоятельно не рекомендуется использовать более 4 соединений.</string>
|
||||
<string name="resolve_destination">Резолвить адрес назначения</string>
|
||||
<string name="start">Старт</string>
|
||||
<string name="stun_attest_loading">Пожалуйста, подождите…</string>
|
||||
<string name="stun_test">Обнаружение поведения NAT</string>
|
||||
<string name="stun_test_summary">Определить поведение сопоставления адресов NAT и поведение фильтрации NAT в соответствии с RFC 5780 при помощи STUN.</string>
|
||||
<string name="warp_license">[CloudFlare Warp](https://blog.cloudflare.com/1111-warp-better-vpn/) - это бесплатный провайдер WireGuard VPN. Используя его, вы соглашаетесь с [условиями использования](https://www.cloudflare.com/application/terms/).</string>
|
||||
<string name="tools_network">Сеть</string>
|
||||
<string name="backup">Бэкап</string>
|
||||
<string name="backup_rules">Правила маршрутизации</string>
|
||||
<string name="backup_settings">Настройки</string>
|
||||
<string name="backup_not_file">Не файл резервной копии: ожидался .json, а не %s</string>
|
||||
<string name="invalid_backup_file">Недействительный файл резервной копии</string>
|
||||
<string name="backup_import_summary">При импорте существующие данные будут перезаписаны.</string>
|
||||
<string name="backup_importing">Импортирование…</string>
|
||||
<string name="backup_import">Импортировать</string>
|
||||
<string name="backup_groups_and_configurations">Группы и конфигурации</string>
|
||||
<string name="backup_summary">Если правила маршрутизации резервируются без конфигураций, то пользовательские исходящие соединения будут потеряны.</string>
|
||||
<string name="packet_encoding">Кодирование пакетов</string>
|
||||
</resources>
|
||||
<string name="acquire_wake_lock">Использовать WakeLock</string>
|
||||
<string name="acquire_wake_lock_summary">Сохранять CPU включенным</string>
|
||||
<string name="action_download">СКАЧАТЬ</string>
|
||||
<string name="action_export">Экспортировать</string>
|
||||
<string name="action_export_clipboard">Экспорт в буфер обмена</string>
|
||||
<string name="action_export_err">Не удалось экспортировать.</string>
|
||||
<string name="action_export_file">Экспорт в файл</string>
|
||||
<string name="action_export_msg">Успешно экспортировано!</string>
|
||||
<string name="action_import">Импорт из буфера обмена</string>
|
||||
<string name="action_import_err">Не удалось импортировать.</string>
|
||||
<string name="action_import_file">Импортировать из файла</string>
|
||||
<string name="action_import_msg">Успешно импортировано!</string>
|
||||
<string name="action_learn_more">УЗНАТЬ БОЛЬШЕ</string>
|
||||
<string name="action_switch">Переключить</string>
|
||||
<string name="add_profile">Добавить профиль</string>
|
||||
<string name="add_profile_methods_manual_settings">Ручные настройки</string>
|
||||
<string name="add_profile_methods_scan_qr_code">Отсканировать QR-код</string>
|
||||
<string name="ads">Реклама</string>
|
||||
<string name="allow_access">Разрешить подключения из локальной сети</string>
|
||||
<string name="allow_access_sum">Привязать входящие серверы к 0.0.0.0</string>
|
||||
<string name="allow_insecure">Разрешить небезопасное подключение</string>
|
||||
<string name="allow_insecure_on_request_sum">Отключить проверку сертификатов при обновлении подписок</string>
|
||||
<string name="allow_insecure_sum">Отключить проверку сертификата. При включении эта функция настолько же безопасна как передача пароля в открытом виде</string>
|
||||
<string name="alpn">Согласование протокола уровня приложений</string>
|
||||
<string name="alter_id">Изменить ID</string>
|
||||
<string name="always_show_address">Всегда показывать адрес</string>
|
||||
<string name="always_show_address_sum">Всегда отображать адрес сервера на карте конфигурации</string>
|
||||
<string name="app_desc">Универсальный набор инструментов прокси для Android, написанный на Kotlin.</string>
|
||||
<string name="app_tls_version">Минимальная версия TLS протокола</string>
|
||||
<string name="app_version">Версия</string>
|
||||
<string name="append_http_proxy">Добавить HTTP-прокси к VPN</string>
|
||||
<string name="append_http_proxy_sum">HTTP-прокси будет использоваться напрямую из (браузера / некоторых поддерживаемых приложений), без использования виртуального сетевого интерфейса (Android 10+)</string>
|
||||
<string name="apply">Применить</string>
|
||||
<string name="apps">Приложения</string>
|
||||
<string name="apps_message">%d приложений</string>
|
||||
<string name="auto">Авто</string>
|
||||
<string name="auto_connect">Автоматическое подключение</string>
|
||||
<string name="auto_connect_summary">Включить прокси при запуске/обновлении приложения, если он был запущен до этого</string>
|
||||
<string name="auto_update">Автоматическое обновление</string>
|
||||
<string name="auto_update_delay">Задержка автоматического обновления (в минутах)</string>
|
||||
<string name="backup">Бэкап</string>
|
||||
<string name="backup_groups_and_configurations">Группы и конфигурации</string>
|
||||
<string name="backup_import">Импортировать</string>
|
||||
<string name="backup_import_summary">При импорте существующие данные будут перезаписаны.</string>
|
||||
<string name="backup_importing">Импортирование…</string>
|
||||
<string name="backup_not_file">Не файл резервной копии: ожидался .json, а не %s</string>
|
||||
<string name="backup_rules">Правила маршрутизации</string>
|
||||
<string name="backup_settings">Настройки</string>
|
||||
<string name="backup_summary">Если правила маршрутизации резервируются без конфигураций, то пользовательские исходящие соединения будут потеряны.</string>
|
||||
<string name="bottomsheet_action_collapse">Свернуть нижний экран</string>
|
||||
<string name="bottomsheet_action_expand">Развернуть нижний экран</string>
|
||||
<string name="bottomsheet_action_expand_halfway">Развернуть наполовину</string>
|
||||
<string name="bottomsheet_drag_handle_clicked">Двойное нажатие на маркер перемещения</string>
|
||||
<string name="bottomsheet_drag_handle_content_description">Маркер перемещения</string>
|
||||
<string name="bypass_apps">Обход</string>
|
||||
<string name="bypass_lan_in_core">Обход LAN в ядре</string>
|
||||
<string name="cag_dns">Настройки DNS</string>
|
||||
<string name="cag_misc">Прочие настройки</string>
|
||||
<string name="cag_route">Настройки маршрута</string>
|
||||
<string name="cag_ws">Настройки WebSocket</string>
|
||||
<string name="certificates">Сертификаты</string>
|
||||
<string name="chain_settings">Настройки цепочки</string>
|
||||
<string name="character_counter_content_description">Введено символов: %1$d из %2$d</string>
|
||||
<string name="character_counter_overflowed_content_description">Превышено ограничение на количество символов (%1$d из %2$d)</string>
|
||||
<string name="circular_reference">Циклическая ссылка</string>
|
||||
<string name="circular_reference_sum">Маршрут не может содержать сам себя.</string>
|
||||
<string name="clear_logcat">Очистить Logcat</string>
|
||||
<string name="clear_profiles">Очистить</string>
|
||||
<string name="clear_profiles_message">Вы уверены, что хотите очистить эту группу?</string>
|
||||
<string name="clear_selections">Очистить выбор</string>
|
||||
<string name="clear_text_end_icon_content_description">Очистить текстовое поле</string>
|
||||
<string name="clear_traffic_statistics">Очистить статистику трафика</string>
|
||||
<string name="cleartext_http_warning">Передача HTTP-трафика в виде открытого текста небезопасна</string>
|
||||
<string name="clipboard_empty">Буфер обмена пуст</string>
|
||||
<string name="config_settings">Настройки конфигурации</string>
|
||||
<string name="config_type">Тип конфигурации</string>
|
||||
<string name="confirm">Подтвердить</string>
|
||||
<string name="connect">Подключиться</string>
|
||||
<string name="connecting">Подключение…</string>
|
||||
<string name="connection_test">Тест подключения</string>
|
||||
<string name="connection_test_available">Успех: соединение HTTP заняло %d мс</string>
|
||||
<string name="connection_test_available_http">Успех: соединение HTTP заняло %d мс</string>
|
||||
<string name="connection_test_clear_results">Очистить результаты теста</string>
|
||||
<string name="connection_test_delete_unavailable">Удалить недоступные</string>
|
||||
<string name="connection_test_domain_not_found">Домен не найден</string>
|
||||
<string name="connection_test_error">Ошибка: %s</string>
|
||||
<string name="connection_test_icmp_ping_unavailable">ICMPing недоступен</string>
|
||||
<string name="connection_test_refused">В соединении отказано</string>
|
||||
<string name="connection_test_tcp_ping">TCP Пинг</string>
|
||||
<string name="connection_test_tcp_ping_unavailable">TCPing недоступен</string>
|
||||
<string name="connection_test_testing">Тестирование…</string>
|
||||
<string name="connection_test_timeout">Тайм-аут</string>
|
||||
<string name="connection_test_unreachable">Недоступен</string>
|
||||
<string name="connection_test_url">URL-адрес проверки подключения</string>
|
||||
<string name="connection_test_url_test">URL Тест</string>
|
||||
<string name="copy">Копировать</string>
|
||||
<string name="copy_toast_msg">Ссылка скопирована в буфер обмена.</string>
|
||||
<string name="create_shortcut">Создать ярлык</string>
|
||||
<string name="custom_config">Пользовательская конфигурация</string>
|
||||
<string name="custom_config_json">Пользовательская конфигурация JSON</string>
|
||||
<string name="custom_outbound_json">Пользовательский исходящий JSON</string>
|
||||
<string name="deduplication">Дедупликация</string>
|
||||
<string name="deduplication_sum">Удалить повторяющиеся конфигурации при обновлении</string>
|
||||
<string name="delete">Удалить</string>
|
||||
<string name="delete_confirm_prompt">Вы уверены, что хотите удалить этот профиль?</string>
|
||||
<string name="delete_group_prompt">Вы уверены, что хотите удалить эту группу?</string>
|
||||
<string name="delete_route_prompt">Вы уверены, что хотите удалить этот маршрут?</string>
|
||||
<string name="direct_boot_aware">Разрешить переключение на экране блокировки</string>
|
||||
<string name="direct_boot_aware_summary">Выбранная вами информация профиля будет менее защищена</string>
|
||||
<string name="direct_dns">Прямой DNS</string>
|
||||
<string name="disable">Отключить</string>
|
||||
<string name="dns_hosts">Перезапись домена</string>
|
||||
<string name="dns_routing_message">Разрешить домены в обходных маршрутах с помощью Direct DNS. Помните о потенциальных утечках DNS</string>
|
||||
<string name="document">Документы</string>
|
||||
<string name="domain_strategy">Правило разрешения доменов</string>
|
||||
<string name="domain_strategy_for_direct">Правило домена для Прямого</string>
|
||||
<string name="domain_strategy_for_remote">Правило домена для Удаленного</string>
|
||||
<string name="domain_strategy_for_server">Правило домена для Адреса сервера</string>
|
||||
<string name="donate">Пожертвовать</string>
|
||||
<string name="donate_info">Я люблю деньги</string>
|
||||
<string name="download">Скачать</string>
|
||||
<string name="early_data_header_name">Имя заголовка ранних данных</string>
|
||||
<string name="ech_config">Конфигурация ECH</string>
|
||||
<string name="edit">Редактировать</string>
|
||||
<string name="edit_config">Изменить конфигурацию</string>
|
||||
<string name="empty_route">Пустой маршрут</string>
|
||||
<string name="empty_route_notice">Установите какие-либо правила перед сохранением</string>
|
||||
<string name="enable">Включить</string>
|
||||
<string name="enable_clash_api">Включить Clash API</string>
|
||||
<string name="enable_clash_api_summary">Предоставлять панель управления Clash API и YACD по адресу 127.0.0.1:9090</string>
|
||||
<string name="enable_dns_routing">Включить маршрутизацию DNS</string>
|
||||
<string name="enable_ech">Включить ECH</string>
|
||||
<string name="enable_ech_sum">Включить зашифрованный клиент Hello</string>
|
||||
<string name="enable_fakedns">Включить FakeDNS</string>
|
||||
<string name="enable_log">Включить журнал</string>
|
||||
<string name="enable_log_sum">В целях отладки</string>
|
||||
<string name="enable_mux">Включить мультиплексор</string>
|
||||
<string name="enc_method">Метод шифрования</string>
|
||||
<string name="encryption">Шифрование</string>
|
||||
<string name="error_icon_content_description">Ошибка</string>
|
||||
<string name="error_title">Ошибка</string>
|
||||
<string name="expand_button_title">Дополнительно</string>
|
||||
<string name="exposed_dropdown_menu_content_description">Показать раскрывающееся меню</string>
|
||||
<string name="extra_headers">Дополнительные заголовки</string>
|
||||
<string name="fakedns_message">Может вызвать необходимость перезапуска других приложений для повторного подключения к сети после остановки прокси</string>
|
||||
<string name="file_manager_missing">На вашем устройстве отсутствует стандартный селектор файлов Android, установите его, например Material Files.</string>
|
||||
<string name="follow_system">Использовать системную тему</string>
|
||||
<string name="force_resolve">Принудительно разрешать доменные имена</string>
|
||||
<string name="force_resolve_sum">При обновлении преобразовать все доменные имена в IP-адреса. Хост и SNI будут добавлены автоматически, если это возможно</string>
|
||||
<string name="forward_success">Прокси запустился.</string>
|
||||
<string name="front_proxy">Прямой прокси</string>
|
||||
<string name="general_settings">Настройки приложения</string>
|
||||
<string name="generating">Создание…</string>
|
||||
<string name="github">Исходный код</string>
|
||||
<string name="global_allow_insecure">Всегда разрешать небезопасные</string>
|
||||
<string name="group_added">"\"Создано:
|
||||
%s\""</string>
|
||||
<string name="group_basic">Базовый</string>
|
||||
<string name="group_changed">"\"Обновлено:
|
||||
%s\""</string>
|
||||
<string name="group_create">Создать группу</string>
|
||||
<string name="group_create_subscription">Создать подписку</string>
|
||||
<string name="group_default">Разгруппировано</string>
|
||||
<string name="group_delete_confirm_prompt">Вы уверены, что хотите удалить эту группу?</string>
|
||||
<string name="group_deleted">"\"Удалено:
|
||||
%s\""</string>
|
||||
<string name="group_diff">различия (%s)</string>
|
||||
<string name="group_duplicate">"\"Дубликат:
|
||||
%s\""</string>
|
||||
<string name="group_edit">Редактировать группу</string>
|
||||
<string name="group_edit_subscription">Редактировать подписку</string>
|
||||
<string name="group_filter">Фильтр</string>
|
||||
<string name="group_name">Имя группы</string>
|
||||
<string name="group_name_required">Требуется название группы</string>
|
||||
<string name="group_no_difference">%s: Не отличаются</string>
|
||||
<string name="group_not_subscription">Тип группы не является подпиской</string>
|
||||
<string name="group_order">Сортировка</string>
|
||||
<string name="group_order_by_delay">По задержке</string>
|
||||
<string name="group_order_by_name">По имени</string>
|
||||
<string name="group_order_origin">По источнику</string>
|
||||
<string name="group_settings">Настройки группы</string>
|
||||
<string name="group_show_diff">Сравнить группы</string>
|
||||
<string name="group_status_empty">Пустая группа</string>
|
||||
<string name="group_status_empty_subscription">Еще не обновлено</string>
|
||||
<string name="group_status_proxies">%d прокси</string>
|
||||
<string name="group_status_proxies_subscription" formatted="false">%d Прокси | Обновлено %s</string>
|
||||
<string name="group_subscription_link">Ссылка для подписки</string>
|
||||
<string name="group_type">Тип группы</string>
|
||||
<string name="group_update">Обновить</string>
|
||||
<string name="group_updated" formatted="false">%s: Обновлено %d прокси</string>
|
||||
<string name="grpc_service_name">Имя службы gRPC</string>
|
||||
<string name="header_type">Тип заголовка</string>
|
||||
<string name="http_host">HTTP-хост</string>
|
||||
<string name="http_path">HTTP-путь</string>
|
||||
<string name="hysteria_auth_payload">Полезные данные аутентификации</string>
|
||||
<string name="hysteria_auth_type">Тип аутентификации</string>
|
||||
<string name="hysteria_connection_receive_window">Окно получения соединения QUIC</string>
|
||||
<string name="hysteria_disable_mtu_discovery">Отключить обнаружение MTU пути</string>
|
||||
<string name="hysteria_download_mbps">Максимальная скорость загрузки (в Мбит / с)</string>
|
||||
<string name="hysteria_obfs">Обфускация пароля</string>
|
||||
<string name="hysteria_stream_receive_window">Окно приема потока QUIC</string>
|
||||
<string name="hysteria_upload_mbps">Максимальная скорость загрузки (в Мбит / с)</string>
|
||||
<string name="icon_content_description">Значок диалогового окна</string>
|
||||
<string name="ignore_battery_optimizations">Игнорировать оптимизации батареи</string>
|
||||
<string name="ignore_battery_optimizations_sum">Снять некоторые ограничения</string>
|
||||
<string name="inbound_settings">Входящие настройки</string>
|
||||
<string name="insecure">Ненадежный</string>
|
||||
<string name="install_from_fdroid">Установить с F-Droid</string>
|
||||
<string name="install_from_play_store">Установить из Play Store</string>
|
||||
<string name="invalid_backup_file">Недействительный файл резервной копии</string>
|
||||
<string name="invalid_server">Неверное имя сервера</string>
|
||||
<string name="invert_selections">Инвертировать выбор</string>
|
||||
<string name="ipv6">Маршрут IPv6</string>
|
||||
<string name="item_view_role_description">Вкладка</string>
|
||||
<string name="key_opt">Ключ (необязательно)</string>
|
||||
<string name="landing_proxy">Обратный прокси</string>
|
||||
<string name="license">Лицензия</string>
|
||||
<string name="lines">%d строк</string>
|
||||
<string name="log_level">Тип журнала</string>
|
||||
<string name="log_level_help">Удерживайте для настройки размера буфера.</string>
|
||||
<string name="logcat">Экспорт отладочной информации</string>
|
||||
<string name="material_clock_toggle_content_description">Выберите AM (до полудня) или PM (после полудня)</string>
|
||||
<string name="material_timepicker_am">AM</string>
|
||||
<string name="material_timepicker_pm">PM</string>
|
||||
<string name="menu_about">О приложении</string>
|
||||
<string name="menu_configuration">Конфигурация</string>
|
||||
<string name="menu_group">Группы</string>
|
||||
<string name="menu_log">Журналы</string>
|
||||
<string name="menu_route">Маршруты</string>
|
||||
<string name="menu_tools">Инструменты</string>
|
||||
<string name="menu_traffic">Трафик</string>
|
||||
<string name="metered">Подсказка о соединении с лимитным тарифным планом</string>
|
||||
<string name="metered_summary">Подсказывать системе, что VPN следует рассматривать как сеть с лимитным тарифным планом</string>
|
||||
<string name="missing_plugin">Отсутствующий плагин</string>
|
||||
<string name="move">Переместить</string>
|
||||
<string name="mtrl_badge_numberless_content_description">Новое уведомление</string>
|
||||
<string name="mtrl_chip_close_icon_content_description">Удалить \"%1$s\"</string>
|
||||
<string name="mtrl_exceed_max_badge_number_content_description">Новых уведомлений больше %1$d</string>
|
||||
<string name="mtrl_picker_a11y_next_month">Перейти к следующему месяцу</string>
|
||||
<string name="mtrl_picker_a11y_prev_month">Перейти к предыдущему месяцу</string>
|
||||
<string name="mtrl_picker_cancel">Отмена</string>
|
||||
<string name="mtrl_picker_confirm">ОК</string>
|
||||
<string name="mtrl_picker_day_of_week_column_header">Столбец со днями недели: %1$s</string>
|
||||
<string name="mtrl_picker_navigate_to_year_description">Перейти к %1$s году</string>
|
||||
<string name="mtrl_picker_save">Сохранить</string>
|
||||
<string name="mtrl_picker_toggle_to_calendar_input_mode">Перейти в режим выбора дней</string>
|
||||
<string name="mtrl_picker_toggle_to_day_selection">Нажмите, чтобы перейти к выбору дня</string>
|
||||
<string name="mtrl_picker_toggle_to_text_input_mode">Перейти в режим ввода текста</string>
|
||||
<string name="mtrl_picker_toggle_to_year_selection">Нажмите, чтобы перейти к выбору года</string>
|
||||
<string name="mux_concurrency">Число одновременных подключений Mux</string>
|
||||
<string name="mux_preference">Мультиплекс</string>
|
||||
<string name="mux_sum">Протокол мультиплексирования предназначен для уменьшения задержки соединения TCP, а не для увеличения пропускной способности. Использование мультиплексирования для просмотра видео, загрузки или проверки скорости обычно неэффективно. Если сервер не поддерживает мультиплексирование, вы не сможете получить доступ к Интернету.</string>
|
||||
<string name="mux_type">Протокол мультиплексирования</string>
|
||||
<string name="naive_insecure_concurrency">Небезопасный параллелизм</string>
|
||||
<string name="naive_insecure_concurrency_summary">"\"Использовать N параллельных соединений для повышения отказоустойчивости в условиях ненадёжной сети. Большее число соединений увеличивает риск обнаружения туннелей и снижает безопасность. Этот проект стремится к максимальной защите от анализа трафика, следовательно, использование его небезопасным образом противоречит данной цели.
|
||||
|
||||
Если придётся использовать данную функцию, попробуйте N=2, чтобы проверить, решит ли это проблему. Настоятельно не рекомендуется использовать более 4 соединений.\""</string>
|
||||
<string name="need_reload">Перезагрузите прокси-сервис, чтобы применить изменения</string>
|
||||
<string name="need_restart">Перезапустите приложение для применения изменений</string>
|
||||
<string name="neko_plugin">Дополнительный плагин</string>
|
||||
<string name="neko_plugin_summary">"\"Дополнительные плагины могут предоставлять протоколы, которые изначально не поддерживаются.
|
||||
|
||||
Любой может написать дополнительные плагины, которые могут управлять Nekobox. Загружайте и устанавливайте их из надежных источников.\""</string>
|
||||
<string name="network">Сеть</string>
|
||||
<string name="network_change_reset_connections">Сбрасывать исходящие соединения при изменении сети</string>
|
||||
<string name="night_mode">Ночной режим</string>
|
||||
<string name="no">Нет</string>
|
||||
<string name="no_proxies_found">В ссылке не найдено прокси-серверов</string>
|
||||
<string name="no_proxies_found_in_clipboard">В буфере обмена не найдено ни одного прокси</string>
|
||||
<string name="no_proxies_found_in_file">В файле не найдено прокси-серверов</string>
|
||||
<string name="no_proxies_found_in_subscription">В подписке не найдено прокси-серверов</string>
|
||||
<string name="no_statistics">Статистики пока нет</string>
|
||||
<string name="not_connected">Не подключен</string>
|
||||
<string name="not_set">Не указано</string>
|
||||
<string name="obfs">Obfs</string>
|
||||
<string name="obfs_param">Параметры Obfs</string>
|
||||
<string name="off">Выключенный</string>
|
||||
<string name="on">Включено</string>
|
||||
<string name="only">Исключительно</string>
|
||||
<string name="ooc_warning">Предупреждение</string>
|
||||
<string name="oss_licenses">Лицензии с открытым исходным кодом</string>
|
||||
<string name="packet_encoding">Кодирование пакетов</string>
|
||||
<string name="padding">Отступ</string>
|
||||
<string name="password">Пароль</string>
|
||||
<string name="password_opt">Пароль (необязательно)</string>
|
||||
<string name="password_toggle_content_description">Показать пароль</string>
|
||||
<string name="plugin">Плагин</string>
|
||||
<string name="plugin_auto_connect_unlock_only">Этот плагин может не работать с автоподключением</string>
|
||||
<string name="plugin_configure">Настроить…</string>
|
||||
<string name="plugin_disabled">Отключено</string>
|
||||
<string name="plugin_exists_but_on_shit_system" formatted="false">Профиль %s требует плагин %s, но поставщик вашего проприетарного оборудования (обычно это большие компании, занимающиеся слежкой и производители вредоносного ПО) изменил ваш Android, сделав плагин непригодным для использования.</string>
|
||||
<string name="plugin_unknown">Неизвестный плагин %s</string>
|
||||
<string name="plugin_untrusted">Предупреждение: похоже, что этот плагин не из известного надежного источника.</string>
|
||||
<string name="port_http">Порт прокси HTTP</string>
|
||||
<string name="port_local_dns">Локальный порт DNS</string>
|
||||
<string name="port_proxy">Порт прокси SOCKS5</string>
|
||||
<string name="port_transproxy">Транспрокси-порт</string>
|
||||
<string name="prefer">Предпочитать</string>
|
||||
<string name="preference_copied">Текст \"%1$s\" скопирован в буфер обмена</string>
|
||||
<string name="profile_config">Конфигурация профиля</string>
|
||||
<string name="profile_empty">Пожалуйста, выберите профиль</string>
|
||||
<string name="profile_import">Импортировать профиль</string>
|
||||
<string name="profile_import_message">Подтвердите, что хотите импортировать профиль %s?</string>
|
||||
<string name="profile_name">Имя профиля</string>
|
||||
<string name="profile_requiring_plugin" formatted="false">Профиль %s требует установки подключаемого модуля %s, но он не найден.</string>
|
||||
<string name="profile_traffic_statistics">Статистика трафика профиля</string>
|
||||
<string name="profile_traffic_statistics_summary">Когда отключено, использованный трафик не будет отображаться</string>
|
||||
<string name="project">Проект</string>
|
||||
<string name="protocol">Протокол</string>
|
||||
<string name="protocol_param">Параметры протокола</string>
|
||||
<string name="protocol_settings">Настройки протокола</string>
|
||||
<string name="proxied_apps">Режим VPN для приложений</string>
|
||||
<string name="proxied_apps_summary">Настроить режим VPN для выбранных приложений</string>
|
||||
<string name="proxy_cat">Настройки сервера</string>
|
||||
<string name="proxy_chain">Прокси-цепочка</string>
|
||||
<string name="quick_toggle">Переключить</string>
|
||||
<string name="reboot_required">Не удалось запустить службу VPN. Возможно, вам потребуется перезагрузить устройство.</string>
|
||||
<string name="remote_dns">Удаленный DNS</string>
|
||||
<string name="remove_duplicate">Удалить дубликаты серверов</string>
|
||||
<string name="reset_connections">Сбросить соединения</string>
|
||||
<string name="resolve_destination">Определить адрес назначения</string>
|
||||
<string name="resolve_destination_summary">Если адрес назначения является доменом, то он передается в соответствии с правилом IPv6.</string>
|
||||
<string name="route_add">Создать маршрут</string>
|
||||
<string name="route_asset_no_update">Обновлений нет</string>
|
||||
<string name="route_asset_status">Локальная версия: %s</string>
|
||||
<string name="route_asset_updated">Обновлено</string>
|
||||
<string name="route_assets">Ресурсы</string>
|
||||
<string name="route_block">Блокировать</string>
|
||||
<string name="route_bypass">Обход</string>
|
||||
<string name="route_bypass_domain">Правило домена для %s</string>
|
||||
<string name="route_bypass_ip">Правило IP для %s</string>
|
||||
<string name="route_for">Правило для %s</string>
|
||||
<string name="route_manage_assets">Управление ресурсами маршрутов</string>
|
||||
<string name="route_name">Название маршрута</string>
|
||||
<string name="route_need_vpn">Правило маршрутизации `%s` зависит от VPN, поэтому игнорируется.</string>
|
||||
<string name="route_not_asset">Не файл ресурса: ожидался .db, а не %s</string>
|
||||
<string name="route_opt_block_ads">Блокировать рекламу</string>
|
||||
<string name="route_opt_block_analysis">Блокировать аналитику</string>
|
||||
<string name="route_opt_bypass_lan">Обход LAN</string>
|
||||
<string name="route_play_store">Правило Play Store для %s</string>
|
||||
<string name="route_profile">Выбрать профиль…</string>
|
||||
<string name="route_proxy">Прокси</string>
|
||||
<string name="route_reset">Сброс</string>
|
||||
<string name="route_rules_official">Официальный</string>
|
||||
<string name="route_rules_provider">Поставщик ресурсов правил</string>
|
||||
<string name="route_warn">Перед добавлением собственных правил убедитесь, что вы прочитали документацию, иначе подключение к Интернету может не удасться.</string>
|
||||
<string name="scanning">Сканирование…</string>
|
||||
<string name="search_apps">Поиск…</string>
|
||||
<string name="search_menu_title">Поиск</string>
|
||||
<string name="security">Шифрование транспортного уровня</string>
|
||||
<string name="security_settings">Настройки безопасности</string>
|
||||
<string name="select_apps">Выберите приложения</string>
|
||||
<string name="select_profile">Выбрать профиль</string>
|
||||
<string name="server_address">Сервер</string>
|
||||
<string name="server_port">Удаленный порт</string>
|
||||
<string name="service_failed">Не удалось:</string>
|
||||
<string name="service_mode">Сервисный режим</string>
|
||||
<string name="service_mode_proxy">Только прокси</string>
|
||||
<string name="service_proxy">Прокси-сервис</string>
|
||||
<string name="service_subscription">Служба обновления подписки</string>
|
||||
<string name="service_vpn">VPN-сервис</string>
|
||||
<string name="settings">Настройки</string>
|
||||
<string name="shadowsocks_plugin_simple_obfs">Simple Obfs (плагин Shadowsocks для Android)</string>
|
||||
<string name="shadowsocks_plugin_v2ray">V2Ray (плагин Shadowsocks для Android)</string>
|
||||
<string name="share">Поделиться</string>
|
||||
<string name="share_qr_nfc">QR-код</string>
|
||||
<string name="show_bottom_bar">Показать нижнюю панель, как в SagerNet</string>
|
||||
<string name="show_direct_speed">Показать прямую скорость</string>
|
||||
<string name="show_direct_speed_sum">Также в уведомлении показывать скорость трафика без прокси</string>
|
||||
<string name="show_group_in_notification">Показывать название группы в уведомлении</string>
|
||||
<string name="show_system_apps">Показать системные приложения</string>
|
||||
<string name="sni">Server Name Indication (SNI)</string>
|
||||
<string name="sniff_routing">Перехватывать результат для Маршрутизации</string>
|
||||
<string name="speed">%s/с</string>
|
||||
<string name="speed_detail">"Прокси :%1$s↑ %2$s↓
|
||||
Прямой :%3$s↑%4$s↓"</string>
|
||||
<string name="speed_interval">Интервал обновления уведомлений о скорости</string>
|
||||
<string name="ss_cat">Настройки Shadowsocks</string>
|
||||
<string name="ssh_auth_type_none">Без аутентификации</string>
|
||||
<string name="ssh_private_key">Закрытый ключ</string>
|
||||
<string name="ssh_private_key_passphrase">Парольная фраза закрытого ключа</string>
|
||||
<string name="ssh_public_key">Открытый ключ</string>
|
||||
<string name="standard">Стандарт</string>
|
||||
<string name="start">Старт</string>
|
||||
<string name="status_bar_notification_info_overflow">>999</string>
|
||||
<string name="stop">Остановить</string>
|
||||
<string name="stopping">Выключение…</string>
|
||||
<string name="stun_attest_loading">Пожалуйста, подождите…</string>
|
||||
<string name="stun_test">Обнаружение поведения NAT</string>
|
||||
<string name="stun_test_summary">Определить поведение сопоставления адресов NAT и поведение фильтрации NAT в соответствии с RFC 5780 при помощи STUN.</string>
|
||||
<string name="subscription">Подписка</string>
|
||||
<string name="subscription_import">Импортировать подписку</string>
|
||||
<string name="subscription_import_message">Подтвердите, что хотите импортировать подписку %s? Если вы импортируете из ненадежного источника, это может привести к утечке вашего IP-адреса и такого поведения.</string>
|
||||
<string name="subscription_settings">Настройки подписки</string>
|
||||
<string name="subscription_traffic" formatted="false">%s Использовано / %s Осталось</string>
|
||||
<string name="subscription_type">Тип подписки</string>
|
||||
<string name="subscription_update">Обновление подписки</string>
|
||||
<string name="subscription_update_message">Обновление %s …</string>
|
||||
<string name="subscription_used">%s Использовано</string>
|
||||
<string name="subscription_user_agent">UserAgent</string>
|
||||
<string name="subscriptions">Подписки</string>
|
||||
<string name="summary_collapsed_preference_list">%1$s, %2$s</string>
|
||||
<string name="tcp_connections">%d TCP-соединений</string>
|
||||
<string name="tcp_keep_alive_interval">Интервал доставки пакетов TCP keep-alive</string>
|
||||
<string name="telegram">Канал обновлений в Telegram</string>
|
||||
<string name="theme">Тема</string>
|
||||
<string name="tile_title">Переключатель</string>
|
||||
<string name="tls">Использовать TLS</string>
|
||||
<string name="tls_camouflage_settings">Настройки защиты TLS</string>
|
||||
<string name="tools_network">Сеть</string>
|
||||
<string name="traffic">%1$s↑ %2$s↓</string>
|
||||
<string name="traffic_sniffing">Включить анализ трафика</string>
|
||||
<string name="trojan_provider">Провайдер Trojan</string>
|
||||
<string name="tun_implementation">Реализация TUN</string>
|
||||
<string name="udp_connections">%d UDP-соединений</string>
|
||||
<string name="unavailable">Недоступен</string>
|
||||
<string name="undo">Отменить</string>
|
||||
<string name="unsaved_changes_prompt">Есть несохраненные изменения. Сохранить?</string>
|
||||
<string name="update_current_subscription">Обновить подписку текущей группы</string>
|
||||
<string name="update_settings">Обновить настройки</string>
|
||||
<string name="update_subscription_warning">Прокси-сервер не подключен, вы уверены, что хотите продолжить обновление?</string>
|
||||
<string name="update_when_connected_only">Обновлять только при подключении</string>
|
||||
<string name="update_when_connected_only_sum">Предотвратить утечку IP-адреса</string>
|
||||
<string name="use_selector">Использовать селектор</string>
|
||||
<string name="username">Имя пользователя</string>
|
||||
<string name="username_opt">Имя пользователя (необязательно)</string>
|
||||
<string name="utls_fingerprint">Отпечаток uTLS</string>
|
||||
<string name="uuid">Логин пользователя</string>
|
||||
<string name="v7_preference_off">ВЫКЛ.</string>
|
||||
<string name="v7_preference_on">ВКЛ.</string>
|
||||
<string name="version_x">Версия (%s)</string>
|
||||
<string name="vpn_connected">Подключено, нажмите для проверки подключения</string>
|
||||
<string name="vpn_error">%s</string>
|
||||
<string name="vpn_permission_denied">Отказано в разрешении на создание службы VPN</string>
|
||||
<string name="wake_reset_connections">Сбрасывать исходящие соединения, при выходе из спящего режима</string>
|
||||
<string name="warp_generate">Создать конфигурацию</string>
|
||||
<string name="warp_license">CloudFlare Warp - это бесплатный VPN-провайдер Wire Guard. Используя его, вы соглашаетесь с условиями использования.</string>
|
||||
<string name="wireguard_local_address">Частный адрес</string>
|
||||
<string name="wireguard_psk">Пароль сервера</string>
|
||||
<string name="wireguard_public_key">Открытый ключ сервера</string>
|
||||
<string name="ws_browser_forwarding">Пересылка через браузер</string>
|
||||
<string name="ws_browser_forwarding_sum">Перенаправьте соответствующие веб-сокеты через браузер.</string>
|
||||
<string name="ws_host">Хост WebSocket</string>
|
||||
<string name="ws_path">Путь к WebSocket</string>
|
||||
<string name="xtls_flow">Flow (подпротокол VLESS)</string>
|
||||
<string name="yes">Да</string>
|
||||
</resources>
|
||||
|
||||
+3
-3
@@ -9,9 +9,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://gn.googlesource.com/gn.git
|
||||
PKG_SOURCE_DATE:=2024-12-17
|
||||
PKG_SOURCE_VERSION:=c97a86a72105f3328a540f5a5ab17d11989ab7dd
|
||||
PKG_MIRROR_HASH:=2884591821bac9779d01402e6e7a1c7966889cdd52d3163826ebdcb365ec6101
|
||||
PKG_SOURCE_DATE:=2025-03-24
|
||||
PKG_SOURCE_VERSION:=6e8e0d6d4a151ab2ed9b4a35366e630c55888444
|
||||
PKG_MIRROR_HASH:=8f7fba8f572aa7d324a3bef672a3b36fc2fbc6db19f3202332979d405eff43e4
|
||||
|
||||
PKG_LICENSE:=BSD 3-Clause
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#ifndef OUT_LAST_COMMIT_POSITION_H_
|
||||
#define OUT_LAST_COMMIT_POSITION_H_
|
||||
|
||||
#define LAST_COMMIT_POSITION_NUM 2207
|
||||
#define LAST_COMMIT_POSITION "2207 (c97a86a72105)"
|
||||
#define LAST_COMMIT_POSITION_NUM 2224
|
||||
#define LAST_COMMIT_POSITION "2224 (6e8e0d6d4a15)"
|
||||
|
||||
#endif // OUT_LAST_COMMIT_POSITION_H_
|
||||
|
||||
@@ -6,7 +6,6 @@ uci batch <<EOF
|
||||
"init": "bypass"
|
||||
}
|
||||
EEOF
|
||||
/etc/init.d/ucitrack reload
|
||||
}
|
||||
delete ucitrack.@bypass[-1]
|
||||
add ucitrack bypass
|
||||
|
||||
+22
-22
@@ -5,7 +5,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=naiveproxy
|
||||
PKG_VERSION:=134.0.6998.39-1
|
||||
PKG_VERSION:=135.0.7049.38-1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
# intel 80386 & riscv64 & cortex-a76
|
||||
@@ -20,47 +20,47 @@ else ifeq ($(ARCH_PREBUILT),riscv64_riscv64)
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH_PACKAGES),aarch64_cortex-a53)
|
||||
PKG_HASH:=0e616a8dade5207435e0f7a2d5c39e86850079d2c992a3877d1483b1367db97e
|
||||
PKG_HASH:=7711d714d9cec37eac9048a59fc0d1fa7c7bc0a637018c9b2e419c43368e3c53
|
||||
else ifeq ($(ARCH_PACKAGES),aarch64_cortex-a72)
|
||||
PKG_HASH:=c98c1867f58d24757d2fab09ee28bf921d9805f0d836bb11d25c4acf8306abec
|
||||
PKG_HASH:=44253ecd8cb7c62ffd948901a1191ca2c1b65430ec19253322c5935551e13b7c
|
||||
else ifeq ($(ARCH_PACKAGES),aarch64_generic)
|
||||
PKG_HASH:=9c9d62f1a66b7616e42833ef79ad64aa38c1ac036710ea8bc2a7a133784b7be4
|
||||
PKG_HASH:=7ba36313b0485d0bbb7d95debcd90a8add2d6ae40e756c702542fc64dc1e9c12
|
||||
else ifeq ($(ARCH_PACKAGES),arm_arm1176jzf-s_vfp)
|
||||
PKG_HASH:=2442a34a532e7bfbc0926fd1fbabc94a19779a4ea6edcc50bfe8c2281d524b8d
|
||||
PKG_HASH:=15e33c0368cf8adca8dade760e1d65307f93ea3a7f9e83aa6fe8ab6410578c0e
|
||||
else ifeq ($(ARCH_PACKAGES),arm_arm926ej-s)
|
||||
PKG_HASH:=4efd0b2bdff46657436dda8016f65a06feb1db1275b3b9023e1b5d4bcd95f776
|
||||
PKG_HASH:=c7cca2201b9a582fb674984cf9521c237fa9ff8f5e8fbe6323d4be34b684c85e
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a15_neon-vfpv4)
|
||||
PKG_HASH:=7b423e5def6b067bcf72c987714a34ed0eaf785cb5dd6d372a9a15e573ac3074
|
||||
PKG_HASH:=474e3227c6bb0271e4d9e9a11f02bbf3a96171abbfad710b764a4cbf01276c39
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a5_vfpv4)
|
||||
PKG_HASH:=30d429df58bd50d6a527500e1e279e5ae31440383afec5756b0373c68b971dcb
|
||||
PKG_HASH:=d8267795f9221e3c9ef1194f67b5c132e61236135ba9f5130666782e6cb3b00e
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7)
|
||||
PKG_HASH:=7b4f3b658058569f7cbfb18a6179c317c6bad9947885d46212a32ba526bb519a
|
||||
PKG_HASH:=519d116bea3d19ef3f9da782d2066c09cb4b9fcc1494f9bc2450f65e5d5895b7
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_neon-vfpv4)
|
||||
PKG_HASH:=bf85b73a85a198f73b5d0bd5f538a04be9d126d54b35d56ef1fbf366a758b168
|
||||
PKG_HASH:=e2d8748b13867f9c0f9007b4570bdf2466d4717ed5fe112cdd5c5745dd9cda88
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a7_vfpv4)
|
||||
PKG_HASH:=26481b7801cf55b46b0e0363de4f4520bf4e839586652ed820a3a21413cc3351
|
||||
PKG_HASH:=ee74875fa83dac7b79ea2945ee3320bd1b5c974b38e528217e8db514dfd4f015
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a8_vfpv3)
|
||||
PKG_HASH:=535c30dedf4a95b9d3e79e4b6c36e8ee256c6f439ebbdaa673163b32eef63f0e
|
||||
PKG_HASH:=415aa150b519949cd89b0c8c22ba10681de2bfcd78894830e270c83412f247a7
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9)
|
||||
PKG_HASH:=afa8050347a759b1030939339a7e3e46bab4a8ba42d00b5db3dc7d9bddf5b996
|
||||
PKG_HASH:=62c9b107c4cef346de3d7f81fc39e37356b7635b7c86c2e5628a7c79d852f6e7
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_neon)
|
||||
PKG_HASH:=52bd52c123e3b0c23eda946056bcdca805977ac81d97dba3bd8f07ecb04e2add
|
||||
PKG_HASH:=8e7b251f880f7249138c93b623c82037ea03a4e91cfad0a127d2f0860363ade6
|
||||
else ifeq ($(ARCH_PACKAGES),arm_cortex-a9_vfpv3-d16)
|
||||
PKG_HASH:=d04f22d4c2d33982d638d0a0ec0db07a1fec021ce3100e820c862f7f9788d74b
|
||||
PKG_HASH:=83a8f4333c8a0ce14348d461a6f1b2e55078a2afb5cfa937b5141dd58f700c1c
|
||||
else ifeq ($(ARCH_PACKAGES),arm_mpcore)
|
||||
PKG_HASH:=a3cb60d42ae13253983728767cd41b7ded11bb699ea4239fafeb03e93477c0fc
|
||||
PKG_HASH:=c9d88844b79d77ba387275f707896df6f0ddb109eed15461f169b4193f55f5ae
|
||||
else ifeq ($(ARCH_PACKAGES),arm_xscale)
|
||||
PKG_HASH:=6a9e7a2679812af394cbfc41b5403b5025c8acc15a56c46dc288becd0f940222
|
||||
PKG_HASH:=d27f2d18fd5ce59c78af7f879d300e0700de05672cfb6265d252a4a7197a4df1
|
||||
else ifeq ($(ARCH_PACKAGES),mipsel_24kc)
|
||||
PKG_HASH:=64f6f77e87cb8c06d880b3d4ecafc9baab117452e70dddcdb8c69aae41b6a6ca
|
||||
PKG_HASH:=054b2e9989ae30fbfc2ca4f69e1df686433a604d0c55827e6eb478b902d02cd1
|
||||
else ifeq ($(ARCH_PACKAGES),mipsel_mips32)
|
||||
PKG_HASH:=9be977a06b701dfadae4f6c5e56fde7adbda0f7cc8b11921fae01b5ef2315cc7
|
||||
PKG_HASH:=c6e7015b2e900e94244e66118b2b3c7c9f5ff5e0257311625497e7dc133a1071
|
||||
else ifeq ($(ARCH_PACKAGES),riscv64)
|
||||
PKG_HASH:=91969c969010f7bb1bde3871b7004a37257a8bc7dcf1d3d2a393b38213e236ff
|
||||
PKG_HASH:=7a9a49046672eced503fb9adf8fcb0e158ffd01e8856123e04a1400c57be81b0
|
||||
else ifeq ($(ARCH_PACKAGES),x86)
|
||||
PKG_HASH:=b07fc6775a51b6ff66763210c3c08a60a3e17faa9ed92f5bc0fef8e93266c876
|
||||
PKG_HASH:=ddf4599057756bb77e560454eb7b62591077af731f06baff4491f07a7bf59c57
|
||||
else ifeq ($(ARCH_PACKAGES),x86_64)
|
||||
PKG_HASH:=49e051113d6bf1a9376f26e40ade0672e38b75bc978cabc7622e3a2d0c424d3a
|
||||
PKG_HASH:=41b982201463ebca5aac999efc80484d6261ddcd5763a69e078c1e41fb427ef6
|
||||
else
|
||||
PKG_HASH:=dummy
|
||||
endif
|
||||
|
||||
@@ -12,22 +12,22 @@ PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
GEOIP_VER:=202503281421
|
||||
GEOIP_VER:=202504050136
|
||||
GEOIP_FILE:=geoip.dat.$(GEOIP_VER)
|
||||
define Download/geoip
|
||||
URL:=https://github.com/v2fly/geoip/releases/download/$(GEOIP_VER)/
|
||||
URL_FILE:=geoip.dat
|
||||
FILE:=$(GEOIP_FILE)
|
||||
HASH:=83337c712b04d8c16351cf5a5394eae5cb9cfa257fb4773485945dce65dcea76
|
||||
HASH:=735786c00694313090c5d525516463836167422b132ce293873443613b496e92
|
||||
endef
|
||||
|
||||
GEOSITE_VER:=20250401022534
|
||||
GEOSITE_VER:=20250405160157
|
||||
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
|
||||
define Download/geosite
|
||||
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
|
||||
URL_FILE:=dlc.dat
|
||||
FILE:=$(GEOSITE_FILE)
|
||||
HASH:=6c69c83e0d9ee39cb0674515ce1668a411b9824a1c6314291d77bc83cd0c6d56
|
||||
HASH:=bf18a50193c260b5913af089394e49ca92967a1bb416d1e8e651667985e018bc
|
||||
endef
|
||||
|
||||
GEOSITE_IRAN_VER:=202503310039
|
||||
|
||||
+2
-2
@@ -135,7 +135,7 @@ jobs:
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: ^1.23
|
||||
go-version: ^1.24
|
||||
|
||||
- name: Get project dependencies
|
||||
run: go mod download
|
||||
@@ -215,7 +215,7 @@ jobs:
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: ^1.23
|
||||
go-version: ^1.24
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
module github.com/v2fly/v2ray-core/v5
|
||||
|
||||
go 1.22
|
||||
go 1.23
|
||||
|
||||
toolchain go1.22.7
|
||||
toolchain go1.24.2
|
||||
|
||||
require (
|
||||
github.com/adrg/xdg v0.5.3
|
||||
@@ -13,7 +13,7 @@ require (
|
||||
github.com/golang-collections/go-datastructures v0.0.0-20150211160725-59788d5eb259
|
||||
github.com/golang/mock v1.6.0
|
||||
github.com/golang/protobuf v1.5.4
|
||||
github.com/google/go-cmp v0.6.0
|
||||
github.com/google/go-cmp v0.7.0
|
||||
github.com/google/gopacket v1.1.19
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/improbable-eng/grpc-web v0.15.0
|
||||
@@ -46,7 +46,7 @@ require (
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
gvisor.dev/gvisor v0.0.0-20231020174304-b8a429915ff1
|
||||
h12.io/socks v1.0.3
|
||||
lukechampine.com/blake3 v1.3.0
|
||||
lukechampine.com/blake3 v1.4.0
|
||||
)
|
||||
|
||||
require (
|
||||
|
||||
+4
-4
@@ -199,8 +199,8 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM=
|
||||
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
|
||||
@@ -873,8 +873,8 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
|
||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
lukechampine.com/blake3 v1.3.0 h1:sJ3XhFINmHSrYCgl958hscfIa3bw8x4DqMP3u1YvoYE=
|
||||
lukechampine.com/blake3 v1.3.0/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
|
||||
lukechampine.com/blake3 v1.4.0 h1:xDbKOZCVbnZsfzM6mHSYcGRHZ3YrLDzqz8XnV4uaD5w=
|
||||
lukechampine.com/blake3 v1.4.0/go.mod h1:MQJNQCTnR+kwOP/JEZSxj3MaQjp80FOFSNMMHXcSeX0=
|
||||
nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k=
|
||||
nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
|
||||
@@ -21,10 +21,12 @@ type Config struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
// Server is the DNS server address. If specified, this address overrides the
|
||||
// original one.
|
||||
Server *net.Endpoint `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"`
|
||||
UserLevel uint32 `protobuf:"varint,2,opt,name=user_level,json=userLevel,proto3" json:"user_level,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
Server *net.Endpoint `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"`
|
||||
UserLevel uint32 `protobuf:"varint,2,opt,name=user_level,json=userLevel,proto3" json:"user_level,omitempty"`
|
||||
OverrideResponseTtl bool `protobuf:"varint,4,opt,name=override_response_ttl,json=overrideResponseTtl,proto3" json:"override_response_ttl,omitempty"`
|
||||
ResponseTtl uint32 `protobuf:"varint,3,opt,name=response_ttl,json=responseTtl,proto3" json:"response_ttl,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *Config) Reset() {
|
||||
@@ -71,10 +73,26 @@ func (x *Config) GetUserLevel() uint32 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *Config) GetOverrideResponseTtl() bool {
|
||||
if x != nil {
|
||||
return x.OverrideResponseTtl
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *Config) GetResponseTtl() uint32 {
|
||||
if x != nil {
|
||||
return x.ResponseTtl
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type SimplifiedConfig struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
OverrideResponseTtl bool `protobuf:"varint,4,opt,name=override_response_ttl,json=overrideResponseTtl,proto3" json:"override_response_ttl,omitempty"`
|
||||
ResponseTtl uint32 `protobuf:"varint,3,opt,name=response_ttl,json=responseTtl,proto3" json:"response_ttl,omitempty"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *SimplifiedConfig) Reset() {
|
||||
@@ -107,6 +125,20 @@ func (*SimplifiedConfig) Descriptor() ([]byte, []int) {
|
||||
return file_proxy_dns_config_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *SimplifiedConfig) GetOverrideResponseTtl() bool {
|
||||
if x != nil {
|
||||
return x.OverrideResponseTtl
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *SimplifiedConfig) GetResponseTtl() uint32 {
|
||||
if x != nil {
|
||||
return x.ResponseTtl
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
var File_proxy_dns_config_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_proxy_dns_config_proto_rawDesc = string([]byte{
|
||||
@@ -116,22 +148,33 @@ var file_proxy_dns_config_proto_rawDesc = string([]byte{
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x64, 0x65, 0x73, 0x74, 0x69,
|
||||
0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x65, 0x78, 0x74, 0x2f, 0x65, 0x78,
|
||||
0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x60,
|
||||
0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76,
|
||||
0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79,
|
||||
0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
|
||||
0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65,
|
||||
0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c,
|
||||
0x22, 0x27, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x3a, 0x13, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x62,
|
||||
0x6f, 0x75, 0x6e, 0x64, 0x12, 0x03, 0x64, 0x6e, 0x73, 0x42, 0x5d, 0x0a, 0x18, 0x63, 0x6f, 0x6d,
|
||||
0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78,
|
||||
0x79, 0x2e, 0x64, 0x6e, 0x73, 0x50, 0x01, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2d,
|
||||
0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x64, 0x6e,
|
||||
0x73, 0xaa, 0x02, 0x14, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x50,
|
||||
0x72, 0x6f, 0x78, 0x79, 0x2e, 0x44, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb7,
|
||||
0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x65, 0x72,
|
||||
0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x76, 0x32, 0x72, 0x61,
|
||||
0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65,
|
||||
0x74, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76,
|
||||
0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65,
|
||||
0x6c, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x72, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
|
||||
0x52, 0x13, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x54, 0x74, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x74, 0x6c, 0x22, 0x7e, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x70,
|
||||
0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x0a, 0x15,
|
||||
0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x6f, 0x76, 0x65,
|
||||
0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x74, 0x6c,
|
||||
0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x74, 0x6c,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x54, 0x74, 0x6c, 0x3a, 0x13, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x62, 0x6f,
|
||||
0x75, 0x6e, 0x64, 0x12, 0x03, 0x64, 0x6e, 0x73, 0x42, 0x5d, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x2e,
|
||||
0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79,
|
||||
0x2e, 0x64, 0x6e, 0x73, 0x50, 0x01, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x2f, 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2d, 0x63,
|
||||
0x6f, 0x72, 0x65, 0x2f, 0x76, 0x35, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x64, 0x6e, 0x73,
|
||||
0xaa, 0x02, 0x14, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x50, 0x72,
|
||||
0x6f, 0x78, 0x79, 0x2e, 0x44, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
})
|
||||
|
||||
var (
|
||||
|
||||
@@ -14,9 +14,15 @@ message Config {
|
||||
// original one.
|
||||
v2ray.core.common.net.Endpoint server = 1;
|
||||
uint32 user_level = 2;
|
||||
|
||||
bool override_response_ttl = 4;
|
||||
uint32 response_ttl = 3;
|
||||
}
|
||||
|
||||
message SimplifiedConfig {
|
||||
option (v2ray.core.common.protoext.message_opt).type = "outbound";
|
||||
option (v2ray.core.common.protoext.message_opt).short_name = "dns";
|
||||
|
||||
bool override_response_ttl = 4;
|
||||
uint32 response_ttl = 3;
|
||||
}
|
||||
@@ -38,6 +38,8 @@ func init() {
|
||||
simplifiedServer := config.(*SimplifiedConfig)
|
||||
_ = simplifiedServer
|
||||
fullConfig := &Config{}
|
||||
fullConfig.OverrideResponseTtl = simplifiedServer.OverrideResponseTtl
|
||||
fullConfig.ResponseTtl = simplifiedServer.ResponseTtl
|
||||
return common.CreateObject(ctx, fullConfig)
|
||||
}))
|
||||
}
|
||||
@@ -53,6 +55,8 @@ type Handler struct {
|
||||
ownLinkVerifier ownLinkVerifier
|
||||
server net.Destination
|
||||
timeout time.Duration
|
||||
|
||||
config *Config
|
||||
}
|
||||
|
||||
func (h *Handler) Init(config *Config, dnsClient dns.Client, policyManager policy.Manager) error {
|
||||
@@ -82,6 +86,8 @@ func (h *Handler) Init(config *Config, dnsClient dns.Client, policyManager polic
|
||||
if config.Server != nil {
|
||||
h.server = config.Server.AsDestination()
|
||||
}
|
||||
|
||||
h.config = config
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -239,6 +245,9 @@ func (h *Handler) handleIPQuery(id uint16, qType dnsmessage.Type, domain string,
|
||||
var err error
|
||||
|
||||
var ttl uint32 = 600
|
||||
if h.config.OverrideResponseTtl {
|
||||
ttl = h.config.ResponseTtl
|
||||
}
|
||||
|
||||
switch qType {
|
||||
case dnsmessage.TypeA:
|
||||
|
||||
@@ -164,7 +164,7 @@ func (d dialerWithEarlyData) Dial(earlyData []byte) (*websocket.Conn, error) {
|
||||
}
|
||||
if n != int64(len(earlyData)) {
|
||||
if errWrite := conn.WriteMessage(websocket.BinaryMessage, earlyData[n:]); errWrite != nil {
|
||||
return nil, newError("failed to dial to (", d.uriBase, ") with early data as write of remainder early data failed: ").Base(err)
|
||||
return nil, newError("failed to dial to (", d.uriBase, ") with early data as write of remainder early data failed: ").Base(errWrite)
|
||||
}
|
||||
}
|
||||
return conn, nil
|
||||
@@ -209,7 +209,7 @@ func (d dialerWithEarlyDataRelayed) Dial(earlyData []byte) (io.ReadWriteCloser,
|
||||
}
|
||||
if n != int64(len(earlyData)) {
|
||||
if _, errWrite := conn.Write(earlyData[n:]); errWrite != nil {
|
||||
return nil, newError("failed to dial to (", d.uriBase, ") with early data as write of remainder early data failed: ").Base(err)
|
||||
return nil, newError("failed to dial to (", d.uriBase, ") with early data as write of remainder early data failed: ").Base(errWrite)
|
||||
}
|
||||
}
|
||||
return conn, nil
|
||||
|
||||
@@ -5,7 +5,9 @@ from ..utils import (
|
||||
int_or_none,
|
||||
try_get,
|
||||
unified_strdate,
|
||||
url_or_none,
|
||||
)
|
||||
from ..utils.traversal import traverse_obj
|
||||
|
||||
|
||||
class CrowdBunkerIE(InfoExtractor):
|
||||
@@ -44,16 +46,15 @@ class CrowdBunkerIE(InfoExtractor):
|
||||
'url': sub_url,
|
||||
})
|
||||
|
||||
mpd_url = try_get(video_json, lambda x: x['dashManifest']['url'])
|
||||
if mpd_url:
|
||||
fmts, subs = self._extract_mpd_formats_and_subtitles(mpd_url, video_id)
|
||||
if mpd_url := traverse_obj(video_json, ('dashManifest', 'url', {url_or_none})):
|
||||
fmts, subs = self._extract_mpd_formats_and_subtitles(mpd_url, video_id, mpd_id='dash', fatal=False)
|
||||
formats.extend(fmts)
|
||||
subtitles = self._merge_subtitles(subtitles, subs)
|
||||
m3u8_url = try_get(video_json, lambda x: x['hlsManifest']['url'])
|
||||
if m3u8_url:
|
||||
fmts, subs = self._extract_m3u8_formats_and_subtitles(mpd_url, video_id)
|
||||
self._merge_subtitles(subs, target=subtitles)
|
||||
|
||||
if m3u8_url := traverse_obj(video_json, ('hlsManifest', 'url', {url_or_none})):
|
||||
fmts, subs = self._extract_m3u8_formats_and_subtitles(m3u8_url, video_id, m3u8_id='hls', fatal=False)
|
||||
formats.extend(fmts)
|
||||
subtitles = self._merge_subtitles(subtitles, subs)
|
||||
self._merge_subtitles(subs, target=subtitles)
|
||||
|
||||
thumbnails = [{
|
||||
'url': image['url'],
|
||||
|
||||
@@ -7,7 +7,6 @@ from ..utils import (
|
||||
ExtractorError,
|
||||
UnsupportedError,
|
||||
clean_html,
|
||||
determine_ext,
|
||||
extract_attributes,
|
||||
format_field,
|
||||
get_element_by_class,
|
||||
@@ -36,7 +35,7 @@ class RumbleEmbedIE(InfoExtractor):
|
||||
'upload_date': '20191020',
|
||||
'channel_url': 'https://rumble.com/c/WMAR',
|
||||
'channel': 'WMAR',
|
||||
'thumbnail': 'https://sp.rmbl.ws/s8/1/5/M/z/1/5Mz1a.qR4e-small-WMAR-2-News-Latest-Headline.jpg',
|
||||
'thumbnail': r're:https://.+\.jpg',
|
||||
'duration': 234,
|
||||
'uploader': 'WMAR',
|
||||
'live_status': 'not_live',
|
||||
@@ -52,7 +51,7 @@ class RumbleEmbedIE(InfoExtractor):
|
||||
'upload_date': '20220217',
|
||||
'channel_url': 'https://rumble.com/c/CyberTechNews',
|
||||
'channel': 'CTNews',
|
||||
'thumbnail': 'https://sp.rmbl.ws/s8/6/7/i/9/h/7i9hd.OvCc.jpg',
|
||||
'thumbnail': r're:https://.+\.jpg',
|
||||
'duration': 901,
|
||||
'uploader': 'CTNews',
|
||||
'live_status': 'not_live',
|
||||
@@ -114,6 +113,22 @@ class RumbleEmbedIE(InfoExtractor):
|
||||
'live_status': 'was_live',
|
||||
},
|
||||
'params': {'skip_download': True},
|
||||
}, {
|
||||
'url': 'https://rumble.com/embed/v6pezdb',
|
||||
'info_dict': {
|
||||
'id': 'v6pezdb',
|
||||
'ext': 'mp4',
|
||||
'title': '"Es war einmal ein Mädchen" – Ein filmisches Zeitzeugnis aus Leningrad 1944',
|
||||
'uploader': 'RT DE',
|
||||
'channel': 'RT DE',
|
||||
'channel_url': 'https://rumble.com/c/RTDE',
|
||||
'duration': 309,
|
||||
'thumbnail': 'https://1a-1791.com/video/fww1/dc/s8/1/n/z/2/y/nz2yy.qR4e-small-Es-war-einmal-ein-Mdchen-Ei.jpg',
|
||||
'timestamp': 1743703500,
|
||||
'upload_date': '20250403',
|
||||
'live_status': 'not_live',
|
||||
},
|
||||
'params': {'skip_download': True},
|
||||
}, {
|
||||
'url': 'https://rumble.com/embed/ufe9n.v5pv5f',
|
||||
'only_matching': True,
|
||||
@@ -168,40 +183,42 @@ class RumbleEmbedIE(InfoExtractor):
|
||||
live_status = None
|
||||
|
||||
formats = []
|
||||
for ext, ext_info in (video.get('ua') or {}).items():
|
||||
if isinstance(ext_info, dict):
|
||||
for height, video_info in ext_info.items():
|
||||
for format_type, format_info in (video.get('ua') or {}).items():
|
||||
if isinstance(format_info, dict):
|
||||
for height, video_info in format_info.items():
|
||||
if not traverse_obj(video_info, ('meta', 'h', {int_or_none})):
|
||||
video_info.setdefault('meta', {})['h'] = height
|
||||
ext_info = ext_info.values()
|
||||
format_info = format_info.values()
|
||||
|
||||
for video_info in ext_info:
|
||||
for video_info in format_info:
|
||||
meta = video_info.get('meta') or {}
|
||||
if not video_info.get('url'):
|
||||
continue
|
||||
if ext == 'hls':
|
||||
# With default query params returns m3u8 variants which are duplicates, without returns tar files
|
||||
if format_type == 'tar':
|
||||
continue
|
||||
if format_type == 'hls':
|
||||
if meta.get('live') is True and video.get('live') == 1:
|
||||
live_status = 'post_live'
|
||||
formats.extend(self._extract_m3u8_formats(
|
||||
video_info['url'], video_id,
|
||||
ext='mp4', m3u8_id='hls', fatal=False, live=live_status == 'is_live'))
|
||||
continue
|
||||
timeline = ext == 'timeline'
|
||||
if timeline:
|
||||
ext = determine_ext(video_info['url'])
|
||||
is_timeline = format_type == 'timeline'
|
||||
is_audio = format_type == 'audio'
|
||||
formats.append({
|
||||
'ext': ext,
|
||||
'acodec': 'none' if timeline else None,
|
||||
'acodec': 'none' if is_timeline else None,
|
||||
'vcodec': 'none' if is_audio else None,
|
||||
'url': video_info['url'],
|
||||
'format_id': join_nonempty(ext, format_field(meta, 'h', '%sp')),
|
||||
'format_note': 'Timeline' if timeline else None,
|
||||
'fps': None if timeline else video.get('fps'),
|
||||
'format_id': join_nonempty(format_type, format_field(meta, 'h', '%sp')),
|
||||
'format_note': 'Timeline' if is_timeline else None,
|
||||
'fps': None if is_timeline or is_audio else video.get('fps'),
|
||||
**traverse_obj(meta, {
|
||||
'tbr': 'bitrate',
|
||||
'filesize': 'size',
|
||||
'width': 'w',
|
||||
'height': 'h',
|
||||
}, expected_type=lambda x: int(x) or None),
|
||||
'tbr': ('bitrate', {int_or_none}),
|
||||
'filesize': ('size', {int_or_none}),
|
||||
'width': ('w', {int_or_none}),
|
||||
'height': ('h', {int_or_none}),
|
||||
}),
|
||||
})
|
||||
|
||||
subtitles = {
|
||||
|
||||
Reference in New Issue
Block a user