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