mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-10-19 16:10:46 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71429f9a42 |
Generated
+224
-438
File diff suppressed because it is too large
Load Diff
+12
-3
@@ -49,7 +49,15 @@ split-debuginfo = "unpacked"
|
|||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
# Backport Windows menu command ID recycling on the muda 0.20 compatibility branch.
|
# Backport Windows menu command ID recycling on the muda 0.20 compatibility branch.
|
||||||
muda = { git = "https://github.com/wonfen/muda.git", rev = "547de49352791653fbdfa785f20f3c7ece8468e2" }
|
muda = { git = "https://github.com/wonfen/muda.git", rev = "547de49352791653fbdfa785f20f3c7ece8468e2" }
|
||||||
|
# tauri-specta has no tauri 3 release yet; ride the tauri team's port and the
|
||||||
|
# unpublished specta rc.26 line it pins. Drop all six entries once both ship
|
||||||
|
# on crates.io.
|
||||||
|
tauri-specta = { git = "https://github.com/tauri-apps/tauri-specta", branch = "tauri-v3" }
|
||||||
|
specta = { git = "https://github.com/specta-rs/specta.git", rev = "2757fa8899926dce7da999780c7edf2dc08a732a" }
|
||||||
|
specta-macros = { git = "https://github.com/specta-rs/specta.git", rev = "2757fa8899926dce7da999780c7edf2dc08a732a" }
|
||||||
|
specta-serde = { git = "https://github.com/specta-rs/specta.git", rev = "2757fa8899926dce7da999780c7edf2dc08a732a" }
|
||||||
|
specta-typescript = { git = "https://github.com/specta-rs/specta.git", rev = "2757fa8899926dce7da999780c7edf2dc08a732a" }
|
||||||
|
specta-util = { git = "https://github.com/specta-rs/specta.git", rev = "2757fa8899926dce7da999780c7edf2dc08a732a" }
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
clash-verge-draft = { path = "crates/clash-verge-draft" }
|
clash-verge-draft = { path = "crates/clash-verge-draft" }
|
||||||
clash-verge-media-unlock = { path = "crates/clash-verge-media-unlock" }
|
clash-verge-media-unlock = { path = "crates/clash-verge-media-unlock" }
|
||||||
@@ -61,8 +69,9 @@ tracing-estuary = { git = "https://github.com/Tunglies/tracing-estuary.git", bra
|
|||||||
tauri-plugin-clash-verge-sysinfo = { path = "crates/tauri-plugin-clash-verge-sysinfo" }
|
tauri-plugin-clash-verge-sysinfo = { path = "crates/tauri-plugin-clash-verge-sysinfo" }
|
||||||
tracing = "0.1.44"
|
tracing = "0.1.44"
|
||||||
|
|
||||||
tauri = { version = "2.12.1" }
|
tauri = { version = "3.0.0-alpha.4" }
|
||||||
tauri-plugin-clipboard-manager = "2.4.1"
|
tauri-runtime-wry = "3.0.0-alpha.4"
|
||||||
|
tauri-plugin-clipboard-manager = "3.0.0-alpha.2"
|
||||||
parking_lot = { version = "0.12.5", features = ["hardware-lock-elision"] }
|
parking_lot = { version = "0.12.5", features = ["hardware-lock-elision"] }
|
||||||
anyhow = "1.0.104"
|
anyhow = "1.0.104"
|
||||||
chrono = "0.4.45"
|
chrono = "0.4.45"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
specta = { version = "=2.0.0-rc.25", features = ["derive", "function"] }
|
specta = { version = "=2.0.0-rc.26", features = ["derive", "function"] }
|
||||||
clash-verge-logging = { workspace = true }
|
clash-verge-logging = { workspace = true }
|
||||||
chrono = { workspace = true }
|
chrono = { workspace = true }
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ edition = "2024"
|
|||||||
rust-version = "1.91"
|
rust-version = "1.91"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
specta = { version = "=2.0.0-rc.25", features = ["derive", "function"] }
|
specta = { version = "=2.0.0-rc.26", features = ["derive", "function"] }
|
||||||
tauri = { workspace = true }
|
tauri = { workspace = true }
|
||||||
tauri-plugin-clipboard-manager = { workspace = true }
|
tauri-plugin-clipboard-manager = { workspace = true }
|
||||||
parking_lot = { workspace = true }
|
parking_lot = { workspace = true }
|
||||||
|
|||||||
+8
-8
@@ -54,13 +54,13 @@
|
|||||||
"@mui/icons-material": "^9.4.0",
|
"@mui/icons-material": "^9.4.0",
|
||||||
"@mui/material": "^9.4.0",
|
"@mui/material": "^9.4.0",
|
||||||
"@tanstack/react-virtual": "^3.14.13",
|
"@tanstack/react-virtual": "^3.14.13",
|
||||||
"@tauri-apps/api": "2.12.1",
|
"@tauri-apps/api": "3.0.0-alpha.2",
|
||||||
"@tauri-apps/plugin-clipboard-manager": "2.4.0",
|
"@tauri-apps/plugin-clipboard-manager": "^3.0.0-alpha.2",
|
||||||
"@tauri-apps/plugin-dialog": "2.8.0",
|
"@tauri-apps/plugin-dialog": "^3.0.0-alpha.3",
|
||||||
"@tauri-apps/plugin-fs": "2.6.0",
|
"@tauri-apps/plugin-fs": "^3.0.0-alpha.2",
|
||||||
"@tauri-apps/plugin-http": "2.8.0",
|
"@tauri-apps/plugin-http": "~3.0.0-alpha.2",
|
||||||
"@tauri-apps/plugin-opener": "2.7.0",
|
"@tauri-apps/plugin-opener": "3.0.0-alpha.2",
|
||||||
"@tauri-apps/plugin-updater": "2.13.1",
|
"@tauri-apps/plugin-updater": "3.0.0-alpha.2",
|
||||||
"ahooks": "^3.10.0",
|
"ahooks": "^3.10.0",
|
||||||
"cidr-block": "^2.3.0",
|
"cidr-block": "^2.3.0",
|
||||||
"compare-versions": "^6.1.1",
|
"compare-versions": "^6.1.1",
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
"@biomejs/biome": "^2.5.14",
|
"@biomejs/biome": "^2.5.14",
|
||||||
"@eslint-react/eslint-plugin": "^5.20.5",
|
"@eslint-react/eslint-plugin": "^5.20.5",
|
||||||
"@eslint/js": "^10.0.1",
|
"@eslint/js": "^10.0.1",
|
||||||
"@tauri-apps/cli": "2.12.1",
|
"@tauri-apps/cli": "3.0.0-alpha.4",
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/node": "^24.13.6",
|
"@types/node": "^24.13.6",
|
||||||
"@types/react": "19.3.0",
|
"@types/react": "19.3.0",
|
||||||
|
|||||||
Generated
+92
-87
@@ -200,26 +200,26 @@ importers:
|
|||||||
specifier: ^3.14.13
|
specifier: ^3.14.13
|
||||||
version: 3.14.13(react-dom@19.3.0(react@19.3.0))(react@19.3.0)
|
version: 3.14.13(react-dom@19.3.0(react@19.3.0))(react@19.3.0)
|
||||||
'@tauri-apps/api':
|
'@tauri-apps/api':
|
||||||
specifier: 2.12.1
|
specifier: 3.0.0-alpha.2
|
||||||
version: 2.12.1
|
version: 3.0.0-alpha.2
|
||||||
'@tauri-apps/plugin-clipboard-manager':
|
'@tauri-apps/plugin-clipboard-manager':
|
||||||
specifier: 2.4.0
|
specifier: ^3.0.0-alpha.2
|
||||||
version: 2.4.0
|
version: 3.0.0-alpha.2
|
||||||
'@tauri-apps/plugin-dialog':
|
'@tauri-apps/plugin-dialog':
|
||||||
specifier: 2.8.0
|
specifier: ^3.0.0-alpha.3
|
||||||
version: 2.8.0
|
version: 3.0.0-alpha.3
|
||||||
'@tauri-apps/plugin-fs':
|
'@tauri-apps/plugin-fs':
|
||||||
specifier: 2.6.0
|
specifier: ^3.0.0-alpha.2
|
||||||
version: 2.6.0
|
version: 3.0.0-alpha.2
|
||||||
'@tauri-apps/plugin-http':
|
'@tauri-apps/plugin-http':
|
||||||
specifier: 2.8.0
|
specifier: ~3.0.0-alpha.2
|
||||||
version: 2.8.0
|
version: 3.0.0-alpha.2
|
||||||
'@tauri-apps/plugin-opener':
|
'@tauri-apps/plugin-opener':
|
||||||
specifier: 2.7.0
|
specifier: 3.0.0-alpha.2
|
||||||
version: 2.7.0
|
version: 3.0.0-alpha.2
|
||||||
'@tauri-apps/plugin-updater':
|
'@tauri-apps/plugin-updater':
|
||||||
specifier: 2.13.1
|
specifier: 3.0.0-alpha.2
|
||||||
version: 2.13.1
|
version: 3.0.0-alpha.2
|
||||||
ahooks:
|
ahooks:
|
||||||
specifier: ^3.10.0
|
specifier: ^3.10.0
|
||||||
version: 3.10.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)
|
version: 3.10.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)
|
||||||
@@ -318,8 +318,8 @@ importers:
|
|||||||
specifier: ^10.0.1
|
specifier: ^10.0.1
|
||||||
version: 10.0.1(eslint@10.11.0(jiti@2.7.0)(supports-color@7.2.0))
|
version: 10.0.1(eslint@10.11.0(jiti@2.7.0)(supports-color@7.2.0))
|
||||||
'@tauri-apps/cli':
|
'@tauri-apps/cli':
|
||||||
specifier: 2.12.1
|
specifier: 3.0.0-alpha.4
|
||||||
version: 2.12.1
|
version: 3.0.0-alpha.4
|
||||||
'@types/lodash-es':
|
'@types/lodash-es':
|
||||||
specifier: ^4.17.12
|
specifier: ^4.17.12
|
||||||
version: 4.17.12
|
version: 4.17.12
|
||||||
@@ -2129,99 +2129,102 @@ packages:
|
|||||||
'@tauri-apps/api@2.12.1':
|
'@tauri-apps/api@2.12.1':
|
||||||
resolution: {integrity: sha512-DeyFHa3wynpyoqTDikDEDGTJIq4LQ5USfolQGRmGIWT6JMADyxZBTDa5cAdT3tDg73rUXufPaCwN7aXBos4OnQ==}
|
resolution: {integrity: sha512-DeyFHa3wynpyoqTDikDEDGTJIq4LQ5USfolQGRmGIWT6JMADyxZBTDa5cAdT3tDg73rUXufPaCwN7aXBos4OnQ==}
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-arm64@2.12.1':
|
'@tauri-apps/api@3.0.0-alpha.2':
|
||||||
resolution: {integrity: sha512-8bMnbpJ2jKO/ufrOPL65EMHC3ptw7fzeraoQkwibyfGLqIl+UCWsC0152kmNbW6r9NvVQduXqAZF5mH1QgTWhw==}
|
resolution: {integrity: sha512-W5MTTRAsbNqxSO5hf6U6gHwtTfW0ZnEyIWkmn9L6XYWFcSi0n1JtVQAIsJ6EZHLpJkchGEFwSeVBy+IcrtXl4g==}
|
||||||
|
|
||||||
|
'@tauri-apps/cli-darwin-arm64@3.0.0-alpha.4':
|
||||||
|
resolution: {integrity: sha512-QSySr8o6f8nD/6e8BG9QYQTExlAhsiM2c6ewNti3kzcVzDh7WvM/Jya93mKhQrSjKumq7bUa/jlgmFB24P2oNA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-x64@2.12.1':
|
'@tauri-apps/cli-darwin-x64@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-G+2qte8GNqNlEZ9ftd21rbu/APVkl3r/nzNDI7LVxEoqJWVNe9GbEgQUMH1r4PHT20Z2UxR3KjCkltIb0e/Wjg==}
|
resolution: {integrity: sha512-sx0fxH4CEWdWeB8THKzB4mF8P0ZXi1UXO/gVM4dzLjFpHcZbvMJ7B2cBeHNH3ED16aVKbbCGVYLDFVLh56x1Kg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm-gnueabihf@2.12.1':
|
'@tauri-apps/cli-linux-arm-gnueabihf@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-5b3n4DaTW+A1Zntnh4Yn44VyLrlPEpB8kMOBRfWkzNnzolBk+AYhKIfKjCLmoC8Mob3ETodxAEOMkE2YPKEWzQ==}
|
resolution: {integrity: sha512-eyABwsj3vJiyipJERTJCMYJfguXCxiL94Ux8SP9rwBao7cOEFgonhX2uG57/K4RekmZPFMekcfHp8JMXf88VCQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-gnu@2.12.1':
|
'@tauri-apps/cli-linux-arm64-gnu@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-APArHhDu+8pXSCkCQmvaz1nD3d8WTmlCoSS/oG475TJ6AATBvyQOAmf5qELgsQ4s2+8MOsop0Zd699RKELF1Cw==}
|
resolution: {integrity: sha512-HmYCfjTlpn3mwMh5A2PeZud6QBZJbstTQDRCbs6ikd8t9GurSGTJINVbONrauNKUXYd37c8h5eEERRrkzqpK+w==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [glibc]
|
libc: [glibc]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-musl@2.12.1':
|
'@tauri-apps/cli-linux-arm64-musl@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-JaCxcLoV0oGtllVkLr4UAHWG/wTfkEunnUqnsEsGYOp0VRxnUwHg63wFBD0jU2ul5eFfSLIDS4RF2gfzsSo5Jg==}
|
resolution: {integrity: sha512-BgD2YHYkOLKJ8qIpiwnYmq1xMKhxwGEOeX+HRjyrtIb4Eonf4/qGKfH7AoN88MUjpUfm+Zn3AZ82bQBAFDhV9Q==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [musl]
|
libc: [musl]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-riscv64-gnu@2.12.1':
|
'@tauri-apps/cli-linux-riscv64-gnu@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-K5+VXM7+SGVDwZleA2+lMgvbTVuA5e1tkiVEawu1Yxj26ZyEfO8h8xTC1rBdRX2xgJDSwCk6vPUBCS6i+Z5slQ==}
|
resolution: {integrity: sha512-AHl6DFQEtNDaI2YuIqNeSm7G3RWlHSz2R23+j1woFMXZjR48Dd7xSxthWybnxgy09Qw//8OeE5LX0u9oaC07ew==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [glibc]
|
libc: [glibc]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-gnu@2.12.1':
|
'@tauri-apps/cli-linux-x64-gnu@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-Z1QGPr49HJZMktu+Spu6Q1b/f9ANadXvqZZZt2645ua1x1ev6prOgp85eiGv2jRzohFEMLo6aJyaLjLUX5KIvA==}
|
resolution: {integrity: sha512-sfLIf/Dr3fio2gGAIXvjDdhESeQDyVKTTuhXfKV361gcTcx+/OkkctVw1FBKgdtRqDP0JVQI9y8sXdhuL0F61A==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [glibc]
|
libc: [glibc]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-musl@2.12.1':
|
'@tauri-apps/cli-linux-x64-musl@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-nHuEhRPOMSJ/8RRhtMRxB9B9lVr7xxpe4DapBz8x1GIau3vdzjHHJ1hAfmw+PyayPLZ6XoaVIHPgI17rX6ii8w==}
|
resolution: {integrity: sha512-3aY8+4mvts+dia8VXfGhJYxhhU57fdcbL7IxKLrTt4ASrsXwCDspVf+yVfa0GKpsUWPIxsGA7dYt9oaviv8gkg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [musl]
|
libc: [musl]
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-arm64-msvc@2.12.1':
|
'@tauri-apps/cli-win32-arm64-msvc@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-I0oPk2uGh86R8dAs2X5OxSP+/GqSc8jh1Px3l8EqrocSNivsRHDTh2k3PVOqdv163dlV6PIVvmhZAbH/lPfZrA==}
|
resolution: {integrity: sha512-m3hVaoWavJBGHrKPGjhyCVW+IIbXMTP2CvqqG7Ak6yoVJLEYYTwkwfEq/dMHpX9Spw9iQE5pONK1vTatcJ/jPQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-ia32-msvc@2.12.1':
|
'@tauri-apps/cli-win32-ia32-msvc@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-baNZRBfepAJ5qNFRMwzgBk94xQmkcmTZrNDjZjnzrq2vAaTC3NAhallb/zo3hyoCGQlMS13sdovktrg46NZz6Q==}
|
resolution: {integrity: sha512-v8J3IgwgFsOiuDPLCScYGAQjQZKj+46o1mMRVcx4gYo1JV9P6o/hblJX5nMT/oTTGdsAgao5PZNxUlX8WJGMFA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-x64-msvc@2.12.1':
|
'@tauri-apps/cli-win32-x64-msvc@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-dIFaKslrzcbesb+bBh+E1R9km241pHyj32w6D9FPtvQeYpRUFbiCLEa/2S+S0UnIytfxepp4P+X8IerGqnXeYg==}
|
resolution: {integrity: sha512-BfEHaKBdNImxb9KOVji9hROEVnPWl2ImshQmV9ASC61jraX2/xCJ+YNdaAi7yA18qAyQVb/CszsfhFWJHT+YbA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tauri-apps/cli@2.12.1':
|
'@tauri-apps/cli@3.0.0-alpha.4':
|
||||||
resolution: {integrity: sha512-kEDEiGzG+yAc5FeLxtXpES/VN+F2C8H0r4gDVtfRLKxT9np9101d9REG/Kgo2lr0hKi0IpDsODiHnU3+naOmLg==}
|
resolution: {integrity: sha512-hu2CcWxH6yeo5CfLkEYvDOHW5aKdh0gY5DobR5UK+psBInfsc/qKetD0HA+Z41WvVQZsHJXk2uvPMUZP2ckAJg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
'@tauri-apps/plugin-clipboard-manager@2.4.0':
|
'@tauri-apps/plugin-clipboard-manager@3.0.0-alpha.2':
|
||||||
resolution: {integrity: sha512-yAuTffXc/sm+4oYnrwxbUkaJXQMTesPJ9dim0ADcA31rpboyhAN2TGQqs9VCcPIpb60LFOeePkvhpP2I3xhejg==}
|
resolution: {integrity: sha512-87oq7PUtHZk0PZgvIp5KWsXWOIJtUz3qEiL+PFvV/dC4T4EByi+dx4/hZ+/BMiX7lchknPmA6WTmmx+530Xjgw==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-dialog@2.8.0':
|
'@tauri-apps/plugin-dialog@3.0.0-alpha.3':
|
||||||
resolution: {integrity: sha512-HSSD5C8UFE9ijD1wue84F7jjaIReFmj8AAPtS+xyjYRltJafIc4BiWHY7SJ6vbbew6u+YljEJHfyNfy5VwywXg==}
|
resolution: {integrity: sha512-LjP/CwCaQ/uVhIjFbMG1JM9MY9+gvNchoRsQoOQpm1+y8dWKCb4/VFFXv+RuH6XbR11eIU6G+yL34hggc7iw2Q==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-fs@2.6.0':
|
'@tauri-apps/plugin-fs@3.0.0-alpha.2':
|
||||||
resolution: {integrity: sha512-MhBAZ4rryd+h9fijd/GWDfArqiAeGI0ZNduV4wuRyUVI6wDZ+oDBY7atqtoXKDwlTUVSvpvmWJAY0ehQd/v6Uw==}
|
resolution: {integrity: sha512-w/pmQ5swWqEgQhWMabreK5eMIiAHXHFKdb/SWGrZF4tTpVky/dUAyScFl7XiFRKpfr5cHSDiZAP/dsg0Ud9p9w==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-http@2.8.0':
|
'@tauri-apps/plugin-http@3.0.0-alpha.2':
|
||||||
resolution: {integrity: sha512-cPvZvfUSaBkqGxef/dgbh/iEl6T3jQfSJyypi9OdcWr1VcuTt4ZRlk9DLAHEHF2q2NML+0UOkjyXRPNo6Cky6g==}
|
resolution: {integrity: sha512-imgCIw601u03ahDFu+ifiOKMAU6zab0taYp6h6Z7O9TcsU1SRqgXxbVcO84iLQ4bjELiFdAtUp0xqiNx+r8fvg==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-opener@2.7.0':
|
'@tauri-apps/plugin-opener@3.0.0-alpha.2':
|
||||||
resolution: {integrity: sha512-mBorYfVKh9Lt7s4ZFtKbMUTxBw+Y/sVmSlKCtkkoBgMTC/DIbt/kaPm67L/2djAUqDI1wbixy5OHHVmipjuGMw==}
|
resolution: {integrity: sha512-T3Y7Y/m+XybZqB2cI6SZD8St47GBONPTbFp+hSYFLHy5Lh0eNh0sv9TRyi7MElzUtUx0NWZltAOHuHzeo2UfWA==}
|
||||||
|
|
||||||
'@tauri-apps/plugin-updater@2.13.1':
|
'@tauri-apps/plugin-updater@3.0.0-alpha.2':
|
||||||
resolution: {integrity: sha512-+STDzJ0sdQLImjc63zkv6Nncimqeo6jyCWoTQtbSwgGLNj1qbP9I6LC4p5R5ocBk3gNKAZs6i/AJz0jxysytiw==}
|
resolution: {integrity: sha512-WHRIi50gV9M2JDx9VZLxlpcuA3gvd7eABaqfNQEQTdKUSuIWyS/gQcbH5LpiuSWSkCTMMInUUBmost2LdZnnkA==}
|
||||||
|
|
||||||
'@tybys/wasm-util@0.10.4':
|
'@tybys/wasm-util@0.10.4':
|
||||||
resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==}
|
resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==}
|
||||||
@@ -6907,76 +6910,78 @@ snapshots:
|
|||||||
|
|
||||||
'@tauri-apps/api@2.12.1': {}
|
'@tauri-apps/api@2.12.1': {}
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-arm64@2.12.1':
|
'@tauri-apps/api@3.0.0-alpha.2': {}
|
||||||
|
|
||||||
|
'@tauri-apps/cli-darwin-arm64@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-x64@2.12.1':
|
'@tauri-apps/cli-darwin-x64@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm-gnueabihf@2.12.1':
|
'@tauri-apps/cli-linux-arm-gnueabihf@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-gnu@2.12.1':
|
'@tauri-apps/cli-linux-arm64-gnu@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-musl@2.12.1':
|
'@tauri-apps/cli-linux-arm64-musl@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-riscv64-gnu@2.12.1':
|
'@tauri-apps/cli-linux-riscv64-gnu@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-gnu@2.12.1':
|
'@tauri-apps/cli-linux-x64-gnu@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-musl@2.12.1':
|
'@tauri-apps/cli-linux-x64-musl@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-arm64-msvc@2.12.1':
|
'@tauri-apps/cli-win32-arm64-msvc@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-ia32-msvc@2.12.1':
|
'@tauri-apps/cli-win32-ia32-msvc@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-x64-msvc@2.12.1':
|
'@tauri-apps/cli-win32-x64-msvc@3.0.0-alpha.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli@2.12.1':
|
'@tauri-apps/cli@3.0.0-alpha.4':
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@tauri-apps/cli-darwin-arm64': 2.12.1
|
'@tauri-apps/cli-darwin-arm64': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-darwin-x64': 2.12.1
|
'@tauri-apps/cli-darwin-x64': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-linux-arm-gnueabihf': 2.12.1
|
'@tauri-apps/cli-linux-arm-gnueabihf': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-linux-arm64-gnu': 2.12.1
|
'@tauri-apps/cli-linux-arm64-gnu': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-linux-arm64-musl': 2.12.1
|
'@tauri-apps/cli-linux-arm64-musl': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-linux-riscv64-gnu': 2.12.1
|
'@tauri-apps/cli-linux-riscv64-gnu': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-linux-x64-gnu': 2.12.1
|
'@tauri-apps/cli-linux-x64-gnu': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-linux-x64-musl': 2.12.1
|
'@tauri-apps/cli-linux-x64-musl': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-win32-arm64-msvc': 2.12.1
|
'@tauri-apps/cli-win32-arm64-msvc': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-win32-ia32-msvc': 2.12.1
|
'@tauri-apps/cli-win32-ia32-msvc': 3.0.0-alpha.4
|
||||||
'@tauri-apps/cli-win32-x64-msvc': 2.12.1
|
'@tauri-apps/cli-win32-x64-msvc': 3.0.0-alpha.4
|
||||||
|
|
||||||
'@tauri-apps/plugin-clipboard-manager@2.4.0':
|
'@tauri-apps/plugin-clipboard-manager@3.0.0-alpha.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.12.1
|
'@tauri-apps/api': 3.0.0-alpha.2
|
||||||
|
|
||||||
'@tauri-apps/plugin-dialog@2.8.0':
|
'@tauri-apps/plugin-dialog@3.0.0-alpha.3':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.12.1
|
'@tauri-apps/api': 3.0.0-alpha.2
|
||||||
|
|
||||||
'@tauri-apps/plugin-fs@2.6.0':
|
'@tauri-apps/plugin-fs@3.0.0-alpha.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.12.1
|
'@tauri-apps/api': 3.0.0-alpha.2
|
||||||
|
|
||||||
'@tauri-apps/plugin-http@2.8.0':
|
'@tauri-apps/plugin-http@3.0.0-alpha.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.12.1
|
'@tauri-apps/api': 3.0.0-alpha.2
|
||||||
|
|
||||||
'@tauri-apps/plugin-opener@2.7.0':
|
'@tauri-apps/plugin-opener@3.0.0-alpha.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.12.1
|
'@tauri-apps/api': 3.0.0-alpha.2
|
||||||
|
|
||||||
'@tauri-apps/plugin-updater@2.13.1':
|
'@tauri-apps/plugin-updater@3.0.0-alpha.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tauri-apps/api': 2.12.1
|
'@tauri-apps/api': 3.0.0-alpha.2
|
||||||
|
|
||||||
'@tybys/wasm-util@0.10.4':
|
'@tybys/wasm-util@0.10.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
@@ -10,3 +10,15 @@ allowBuilds:
|
|||||||
unrs-resolver: true
|
unrs-resolver: true
|
||||||
minimumReleaseAgeExclude:
|
minimumReleaseAgeExclude:
|
||||||
- dayjs@1.11.21
|
- dayjs@1.11.21
|
||||||
|
- '@tauri-apps/cli-darwin-arm64@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-darwin-x64@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-linux-arm-gnueabihf@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-linux-arm64-gnu@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-linux-arm64-musl@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-linux-riscv64-gnu@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-linux-x64-gnu@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-linux-x64-musl@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-win32-arm64-msvc@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-win32-ia32-msvc@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli-win32-x64-msvc@3.0.0-alpha.4'
|
||||||
|
- '@tauri-apps/cli@3.0.0-alpha.4'
|
||||||
|
|||||||
+21
-20
@@ -23,13 +23,15 @@ tauri-dev = ["dep:tauri-plugin-devtools"]
|
|||||||
tokio-trace = ["clash-verge-logging/tokio-trace"]
|
tokio-trace = ["clash-verge-logging/tokio-trace"]
|
||||||
chrome-trace = ["clash-verge-logging/chrome-trace"]
|
chrome-trace = ["clash-verge-logging/chrome-trace"]
|
||||||
clippy = ["tauri/test"]
|
clippy = ["tauri/test"]
|
||||||
perf-harness = ["dep:tauri-plugin-wdio-webdriver"]
|
# The perf-harness feature and its main.rs wiring are parked until
|
||||||
|
# tauri-plugin-wdio-webdriver publishes a tauri 3 release; restore both
|
||||||
|
# from git history together with the crate dependency.
|
||||||
|
|
||||||
[package.metadata.bundle]
|
[package.metadata.bundle]
|
||||||
identifier = "io.github.clash-verge-rev.clash-verge-rev"
|
identifier = "io.github.clash-verge-rev.clash-verge-rev"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
tauri-build = { version = "2.7.1", features = [] }
|
tauri-build = { version = "3.0.0-alpha.3", features = [] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clash-verge-draft = { workspace = true }
|
clash-verge-draft = { workspace = true }
|
||||||
@@ -42,12 +44,12 @@ tauri-plugin-clash-verge-sysinfo = { workspace = true }
|
|||||||
tauri-plugin-clipboard-manager = { workspace = true }
|
tauri-plugin-clipboard-manager = { workspace = true }
|
||||||
tauri = { workspace = true, features = [
|
tauri = { workspace = true, features = [
|
||||||
"protocol-asset",
|
"protocol-asset",
|
||||||
"devtools",
|
|
||||||
"tracing",
|
"tracing",
|
||||||
"tray-icon",
|
"tray-icon",
|
||||||
"image-ico",
|
"image-ico",
|
||||||
"image-png",
|
"image-png",
|
||||||
] }
|
] }
|
||||||
|
tauri-runtime-wry = { workspace = true, features = ["devtools"] }
|
||||||
parking_lot = { workspace = true }
|
parking_lot = { workspace = true }
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
@@ -73,13 +75,13 @@ sysproxy = { git = "https://github.com/clash-verge-rev/sysproxy-rs.git", branch
|
|||||||
"guard",
|
"guard",
|
||||||
] }
|
] }
|
||||||
network-interface = { version = "2.0.5", features = ["serde"] }
|
network-interface = { version = "2.0.5", features = ["serde"] }
|
||||||
tauri-plugin-shell = "2.4.0"
|
tauri-plugin-shell = "3.0.0-alpha.2"
|
||||||
tauri-plugin-opener = "2.7.0"
|
tauri-plugin-opener = "3.0.0-alpha.2"
|
||||||
tauri-plugin-dialog = "2.8.1"
|
tauri-plugin-dialog = "3.0.0-alpha.3"
|
||||||
tauri-plugin-fs = "2.6.0"
|
tauri-plugin-fs = "3.0.0-alpha.2"
|
||||||
tauri-plugin-process = "2.4.0"
|
tauri-plugin-process = "3.0.0-alpha.2"
|
||||||
tauri-plugin-deep-link = "2.6.1"
|
tauri-plugin-deep-link = "3.0.0-alpha.2"
|
||||||
tauri-plugin-window-state = "2.5.0"
|
tauri-plugin-window-state = "3.0.0-alpha.2"
|
||||||
zip = "9.0.1"
|
zip = "9.0.1"
|
||||||
flate2 = "1.1.10"
|
flate2 = "1.1.10"
|
||||||
reqwest_dav = "0.3.3"
|
reqwest_dav = "0.3.3"
|
||||||
@@ -91,13 +93,13 @@ getrandom = "0.4.3"
|
|||||||
futures = "0.3.34"
|
futures = "0.3.34"
|
||||||
gethostname = "1.1.0"
|
gethostname = "1.1.0"
|
||||||
scopeguard = "1.2.0"
|
scopeguard = "1.2.0"
|
||||||
tauri-plugin-notification = "2.5.1"
|
tauri-plugin-notification = "3.0.0-alpha.2"
|
||||||
tokio-stream = "0.1.19"
|
tokio-stream = "0.1.19"
|
||||||
backon = { version = "1.6.0", features = ["tokio-sleep"] }
|
backon = { version = "1.6.0", features = ["tokio-sleep"] }
|
||||||
tauri-plugin-http = "2.8.0"
|
tauri-plugin-http = "3.0.0-alpha.2"
|
||||||
tracing = { workspace = true }
|
tracing = { workspace = true }
|
||||||
tauri-plugin-devtools = { version = "2.2.2", optional = true }
|
tauri-plugin-devtools = { version = "3.0.0-alpha.0", optional = true }
|
||||||
tauri-plugin-mihomo = { git = "https://github.com/clash-verge-rev/tauri-plugin-mihomo", branch = "main" }
|
tauri-plugin-mihomo = { git = "https://github.com/clash-verge-rev/tauri-plugin-mihomo", branch = "feat/tauri-v3" }
|
||||||
async-trait = "0.1.92"
|
async-trait = "0.1.92"
|
||||||
clash_verge_service_ipc = { git = "https://github.com/clash-verge-rev/clash-verge-service-ipc.git", tag = "v2.7.6", version = "2.7.6", features = [
|
clash_verge_service_ipc = { git = "https://github.com/clash-verge-rev/clash-verge-service-ipc.git", tag = "v2.7.6", version = "2.7.6", features = [
|
||||||
"client",
|
"client",
|
||||||
@@ -109,15 +111,14 @@ webpki-roots = "1.0.9"
|
|||||||
dark-light = "3.0.0"
|
dark-light = "3.0.0"
|
||||||
bytes = "1.12.1"
|
bytes = "1.12.1"
|
||||||
tokio-util = { version = "0.7.19", features = ["time"] }
|
tokio-util = { version = "0.7.19", features = ["time"] }
|
||||||
specta = { version = "=2.0.0-rc.25", features = ["derive", "function", "serde_json"] }
|
specta = { version = "=2.0.0-rc.26", features = ["derive", "function", "serde_json"] }
|
||||||
tauri-specta = { version = "=2.0.0-rc.25", features = ["derive", "typescript"] }
|
tauri-specta = { version = "=2.0.0-rc.25", features = ["derive", "typescript"] }
|
||||||
specta-typescript = "=0.0.12"
|
specta-typescript = "=0.0.13"
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
libc = "0.2.190"
|
libc = "0.2.190"
|
||||||
|
|
||||||
[target.'cfg(target_os = "macos")'.dependencies]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
tauri-plugin-wdio-webdriver = { version = "=1.4.0", optional = true }
|
|
||||||
objc2 = "0.6.5"
|
objc2 = "0.6.5"
|
||||||
objc2-foundation = { version = "0.3.2", features = [
|
objc2-foundation = { version = "0.3.2", features = [
|
||||||
"NSString",
|
"NSString",
|
||||||
@@ -149,9 +150,9 @@ windows = { version = "0.62.2", features = ["Win32_Globalization"] }
|
|||||||
windows-sys.workspace = true
|
windows-sys.workspace = true
|
||||||
|
|
||||||
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
|
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
|
||||||
tauri-plugin-autostart = "2.7.0"
|
tauri-plugin-autostart = "3.0.0-alpha.2"
|
||||||
tauri-plugin-global-shortcut = "2.4.0"
|
tauri-plugin-global-shortcut = "3.0.0-alpha.2"
|
||||||
tauri-plugin-updater = "2.13.1"
|
tauri-plugin-updater = "3.0.0-alpha.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
criterion = { workspace = true }
|
criterion = { workspace = true }
|
||||||
|
|||||||
@@ -70,7 +70,6 @@
|
|||||||
"dialog:allow-open",
|
"dialog:allow-open",
|
||||||
"global-shortcut:allow-is-registered",
|
"global-shortcut:allow-is-registered",
|
||||||
"global-shortcut:allow-register",
|
"global-shortcut:allow-register",
|
||||||
"global-shortcut:allow-register-all",
|
|
||||||
"global-shortcut:allow-unregister",
|
"global-shortcut:allow-unregister",
|
||||||
"global-shortcut:allow-unregister-all",
|
"global-shortcut:allow-unregister-all",
|
||||||
"process:allow-exit",
|
"process:allow-exit",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ pub async fn update_launch() -> Result<()> {
|
|||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
{
|
{
|
||||||
let app_handle = Handle::app_handle();
|
let app_handle = Handle::app_handle();
|
||||||
let autostart_manager = app_handle.autolaunch();
|
let autostart_manager = app_handle.autostart();
|
||||||
if is_enable {
|
if is_enable {
|
||||||
logging_error!(Type::System, "{:?}", autostart_manager.enable());
|
logging_error!(Type::System, "{:?}", autostart_manager.enable());
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -23,8 +23,9 @@ use smartstring::alias::String;
|
|||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
use tauri::Manager as _;
|
||||||
use tauri::{
|
use tauri::{
|
||||||
AppHandle, Wry,
|
AppHandle, DynRuntime,
|
||||||
menu::{CheckMenuItem, IsMenuItem, MenuEvent, MenuItem, PredefinedMenuItem, Submenu},
|
menu::{CheckMenuItem, IsMenuItem, MenuEvent, MenuItem, PredefinedMenuItem, Submenu},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ use menu_def::{MenuIds, MenuTexts};
|
|||||||
|
|
||||||
// TODO: 是否需要将可变菜单抽离存储起来,后续直接更新对应菜单实例,无需重新创建菜单(待考虑)
|
// TODO: 是否需要将可变菜单抽离存储起来,后续直接更新对应菜单实例,无需重新创建菜单(待考虑)
|
||||||
|
|
||||||
type ProxyMenuItem = (Option<Submenu<Wry>>, Vec<Box<dyn IsMenuItem<Wry>>>);
|
type ProxyMenuItem = (Option<Submenu<DynRuntime>>, Vec<Box<dyn IsMenuItem<DynRuntime>>>);
|
||||||
|
|
||||||
const TRAY_CLICK_DEBOUNCE_MS: u64 = 300;
|
const TRAY_CLICK_DEBOUNCE_MS: u64 = 300;
|
||||||
pub const TRAY_ID: &str = "clash-verge-rev-tray";
|
pub const TRAY_ID: &str = "clash-verge-rev-tray";
|
||||||
@@ -57,14 +58,14 @@ enum IconKind {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct LatencyMenuItem {
|
struct LatencyMenuItem {
|
||||||
item: MenuItem<Wry>,
|
item: MenuItem<DynRuntime>,
|
||||||
running: bool,
|
running: bool,
|
||||||
proxies: Vec<ProxyLatencyItem>,
|
proxies: Vec<ProxyLatencyItem>,
|
||||||
provider_state: ProxyViewProviderState,
|
provider_state: ProxyViewProviderState,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ProxyLatencyItem {
|
struct ProxyLatencyItem {
|
||||||
item: CheckMenuItem<Wry>,
|
item: CheckMenuItem<DynRuntime>,
|
||||||
name: std::string::String,
|
name: std::string::String,
|
||||||
provider_name: Option<std::string::String>,
|
provider_name: Option<std::string::String>,
|
||||||
text: std::string::String,
|
text: std::string::String,
|
||||||
@@ -566,7 +567,7 @@ fn create_hotkeys(hotkeys: &Option<Vec<String>>) -> HashMap<&str, &str> {
|
|||||||
fn create_profile_menu_item(
|
fn create_profile_menu_item(
|
||||||
app_handle: &AppHandle,
|
app_handle: &AppHandle,
|
||||||
profiles_preview: Vec<IProfilePreview<'_>>,
|
profiles_preview: Vec<IProfilePreview<'_>>,
|
||||||
) -> Result<Vec<CheckMenuItem<Wry>>> {
|
) -> Result<Vec<CheckMenuItem<DynRuntime>>> {
|
||||||
profiles_preview
|
profiles_preview
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|profile| {
|
.map(|profile| {
|
||||||
@@ -677,7 +678,7 @@ fn create_subcreate_proxy_menu_item(
|
|||||||
texts: &MenuTexts,
|
texts: &MenuTexts,
|
||||||
verge: &IVerge,
|
verge: &IVerge,
|
||||||
profiles: &crate::config::IProfiles,
|
profiles: &crate::config::IProfiles,
|
||||||
) -> Vec<Submenu<Wry>> {
|
) -> Vec<Submenu<DynRuntime>> {
|
||||||
let Some(view) = view else { return Vec::new() };
|
let Some(view) = view else { return Vec::new() };
|
||||||
view.groups
|
view.groups
|
||||||
.iter()
|
.iter()
|
||||||
@@ -739,8 +740,8 @@ fn create_subcreate_proxy_menu_item(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
let separator = PredefinedMenuItem::separator(app_handle).ok()?;
|
let separator = PredefinedMenuItem::separator(app_handle).ok()?;
|
||||||
let mut items: Vec<&dyn IsMenuItem<Wry>> = vec![&test_item, &separator];
|
let mut items: Vec<&dyn IsMenuItem<DynRuntime>> = vec![&test_item, &separator];
|
||||||
items.extend(group_items.iter().map(|item| item as &dyn IsMenuItem<Wry>));
|
items.extend(group_items.iter().map(|item| item as &dyn IsMenuItem<DynRuntime>));
|
||||||
Submenu::with_id_and_items(
|
Submenu::with_id_and_items(
|
||||||
app_handle,
|
app_handle,
|
||||||
format!("proxy_group_{}", group.name),
|
format!("proxy_group_{}", group.name),
|
||||||
@@ -757,7 +758,7 @@ fn create_subcreate_proxy_menu_item(
|
|||||||
fn create_proxy_menu_item(
|
fn create_proxy_menu_item(
|
||||||
app_handle: &AppHandle,
|
app_handle: &AppHandle,
|
||||||
show_proxy_groups_inline: bool,
|
show_proxy_groups_inline: bool,
|
||||||
proxy_submenus: Vec<Submenu<Wry>>,
|
proxy_submenus: Vec<Submenu<DynRuntime>>,
|
||||||
proxies_text: &str,
|
proxies_text: &str,
|
||||||
) -> Result<ProxyMenuItem> {
|
) -> Result<ProxyMenuItem> {
|
||||||
let (proxies_submenu, inline_proxy_items) = if show_proxy_groups_inline {
|
let (proxies_submenu, inline_proxy_items) = if show_proxy_groups_inline {
|
||||||
@@ -765,13 +766,13 @@ fn create_proxy_menu_item(
|
|||||||
None,
|
None,
|
||||||
proxy_submenus
|
proxy_submenus
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|submenu| Box::new(submenu) as Box<dyn IsMenuItem<Wry>>)
|
.map(|submenu| Box::new(submenu) as Box<dyn IsMenuItem<DynRuntime>>)
|
||||||
.collect(),
|
.collect(),
|
||||||
)
|
)
|
||||||
} else if !proxy_submenus.is_empty() {
|
} else if !proxy_submenus.is_empty() {
|
||||||
let proxy_submenu_refs: Vec<&dyn IsMenuItem<Wry>> = proxy_submenus
|
let proxy_submenu_refs: Vec<&dyn IsMenuItem<DynRuntime>> = proxy_submenus
|
||||||
.iter()
|
.iter()
|
||||||
.map(|submenu| submenu as &dyn IsMenuItem<Wry>)
|
.map(|submenu| submenu as &dyn IsMenuItem<DynRuntime>)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
(
|
(
|
||||||
@@ -798,7 +799,10 @@ async fn create_tray_menu(
|
|||||||
tun_mode_available: bool,
|
tun_mode_available: bool,
|
||||||
profiles_preview: Vec<IProfilePreview<'_>>,
|
profiles_preview: Vec<IProfilePreview<'_>>,
|
||||||
options: TrayMenuOptions,
|
options: TrayMenuOptions,
|
||||||
) -> Result<(tauri::menu::Menu<Wry>, HashMap<std::string::String, LatencyMenuItem>)> {
|
) -> Result<(
|
||||||
|
tauri::menu::Menu<DynRuntime>,
|
||||||
|
HashMap<std::string::String, LatencyMenuItem>,
|
||||||
|
)> {
|
||||||
let current_proxy_mode = mode.unwrap_or("");
|
let current_proxy_mode = mode.unwrap_or("");
|
||||||
|
|
||||||
let mut verge_settings = Config::verge().await.latest_arc();
|
let mut verge_settings = Config::verge().await.latest_arc();
|
||||||
@@ -836,12 +840,12 @@ async fn create_tray_menu(
|
|||||||
|
|
||||||
let hotkeys = create_hotkeys(&verge_settings.hotkeys);
|
let hotkeys = create_hotkeys(&verge_settings.hotkeys);
|
||||||
|
|
||||||
let profile_menu_items: Vec<CheckMenuItem<Wry>> = create_profile_menu_item(app_handle, profiles_preview)?;
|
let profile_menu_items: Vec<CheckMenuItem<DynRuntime>> = create_profile_menu_item(app_handle, profiles_preview)?;
|
||||||
|
|
||||||
let texts = MenuTexts::new();
|
let texts = MenuTexts::new();
|
||||||
let profile_menu_items_refs: Vec<&dyn IsMenuItem<Wry>> = profile_menu_items
|
let profile_menu_items_refs: Vec<&dyn IsMenuItem<DynRuntime>> = profile_menu_items
|
||||||
.iter()
|
.iter()
|
||||||
.map(|item| item as &dyn IsMenuItem<Wry>)
|
.map(|item| item as &dyn IsMenuItem<DynRuntime>)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let open_window = &MenuItem::with_id(
|
let open_window = &MenuItem::with_id(
|
||||||
@@ -894,9 +898,9 @@ async fn create_tray_menu(
|
|||||||
outbound_modes_label.as_str(),
|
outbound_modes_label.as_str(),
|
||||||
true,
|
true,
|
||||||
&[
|
&[
|
||||||
rule_mode as &dyn IsMenuItem<Wry>,
|
rule_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
global_mode as &dyn IsMenuItem<Wry>,
|
global_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
direct_mode as &dyn IsMenuItem<Wry>,
|
direct_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
],
|
],
|
||||||
)?)
|
)?)
|
||||||
};
|
};
|
||||||
@@ -1009,7 +1013,7 @@ async fn create_tray_menu(
|
|||||||
&texts.more,
|
&texts.more,
|
||||||
true,
|
true,
|
||||||
&[
|
&[
|
||||||
copy_env as &dyn IsMenuItem<Wry>,
|
copy_env as &dyn IsMenuItem<DynRuntime>,
|
||||||
close_all_connections,
|
close_all_connections,
|
||||||
restart_clash,
|
restart_clash,
|
||||||
restart_app,
|
restart_app,
|
||||||
@@ -1026,13 +1030,13 @@ async fn create_tray_menu(
|
|||||||
|
|
||||||
let separator = &PredefinedMenuItem::separator(app_handle)?;
|
let separator = &PredefinedMenuItem::separator(app_handle)?;
|
||||||
|
|
||||||
let mut menu_items: Vec<&dyn IsMenuItem<Wry>> = vec![open_window, separator];
|
let mut menu_items: Vec<&dyn IsMenuItem<DynRuntime>> = vec![open_window, separator];
|
||||||
|
|
||||||
if show_outbound_modes_inline {
|
if show_outbound_modes_inline {
|
||||||
menu_items.extend_from_slice(&[
|
menu_items.extend_from_slice(&[
|
||||||
rule_mode as &dyn IsMenuItem<Wry>,
|
rule_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
global_mode as &dyn IsMenuItem<Wry>,
|
global_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
direct_mode as &dyn IsMenuItem<Wry>,
|
direct_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
]);
|
]);
|
||||||
} else if let Some(ref outbound_modes) = outbound_modes {
|
} else if let Some(ref outbound_modes) = outbound_modes {
|
||||||
menu_items.push(outbound_modes);
|
menu_items.push(outbound_modes);
|
||||||
@@ -1052,14 +1056,14 @@ async fn create_tray_menu(
|
|||||||
|
|
||||||
menu_items.extend_from_slice(&[
|
menu_items.extend_from_slice(&[
|
||||||
separator,
|
separator,
|
||||||
system_proxy as &dyn IsMenuItem<Wry>,
|
system_proxy as &dyn IsMenuItem<DynRuntime>,
|
||||||
tun_mode as &dyn IsMenuItem<Wry>,
|
tun_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
separator,
|
separator,
|
||||||
lightweight_mode as &dyn IsMenuItem<Wry>,
|
lightweight_mode as &dyn IsMenuItem<DynRuntime>,
|
||||||
open_dir as &dyn IsMenuItem<Wry>,
|
open_dir as &dyn IsMenuItem<DynRuntime>,
|
||||||
more as &dyn IsMenuItem<Wry>,
|
more as &dyn IsMenuItem<DynRuntime>,
|
||||||
separator,
|
separator,
|
||||||
quit as &dyn IsMenuItem<Wry>,
|
quit as &dyn IsMenuItem<DynRuntime>,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
let menu = tauri::menu::MenuBuilder::new(app_handle).items(&menu_items).build()?;
|
let menu = tauri::menu::MenuBuilder::new(app_handle).items(&menu_items).build()?;
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ impl TraySpeedController {
|
|||||||
|
|
||||||
let app_handle = handle::Handle::app_handle();
|
let app_handle = handle::Handle::app_handle();
|
||||||
if let Some(tray) = app_handle.tray_by_id(super::TRAY_ID) {
|
if let Some(tray) = app_handle.tray_by_id(super::TRAY_ID) {
|
||||||
let result = tray.with_inner_tray_icon(|inner| {
|
let result = tray.with_inner_blocking(|inner| {
|
||||||
if let Some(status_item) = inner.ns_status_item() {
|
if let Some(status_item) = inner.ns_status_item() {
|
||||||
tray_speed::clear_speed_attributed_title(&status_item);
|
tray_speed::clear_speed_attributed_title(&status_item);
|
||||||
}
|
}
|
||||||
@@ -167,7 +167,7 @@ impl TraySpeedController {
|
|||||||
fn apply_tray_speed(up: u64, down: u64) {
|
fn apply_tray_speed(up: u64, down: u64) {
|
||||||
let app_handle = handle::Handle::app_handle();
|
let app_handle = handle::Handle::app_handle();
|
||||||
if let Some(tray) = app_handle.tray_by_id(super::TRAY_ID) {
|
if let Some(tray) = app_handle.tray_by_id(super::TRAY_ID) {
|
||||||
let result = tray.with_inner_tray_icon(move |inner| {
|
let result = tray.with_inner_blocking(move |inner| {
|
||||||
if let Some(status_item) = inner.ns_status_item() {
|
if let Some(status_item) = inner.ns_status_item() {
|
||||||
tray_speed::set_speed_attributed_title(&status_item, up, down);
|
tray_speed::set_speed_attributed_title(&status_item, up, down);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
use crate::cmd;
|
use crate::cmd;
|
||||||
|
|
||||||
pub fn builder() -> tauri_specta::Builder<tauri::Wry> {
|
pub fn builder() -> tauri_specta::Builder<tauri::DynRuntime> {
|
||||||
tauri_specta::Builder::new()
|
tauri_specta::Builder::new()
|
||||||
.types(&platform_types())
|
.types(&platform_types())
|
||||||
.commands(tauri_specta::collect_commands![
|
.commands(tauri_specta::collect_commands![
|
||||||
tauri_plugin_clash_verge_sysinfo::commands::get_system_info,
|
tauri_plugin_clash_verge_sysinfo::commands::get_system_info,
|
||||||
tauri_plugin_clash_verge_sysinfo::commands::get_app_uptime,
|
tauri_plugin_clash_verge_sysinfo::commands::get_app_uptime,
|
||||||
tauri_plugin_clash_verge_sysinfo::commands::export_diagnostic_info::<tauri::Wry>,
|
tauri_plugin_clash_verge_sysinfo::commands::export_diagnostic_info::<tauri::DynRuntime>,
|
||||||
cmd::probe_listener,
|
cmd::probe_listener,
|
||||||
cmd::save_proxy_ports,
|
cmd::save_proxy_ports,
|
||||||
cmd::get_sys_proxy,
|
cmd::get_sys_proxy,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ mod app_init {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Setup plugins for the Tauri builder
|
/// Setup plugins for the Tauri builder
|
||||||
pub fn setup_plugins(builder: tauri::Builder<tauri::Wry>) -> tauri::Builder<tauri::Wry> {
|
pub fn setup_plugins(builder: tauri::Builder) -> tauri::Builder {
|
||||||
#[allow(unused_mut)]
|
#[allow(unused_mut)]
|
||||||
let mut builder = builder
|
let mut builder = builder
|
||||||
.plugin(tauri_plugin_clash_verge_sysinfo::init())
|
.plugin(tauri_plugin_clash_verge_sysinfo::init())
|
||||||
@@ -124,7 +124,7 @@ mod app_init {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_handlers() -> impl Fn(tauri::ipc::Invoke<tauri::Wry>) -> bool + Send + Sync + 'static {
|
pub fn generate_handlers() -> impl Fn(tauri::ipc::Invoke) -> bool + Send + Sync + 'static {
|
||||||
{
|
{
|
||||||
let builder = crate::ipc::builder();
|
let builder = crate::ipc::builder();
|
||||||
move |invoke| builder.invoke_handler()(invoke)
|
move |invoke| builder.invoke_handler()(invoke)
|
||||||
@@ -181,7 +181,7 @@ pub fn run() -> std::process::ExitCode {
|
|||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
utils::linux::workarounds::apply_wayland_webkit_fix();
|
utils::linux::workarounds::apply_wayland_webkit_fix();
|
||||||
|
|
||||||
let builder = app_init::setup_plugins(tauri::Builder::default())
|
let builder = app_init::setup_plugins(tauri::Builder::default().runtime(tauri_runtime_wry::Wry::default()))
|
||||||
.setup(|app| {
|
.setup(|app| {
|
||||||
// Logger may not be ready yet, so mirror setup panics to stderr.
|
// Logger may not be ready yet, so mirror setup panics to stderr.
|
||||||
fn log_setup_panic(stage: &str, panic: Box<dyn std::any::Any + Send>) {
|
fn log_setup_panic(stage: &str, panic: Box<dyn std::any::Any + Send>) {
|
||||||
|
|||||||
@@ -1,19 +1,8 @@
|
|||||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||||
|
|
||||||
use std::process::ExitCode;
|
use std::process::ExitCode;
|
||||||
#[cfg(not(all(feature = "perf-harness", target_os = "macos")))]
|
|
||||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||||
|
|
||||||
#[cfg(all(feature = "perf-harness", target_os = "macos"))]
|
|
||||||
#[path = "../../scripts/perf/app.rs"]
|
|
||||||
mod perf;
|
|
||||||
|
|
||||||
#[cfg(all(feature = "perf-harness", target_os = "macos"))]
|
|
||||||
fn main() -> ExitCode {
|
|
||||||
perf::run()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(all(feature = "perf-harness", target_os = "macos")))]
|
|
||||||
fn main() -> ExitCode {
|
fn main() -> ExitCode {
|
||||||
let default_parallelism = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(1);
|
let default_parallelism = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(1);
|
||||||
let worker_limit = std::cmp::min(default_parallelism, 8);
|
let worker_limit = std::cmp::min(default_parallelism, 8);
|
||||||
|
|||||||
@@ -132,7 +132,10 @@ pub fn take_webview_needs_reload() -> bool {
|
|||||||
/// reload visible webviews immediately, and defer a hidden main-window reload until activation.
|
/// reload visible webviews immediately, and defer a hidden main-window reload until activation.
|
||||||
/// Registering this callback replaces Tauri's default automatic reload.
|
/// Registering this callback replaces Tauri's default automatic reload.
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
pub fn on_web_content_process_terminated(webview: &tauri::Webview) {
|
pub fn on_web_content_process_terminated(
|
||||||
|
webview: &tauri::Webview,
|
||||||
|
_termination: &tauri::webview::WebContentProcessTermination,
|
||||||
|
) {
|
||||||
if handle::Handle::global().is_exiting() {
|
if handle::Handle::global().is_exiting() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use clash_verge_logging::{Type, logging};
|
|||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use std::sync::LazyLock;
|
use std::sync::LazyLock;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tauri::{Manager as _, WebviewWindow, Wry};
|
use tauri::{Manager as _, WebviewWindow};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||||
pub enum WindowOperationResult {
|
pub enum WindowOperationResult {
|
||||||
@@ -50,7 +50,7 @@ impl WindowManager {
|
|||||||
handle::Handle::global().set_activation_policy_regular();
|
handle::Handle::global().set_activation_policy_regular();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_main_window_with_state() -> (Option<WebviewWindow<Wry>>, WindowState) {
|
fn get_main_window_with_state() -> (Option<WebviewWindow>, WindowState) {
|
||||||
let Some(window) = Self::get_main_window() else {
|
let Some(window) = Self::get_main_window() else {
|
||||||
return (None, WindowState::NotExist);
|
return (None, WindowState::NotExist);
|
||||||
};
|
};
|
||||||
@@ -76,7 +76,7 @@ impl WindowManager {
|
|||||||
Self::get_main_window_with_state().1
|
Self::get_main_window_with_state().1
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_main_window() -> Option<WebviewWindow<Wry>> {
|
pub fn get_main_window() -> Option<WebviewWindow> {
|
||||||
let app_handle = handle::Handle::app_handle();
|
let app_handle = handle::Handle::app_handle();
|
||||||
app_handle.get_webview_window("main")
|
app_handle.get_webview_window("main")
|
||||||
}
|
}
|
||||||
@@ -147,7 +147,7 @@ impl WindowManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hide_main_window(window: Option<&WebviewWindow<Wry>>) -> WindowOperationResult {
|
fn hide_main_window(window: Option<&WebviewWindow>) -> WindowOperationResult {
|
||||||
logging!(debug, Type::Window, "窗口可见,将隐藏窗口");
|
logging!(debug, Type::Window, "窗口可见,将隐藏窗口");
|
||||||
if let Some(window) = window {
|
if let Some(window) = window {
|
||||||
match window.close() {
|
match window.close() {
|
||||||
@@ -166,7 +166,7 @@ impl WindowManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn activate_existing_main_window(window: Option<&WebviewWindow<Wry>>) -> WindowOperationResult {
|
fn activate_existing_main_window(window: Option<&WebviewWindow>) -> WindowOperationResult {
|
||||||
logging!(debug, Type::Window, "窗口存在但被隐藏或最小化,将激活窗口");
|
logging!(debug, Type::Window, "窗口存在但被隐藏或最小化,将激活窗口");
|
||||||
if let Some(window) = window {
|
if let Some(window) = window {
|
||||||
Self::activate_window(window)
|
Self::activate_window(window)
|
||||||
@@ -176,7 +176,7 @@ impl WindowManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn activate_window(window: &WebviewWindow<Wry>) -> WindowOperationResult {
|
fn activate_window(window: &WebviewWindow) -> WindowOperationResult {
|
||||||
logging!(debug, Type::Window, "开始激活窗口");
|
logging!(debug, Type::Window, "开始激活窗口");
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
Self::set_macos_activation_policy_regular();
|
Self::set_macos_activation_policy_regular();
|
||||||
@@ -233,15 +233,15 @@ impl WindowManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_main_window_visible(window: Option<&WebviewWindow<Wry>>) -> bool {
|
pub fn is_main_window_visible(window: Option<&WebviewWindow>) -> bool {
|
||||||
window.map(|w| w.is_visible().unwrap_or(false)).unwrap_or(false)
|
window.map(|w| w.is_visible().unwrap_or(false)).unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_main_window_focused(window: Option<&WebviewWindow<Wry>>) -> bool {
|
pub fn is_main_window_focused(window: Option<&WebviewWindow>) -> bool {
|
||||||
window.map(|w| w.is_focused().unwrap_or(false)).unwrap_or(false)
|
window.map(|w| w.is_focused().unwrap_or(false)).unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_main_window_minimized(window: Option<&WebviewWindow<Wry>>) -> bool {
|
fn is_main_window_minimized(window: Option<&WebviewWindow>) -> bool {
|
||||||
window.map(|w| w.is_minimized().unwrap_or(false)).unwrap_or(false)
|
window.map(|w| w.is_minimized().unwrap_or(false)).unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ export const SystemInfoCard = () => {
|
|||||||
try {
|
try {
|
||||||
const result = await triggerCheckUpdate()
|
const result = await triggerCheckUpdate()
|
||||||
const info = result.data
|
const info = result.data
|
||||||
if (!info?.available) {
|
if (!info) {
|
||||||
showNotice.success(
|
showNotice.success(
|
||||||
'settings.components.verge.advanced.notifications.latestVersion',
|
'settings.components.verge.advanced.notifications.latestVersion',
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export const UpdateButton = (props: Props) => {
|
|||||||
|
|
||||||
const { updateInfo } = useUpdate()
|
const { updateInfo } = useUpdate()
|
||||||
|
|
||||||
if (!updateInfo?.available) return null
|
if (!updateInfo) return null
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => {
|
|||||||
try {
|
try {
|
||||||
const info = await checkUpdate()
|
const info = await checkUpdate()
|
||||||
updateLastCheckTime()
|
updateLastCheckTime()
|
||||||
if (!info?.available) {
|
if (!info) {
|
||||||
showNotice.success(
|
showNotice.success(
|
||||||
'settings.components.verge.advanced.notifications.latestVersion',
|
'settings.components.verge.advanced.notifications.latestVersion',
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,8 +7,10 @@ import { useTranslation } from 'react-i18next'
|
|||||||
|
|
||||||
import { BaseDialog } from '@/components/base'
|
import { BaseDialog } from '@/components/base'
|
||||||
import { useVerge } from '@/hooks/use-verge'
|
import { useVerge } from '@/hooks/use-verge'
|
||||||
|
import type { IVergeTestItem_Serialize } from '@/services/bindings'
|
||||||
import { showNotice } from '@/services/notice-service'
|
import { showNotice } from '@/services/notice-service'
|
||||||
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
onChange: (uid: string, patch?: Partial<IVergeTestItem>) => void
|
onChange: (uid: string, patch?: Partial<IVergeTestItem>) => void
|
||||||
}
|
}
|
||||||
@@ -77,7 +79,12 @@ export const TestViewer = forwardRef<TestViewerRef, Props>(
|
|||||||
|
|
||||||
if (openType === 'new') {
|
if (openType === 'new') {
|
||||||
const uid = nanoid()
|
const uid = nanoid()
|
||||||
const item = { ...form, uid }
|
const item: IVergeTestItem_Serialize = {
|
||||||
|
uid,
|
||||||
|
name: form.name ?? null,
|
||||||
|
icon: form.icon ?? null,
|
||||||
|
url: form.url ?? null,
|
||||||
|
}
|
||||||
const newList = [...testList, item]
|
const newList = [...testList, item]
|
||||||
await patchVerge({ test_list: newList })
|
await patchVerge({ test_list: newList })
|
||||||
onChange(uid)
|
onChange(uid)
|
||||||
|
|||||||
+106
-117
@@ -53,16 +53,11 @@ export const commands = {
|
|||||||
/** Reads the saved mode without depending on strict mihomo `/configs` deserialization. */
|
/** Reads the saved mode without depending on strict mihomo `/configs` deserialization. */
|
||||||
getClashMode: () => __TAURI_INVOKE<string | null>('get_clash_mode'),
|
getClashMode: () => __TAURI_INVOKE<string | null>('get_clash_mode'),
|
||||||
changeClashCore: (clashCore: string) =>
|
changeClashCore: (clashCore: string) =>
|
||||||
__TAURI_INVOKE<{
|
__TAURI_INVOKE<CommandFailure_Serialize | null>('change_clash_core', {
|
||||||
/** Stable frontend identifier, when classified. */
|
clashCore,
|
||||||
code?: string | null
|
}),
|
||||||
/** Human-readable diagnostic detail. */
|
|
||||||
detail: string
|
|
||||||
/** Requested operation when known by the command. */
|
|
||||||
operation?: FailedOperation | null
|
|
||||||
} | null>('change_clash_core', { clashCore }),
|
|
||||||
getRuntimeConfig: () =>
|
getRuntimeConfig: () =>
|
||||||
__TAURI_INVOKE<{ [key in string]: JsonValue } | null>('get_runtime_config'),
|
__TAURI_INVOKE<YamlMapping | null>('get_runtime_config'),
|
||||||
getProxyView: () => __TAURI_INVOKE<ProxyViewV1_Serialize>('get_proxy_view'),
|
getProxyView: () => __TAURI_INVOKE<ProxyViewV1_Serialize>('get_proxy_view'),
|
||||||
getRuntimeYaml: () => __TAURI_INVOKE<string>('get_runtime_yaml'),
|
getRuntimeYaml: () => __TAURI_INVOKE<string>('get_runtime_yaml'),
|
||||||
getRuntimeLogs: () => __TAURI_INVOKE<RuntimeLogs>('get_runtime_logs'),
|
getRuntimeLogs: () => __TAURI_INVOKE<RuntimeLogs>('get_runtime_logs'),
|
||||||
@@ -70,7 +65,7 @@ export const commands = {
|
|||||||
__TAURI_INVOKE<string>('get_runtime_proxy_chain_config', {
|
__TAURI_INVOKE<string>('get_runtime_proxy_chain_config', {
|
||||||
proxyChainExitNode,
|
proxyChainExitNode,
|
||||||
}),
|
}),
|
||||||
updateProxyChainConfigInRuntime: (proxyChainConfig: JsonValue | null) =>
|
updateProxyChainConfigInRuntime: (proxyChainConfig: YamlValue | null) =>
|
||||||
__TAURI_INVOKE<ValidationOutcome>('update_proxy_chain_config_in_runtime', {
|
__TAURI_INVOKE<ValidationOutcome>('update_proxy_chain_config_in_runtime', {
|
||||||
proxyChainConfig,
|
proxyChainConfig,
|
||||||
}),
|
}),
|
||||||
@@ -100,18 +95,11 @@ export const commands = {
|
|||||||
takeDnsOverrideNotice: () =>
|
takeDnsOverrideNotice: () =>
|
||||||
__TAURI_INVOKE<boolean>('take_dns_override_notice'),
|
__TAURI_INVOKE<boolean>('take_dns_override_notice'),
|
||||||
takeServiceFallbackNotice: () =>
|
takeServiceFallbackNotice: () =>
|
||||||
__TAURI_INVOKE<
|
__TAURI_INVOKE<ServiceFallbackNotice | null>(
|
||||||
| { kind: 'unavailable' }
|
'take_service_fallback_notice',
|
||||||
| { kind: 'coreRejected'; reason: string }
|
),
|
||||||
| { kind: 'notAutoStarted' }
|
|
||||||
| null
|
|
||||||
>('take_service_fallback_notice'),
|
|
||||||
getCoreStartupError: () =>
|
getCoreStartupError: () =>
|
||||||
__TAURI_INVOKE<
|
__TAURI_INVOKE<CoreFailure | null>('get_core_startup_error'),
|
||||||
| { kind: 'startFailed'; detail: string }
|
|
||||||
| { kind: 'serviceCoreStopped'; detail: string }
|
|
||||||
| null
|
|
||||||
>('get_core_startup_error'),
|
|
||||||
takeServiceRepairNotice: () =>
|
takeServiceRepairNotice: () =>
|
||||||
__TAURI_INVOKE<boolean>('take_service_repair_notice'),
|
__TAURI_INVOKE<boolean>('take_service_repair_notice'),
|
||||||
takeServiceOwnerNotice: () =>
|
takeServiceOwnerNotice: () =>
|
||||||
@@ -140,7 +128,7 @@ export const commands = {
|
|||||||
__TAURI_INVOKE<NetworkInterfaceView[]>('get_network_interfaces_info'),
|
__TAURI_INVOKE<NetworkInterfaceView[]>('get_network_interfaces_info'),
|
||||||
getProfiles: () => __TAURI_INVOKE<IProfiles_Serialize>('get_profiles'),
|
getProfiles: () => __TAURI_INVOKE<IProfiles_Serialize>('get_profiles'),
|
||||||
enhanceProfiles: () => __TAURI_INVOKE<ValidationOutcome>('enhance_profiles'),
|
enhanceProfiles: () => __TAURI_INVOKE<ValidationOutcome>('enhance_profiles'),
|
||||||
patchProfilesConfig: (profiles: ProfileSelection) =>
|
patchProfilesConfig: (profiles: ProfileSelection_Deserialize) =>
|
||||||
__TAURI_INVOKE<ValidationOutcome>('patch_profiles_config', { profiles }),
|
__TAURI_INVOKE<ValidationOutcome>('patch_profiles_config', { profiles }),
|
||||||
viewProfile: (index: string) =>
|
viewProfile: (index: string) =>
|
||||||
__TAURI_INVOKE<null>('view_profile', { index }),
|
__TAURI_INVOKE<null>('view_profile', { index }),
|
||||||
@@ -148,52 +136,12 @@ export const commands = {
|
|||||||
__TAURI_INVOKE<null>('patch_profile', { index, profile }),
|
__TAURI_INVOKE<null>('patch_profile', { index, profile }),
|
||||||
createProfile: (item: ProfileCreate_Deserialize, fileData: string | null) =>
|
createProfile: (item: ProfileCreate_Deserialize, fileData: string | null) =>
|
||||||
__TAURI_INVOKE<null>('create_profile', { item, fileData }),
|
__TAURI_INVOKE<null>('create_profile', { item, fileData }),
|
||||||
importProfile: (
|
importProfile: (url: string, option: PrfOption_Deserialize | null) =>
|
||||||
url: string,
|
__TAURI_INVOKE<null>('import_profile', { url, option }),
|
||||||
option: {
|
|
||||||
user_agent?: string | null
|
|
||||||
with_proxy?: boolean | null
|
|
||||||
self_proxy?: boolean | null
|
|
||||||
update_interval?: number | null
|
|
||||||
/**
|
|
||||||
* HTTP request timeout in seconds
|
|
||||||
* default is 60 seconds
|
|
||||||
*/
|
|
||||||
timeout_seconds?: number | null
|
|
||||||
/** default is `false` */
|
|
||||||
danger_accept_invalid_certs?: boolean | null
|
|
||||||
allow_auto_update?: boolean | null
|
|
||||||
merge?: string | null
|
|
||||||
script?: string | null
|
|
||||||
rules?: string | null
|
|
||||||
proxies?: string | null
|
|
||||||
groups?: string | null
|
|
||||||
} | null,
|
|
||||||
) => __TAURI_INVOKE<null>('import_profile', { url, option }),
|
|
||||||
reorderProfile: (activeId: string, overId: string) =>
|
reorderProfile: (activeId: string, overId: string) =>
|
||||||
__TAURI_INVOKE<null>('reorder_profile', { activeId, overId }),
|
__TAURI_INVOKE<null>('reorder_profile', { activeId, overId }),
|
||||||
updateProfile: (
|
updateProfile: (index: string, option: PrfOption_Deserialize | null) =>
|
||||||
index: string,
|
__TAURI_INVOKE<null>('update_profile', { index, option }),
|
||||||
option: {
|
|
||||||
user_agent?: string | null
|
|
||||||
with_proxy?: boolean | null
|
|
||||||
self_proxy?: boolean | null
|
|
||||||
update_interval?: number | null
|
|
||||||
/**
|
|
||||||
* HTTP request timeout in seconds
|
|
||||||
* default is 60 seconds
|
|
||||||
*/
|
|
||||||
timeout_seconds?: number | null
|
|
||||||
/** default is `false` */
|
|
||||||
danger_accept_invalid_certs?: boolean | null
|
|
||||||
allow_auto_update?: boolean | null
|
|
||||||
merge?: string | null
|
|
||||||
script?: string | null
|
|
||||||
rules?: string | null
|
|
||||||
proxies?: string | null
|
|
||||||
groups?: string | null
|
|
||||||
} | null,
|
|
||||||
) => __TAURI_INVOKE<null>('update_profile', { index, option }),
|
|
||||||
deleteProfile: (index: string) =>
|
deleteProfile: (index: string) =>
|
||||||
__TAURI_INVOKE<null>('delete_profile', { index }),
|
__TAURI_INVOKE<null>('delete_profile', { index }),
|
||||||
readProfileFile: (index: string) =>
|
readProfileFile: (index: string) =>
|
||||||
@@ -263,11 +211,11 @@ export type CommandFailure_Deserialize = {
|
|||||||
/** Structured command failure returned to the frontend. */
|
/** Structured command failure returned to the frontend. */
|
||||||
export type CommandFailure_Serialize = {
|
export type CommandFailure_Serialize = {
|
||||||
/** Stable frontend identifier, when classified. */
|
/** Stable frontend identifier, when classified. */
|
||||||
code?: string | null
|
code?: string
|
||||||
/** Human-readable diagnostic detail. */
|
/** Human-readable diagnostic detail. */
|
||||||
detail: string
|
detail: string
|
||||||
/** Requested operation when known by the command. */
|
/** Requested operation when known by the command. */
|
||||||
operation?: FailedOperation | null
|
operation?: FailedOperation
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Why the Core is not running, kept until a Core starts again. */
|
/** Why the Core is not running, kept until a Core starts again. */
|
||||||
@@ -330,14 +278,27 @@ export type IProfiles_Serialize = {
|
|||||||
/** ### `verge.yaml` schema */
|
/** ### `verge.yaml` schema */
|
||||||
export type IVerge = IVerge_Serialize | IVerge_Deserialize
|
export type IVerge = IVerge_Serialize | IVerge_Deserialize
|
||||||
|
|
||||||
export type IVergeTestItem = {
|
export type IVergeTestItem =
|
||||||
|
| IVergeTestItem_Serialize
|
||||||
|
| IVergeTestItem_Deserialize
|
||||||
|
|
||||||
|
export type IVergeTestItem_Deserialize = {
|
||||||
uid?: string | null
|
uid?: string | null
|
||||||
name?: string | null
|
name?: string | null
|
||||||
icon?: string | null
|
icon?: string | null
|
||||||
url?: string | null
|
url?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export type IVergeTheme = {
|
export type IVergeTestItem_Serialize = {
|
||||||
|
uid: string | null
|
||||||
|
name: string | null
|
||||||
|
icon: string | null
|
||||||
|
url: string | null
|
||||||
|
}
|
||||||
|
|
||||||
|
export type IVergeTheme = IVergeTheme_Serialize | IVergeTheme_Deserialize
|
||||||
|
|
||||||
|
export type IVergeTheme_Deserialize = {
|
||||||
primary_color?: string | null
|
primary_color?: string | null
|
||||||
secondary_color?: string | null
|
secondary_color?: string | null
|
||||||
primary_text?: string | null
|
primary_text?: string | null
|
||||||
@@ -350,6 +311,19 @@ export type IVergeTheme = {
|
|||||||
css_injection?: string | null
|
css_injection?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type IVergeTheme_Serialize = {
|
||||||
|
primary_color: string | null
|
||||||
|
secondary_color: string | null
|
||||||
|
primary_text: string | null
|
||||||
|
secondary_text: string | null
|
||||||
|
info_color: string | null
|
||||||
|
error_color: string | null
|
||||||
|
warning_color: string | null
|
||||||
|
success_color: string | null
|
||||||
|
font_family: string | null
|
||||||
|
css_injection: string | null
|
||||||
|
}
|
||||||
|
|
||||||
/** ### `verge.yaml` schema */
|
/** ### `verge.yaml` schema */
|
||||||
export type IVerge_Deserialize = {
|
export type IVerge_Deserialize = {
|
||||||
/** silent | error | warn | info | debug | trace */
|
/** silent | error | warn | info | debug | trace */
|
||||||
@@ -392,7 +366,7 @@ export type IVerge_Deserialize = {
|
|||||||
proxy_auto_config?: boolean | null
|
proxy_auto_config?: boolean | null
|
||||||
pac_file_content?: string | null
|
pac_file_content?: string | null
|
||||||
proxy_host?: string | null
|
proxy_host?: string | null
|
||||||
theme_setting?: IVergeTheme | null
|
theme_setting?: IVergeTheme_Deserialize | null
|
||||||
web_ui_list?: string[] | null
|
web_ui_list?: string[] | null
|
||||||
clash_core?: string | null
|
clash_core?: string | null
|
||||||
/** format: {func},{key} */
|
/** format: {func},{key} */
|
||||||
@@ -408,7 +382,7 @@ export type IVerge_Deserialize = {
|
|||||||
auto_delay_detection_interval_minutes?: number | null
|
auto_delay_detection_interval_minutes?: number | null
|
||||||
enable_builtin_enhanced?: boolean | null
|
enable_builtin_enhanced?: boolean | null
|
||||||
proxy_layout_column?: number | null
|
proxy_layout_column?: number | null
|
||||||
test_list?: IVergeTestItem[] | null
|
test_list?: IVergeTestItem_Deserialize[] | null
|
||||||
/** 0: 不清理; 1: 1天;2: 7天; 3: 30天; 4: 90天 */
|
/** 0: 不清理; 1: 1天;2: 7天; 3: 30天; 4: 90天 */
|
||||||
auto_log_clean?: number | null
|
auto_log_clean?: number | null
|
||||||
enable_auto_backup_schedule?: boolean | null
|
enable_auto_backup_schedule?: boolean | null
|
||||||
@@ -457,13 +431,13 @@ export type IVerge_Serialize = {
|
|||||||
traffic_graph: boolean | null
|
traffic_graph: boolean | null
|
||||||
/** show memory info (only for Clash Meta) */
|
/** show memory info (only for Clash Meta) */
|
||||||
enable_memory_usage: boolean | null
|
enable_memory_usage: boolean | null
|
||||||
enable_group_icon?: boolean | null
|
enable_group_icon?: boolean
|
||||||
pause_render_traffic_stats_on_blur: boolean | null
|
pause_render_traffic_stats_on_blur: boolean | null
|
||||||
common_tray_icon?: boolean | null
|
common_tray_icon?: boolean
|
||||||
menu_icon?: string | null
|
menu_icon?: string
|
||||||
menu_order?: string[] | null
|
menu_order?: string[]
|
||||||
proxy_group_tools_position?: string | null
|
proxy_group_tools_position?: string
|
||||||
notice_position?: string | null
|
notice_position?: string
|
||||||
collapse_navbar: boolean | null
|
collapse_navbar: boolean | null
|
||||||
sysproxy_tray_icon: boolean | null
|
sysproxy_tray_icon: boolean | null
|
||||||
tun_tray_icon: boolean | null
|
tun_tray_icon: boolean | null
|
||||||
@@ -482,11 +456,11 @@ export type IVerge_Serialize = {
|
|||||||
proxy_auto_config: boolean | null
|
proxy_auto_config: boolean | null
|
||||||
pac_file_content: string | null
|
pac_file_content: string | null
|
||||||
proxy_host: string | null
|
proxy_host: string | null
|
||||||
theme_setting: IVergeTheme | null
|
theme_setting: IVergeTheme_Serialize | null
|
||||||
web_ui_list: string[] | null
|
web_ui_list: string[] | null
|
||||||
clash_core?: string | null
|
clash_core?: string
|
||||||
/** format: {func},{key} */
|
/** format: {func},{key} */
|
||||||
hotkeys?: string[] | null
|
hotkeys?: string[]
|
||||||
enable_global_hotkey: boolean | null
|
enable_global_hotkey: boolean | null
|
||||||
home_cards: JsonValue | null
|
home_cards: JsonValue | null
|
||||||
auto_close_connection: boolean | null
|
auto_close_connection: boolean | null
|
||||||
@@ -498,7 +472,7 @@ export type IVerge_Serialize = {
|
|||||||
auto_delay_detection_interval_minutes: number | null
|
auto_delay_detection_interval_minutes: number | null
|
||||||
enable_builtin_enhanced: boolean | null
|
enable_builtin_enhanced: boolean | null
|
||||||
proxy_layout_column: number | null
|
proxy_layout_column: number | null
|
||||||
test_list: IVergeTestItem[] | null
|
test_list: IVergeTestItem_Serialize[] | null
|
||||||
/** 0: 不清理; 1: 1天;2: 7天; 3: 30天; 4: 90天 */
|
/** 0: 不清理; 1: 1天;2: 7天; 3: 30天; 4: 90天 */
|
||||||
auto_log_clean: number | null
|
auto_log_clean: number | null
|
||||||
enable_auto_backup_schedule: boolean | null
|
enable_auto_backup_schedule: boolean | null
|
||||||
@@ -510,10 +484,10 @@ export type IVerge_Serialize = {
|
|||||||
verge_socks_enabled: boolean | null
|
verge_socks_enabled: boolean | null
|
||||||
verge_port: number | null
|
verge_port: number | null
|
||||||
verge_http_enabled: boolean | null
|
verge_http_enabled: boolean | null
|
||||||
webdav_url?: string | null
|
webdav_url?: string
|
||||||
webdav_username?: string | null
|
webdav_username?: string
|
||||||
webdav_password?: string | null
|
webdav_password?: string
|
||||||
tray_proxy_groups_display_mode?: string | null
|
tray_proxy_groups_display_mode?: string
|
||||||
tray_inline_outbound_modes: boolean | null
|
tray_inline_outbound_modes: boolean | null
|
||||||
enable_auto_light_weight_mode: boolean | null
|
enable_auto_light_weight_mode: boolean | null
|
||||||
/** 自动进入轻量模式的延迟(分钟) */
|
/** 自动进入轻量模式的延迟(分钟) */
|
||||||
@@ -658,7 +632,7 @@ export type PrfItem_Deserialize = {
|
|||||||
file?: string | null
|
file?: string | null
|
||||||
desc?: string | null
|
desc?: string | null
|
||||||
url?: string | null
|
url?: string | null
|
||||||
selected?: PrfSelected[] | null
|
selected?: PrfSelected_Deserialize[] | null
|
||||||
latency_test_urls?: { [key in string]: string } | null
|
latency_test_urls?: { [key in string]: string } | null
|
||||||
extra?: PrfExtra | null
|
extra?: PrfExtra | null
|
||||||
updated?: number | null
|
updated?: number | null
|
||||||
@@ -672,14 +646,14 @@ export type PrfItem_Serialize = {
|
|||||||
type: string | null
|
type: string | null
|
||||||
name: string | null
|
name: string | null
|
||||||
file: string | null
|
file: string | null
|
||||||
desc?: string | null
|
desc?: string
|
||||||
url?: string | null
|
url?: string
|
||||||
selected?: PrfSelected[] | null
|
selected?: PrfSelected_Serialize[]
|
||||||
latency_test_urls?: { [key in string]: string } | null
|
latency_test_urls?: { [key in string]: string }
|
||||||
extra?: PrfExtra | null
|
extra?: PrfExtra
|
||||||
updated: number | null
|
updated: number | null
|
||||||
option?: PrfOption_Serialize | null
|
option?: PrfOption_Serialize
|
||||||
home?: string | null
|
home?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export type PrfOption = PrfOption_Serialize | PrfOption_Deserialize
|
export type PrfOption = PrfOption_Serialize | PrfOption_Deserialize
|
||||||
@@ -705,18 +679,18 @@ export type PrfOption_Deserialize = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type PrfOption_Serialize = {
|
export type PrfOption_Serialize = {
|
||||||
user_agent?: string | null
|
user_agent?: string
|
||||||
with_proxy?: boolean | null
|
with_proxy?: boolean
|
||||||
self_proxy?: boolean | null
|
self_proxy?: boolean
|
||||||
update_interval?: number | null
|
update_interval?: number
|
||||||
/**
|
/**
|
||||||
* HTTP request timeout in seconds
|
* HTTP request timeout in seconds
|
||||||
* default is 60 seconds
|
* default is 60 seconds
|
||||||
*/
|
*/
|
||||||
timeout_seconds?: number | null
|
timeout_seconds?: number
|
||||||
/** default is `false` */
|
/** default is `false` */
|
||||||
danger_accept_invalid_certs?: boolean | null
|
danger_accept_invalid_certs?: boolean
|
||||||
allow_auto_update?: boolean | null
|
allow_auto_update?: boolean
|
||||||
merge: string | null
|
merge: string | null
|
||||||
script: string | null
|
script: string | null
|
||||||
rules: string | null
|
rules: string | null
|
||||||
@@ -724,11 +698,18 @@ export type PrfOption_Serialize = {
|
|||||||
groups: string | null
|
groups: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export type PrfSelected = {
|
export type PrfSelected = PrfSelected_Serialize | PrfSelected_Deserialize
|
||||||
|
|
||||||
|
export type PrfSelected_Deserialize = {
|
||||||
name?: string | null
|
name?: string | null
|
||||||
now?: string | null
|
now?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type PrfSelected_Serialize = {
|
||||||
|
name: string | null
|
||||||
|
now: string | null
|
||||||
|
}
|
||||||
|
|
||||||
export type ProfileCreate = ProfileCreate_Serialize | ProfileCreate_Deserialize
|
export type ProfileCreate = ProfileCreate_Serialize | ProfileCreate_Deserialize
|
||||||
|
|
||||||
export type ProfileCreate_Deserialize = {
|
export type ProfileCreate_Deserialize = {
|
||||||
@@ -758,7 +739,7 @@ export type ProfileDnsSettings_Deserialize = {
|
|||||||
|
|
||||||
export type ProfileDnsSettings_Serialize = {
|
export type ProfileDnsSettings_Serialize = {
|
||||||
enabled: boolean
|
enabled: boolean
|
||||||
confirmation?: string | null
|
confirmation?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ProfilePatch = ProfilePatch_Serialize | ProfilePatch_Deserialize
|
export type ProfilePatch = ProfilePatch_Serialize | ProfilePatch_Deserialize
|
||||||
@@ -769,7 +750,7 @@ export type ProfilePatch_Deserialize = {
|
|||||||
desc?: string | null
|
desc?: string | null
|
||||||
file?: string | null
|
file?: string | null
|
||||||
url?: string | null
|
url?: string | null
|
||||||
selected?: PrfSelected[] | null
|
selected?: PrfSelected_Deserialize[] | null
|
||||||
latency_test_urls?: { [key in string]: string } | null
|
latency_test_urls?: { [key in string]: string } | null
|
||||||
extra?: PrfExtra | null
|
extra?: PrfExtra | null
|
||||||
updated?: number | null
|
updated?: number | null
|
||||||
@@ -782,17 +763,25 @@ export type ProfilePatch_Serialize = {
|
|||||||
desc: string | null
|
desc: string | null
|
||||||
file: string | null
|
file: string | null
|
||||||
url: string | null
|
url: string | null
|
||||||
selected: PrfSelected[] | null
|
selected: PrfSelected_Serialize[] | null
|
||||||
latency_test_urls: { [key in string]: string } | null
|
latency_test_urls: { [key in string]: string } | null
|
||||||
extra: PrfExtra | null
|
extra: PrfExtra | null
|
||||||
updated: number | null
|
updated: number | null
|
||||||
option: PrfOption_Serialize | null
|
option: PrfOption_Serialize | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ProfileSelection = {
|
export type ProfileSelection =
|
||||||
|
| ProfileSelection_Serialize
|
||||||
|
| ProfileSelection_Deserialize
|
||||||
|
|
||||||
|
export type ProfileSelection_Deserialize = {
|
||||||
current?: string | null
|
current?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ProfileSelection_Serialize = {
|
||||||
|
current: string | null
|
||||||
|
}
|
||||||
|
|
||||||
export type ProfileUpdatePayload = {
|
export type ProfileUpdatePayload = {
|
||||||
uid: string
|
uid: string
|
||||||
}
|
}
|
||||||
@@ -825,11 +814,11 @@ export type ProxyGroupView_Deserialize = {
|
|||||||
export type ProxyGroupView_Serialize = {
|
export type ProxyGroupView_Serialize = {
|
||||||
name: string
|
name: string
|
||||||
type: string
|
type: string
|
||||||
now?: string | null
|
now?: string
|
||||||
fixed?: string | null
|
fixed?: string
|
||||||
hidden?: boolean | null
|
hidden?: boolean
|
||||||
icon?: string | null
|
icon?: string
|
||||||
testUrl?: string | null
|
testUrl?: string
|
||||||
history: DelayHistory[]
|
history: DelayHistory[]
|
||||||
extra: { [key in string]: ProxyLatencyHistory }
|
extra: { [key in string]: ProxyLatencyHistory }
|
||||||
members: ProxyMemberRef[]
|
members: ProxyMemberRef[]
|
||||||
@@ -874,10 +863,10 @@ export type ProxyNodeView_Serialize = {
|
|||||||
type: string
|
type: string
|
||||||
history: DelayHistory[]
|
history: DelayHistory[]
|
||||||
extra: { [key in string]: ProxyLatencyHistory }
|
extra: { [key in string]: ProxyLatencyHistory }
|
||||||
id?: string | null
|
id?: string
|
||||||
hidden?: boolean | null
|
hidden?: boolean
|
||||||
icon?: string | null
|
icon?: string
|
||||||
testUrl?: string | null
|
testUrl?: string
|
||||||
source: ProxyNodeSource
|
source: ProxyNodeSource
|
||||||
} & ProxyCapabilities
|
} & ProxyCapabilities
|
||||||
|
|
||||||
@@ -906,8 +895,8 @@ export type ProxyProviderView_Deserialize = {
|
|||||||
export type ProxyProviderView_Serialize = {
|
export type ProxyProviderView_Serialize = {
|
||||||
name: string
|
name: string
|
||||||
vehicleType: ProxyProviderVehicleType
|
vehicleType: ProxyProviderVehicleType
|
||||||
updatedAt?: string | null
|
updatedAt?: string
|
||||||
subscriptionInfo?: ProxySubscriptionInfo | null
|
subscriptionInfo?: ProxySubscriptionInfo
|
||||||
proxyRecordIds: string[]
|
proxyRecordIds: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user