perf(icon): 修改全平台icon(除了mac) (#193)

增加代理功能(beta)
This commit is contained in:
Dawn
2025-01-19 05:22:25 +08:00
committed by GitHub
parent 02529566d3
commit eea52ea1e4
58 changed files with 530 additions and 73 deletions
+331 -34
View File
@@ -1997,6 +1997,25 @@ dependencies = [
"syn 2.0.95",
]
[[package]]
name = "h2"
version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
"http 0.2.12",
"indexmap 2.7.0",
"slab",
"tokio",
"tokio-util",
"tracing",
]
[[package]]
name = "h2"
version = "0.4.7"
@@ -2008,7 +2027,7 @@ dependencies = [
"fnv",
"futures-core",
"futures-sink",
"http",
"http 1.2.0",
"indexmap 2.7.0",
"slab",
"tokio",
@@ -2113,6 +2132,17 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "http"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
dependencies = [
"bytes",
"fnv",
"itoa 1.0.14",
]
[[package]]
name = "http"
version = "1.2.0"
@@ -2124,6 +2154,17 @@ dependencies = [
"itoa 1.0.14",
]
[[package]]
name = "http-body"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
"http 0.2.12",
"pin-project-lite",
]
[[package]]
name = "http-body"
version = "1.0.1"
@@ -2131,7 +2172,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
"http",
"http 1.2.0",
]
[[package]]
@@ -2142,8 +2183,8 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
"http",
"http-body",
"http 1.2.0",
"http-body 1.0.1",
"pin-project-lite",
]
@@ -2153,12 +2194,19 @@ version = "1.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
[[package]]
name = "httpdate"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hula"
version = "2.6.1"
dependencies = [
"base64 0.22.1",
"lazy_static",
"reqwest 0.11.27",
"rodio",
"screenshots",
"serde",
@@ -2182,6 +2230,30 @@ dependencies = [
"tauri-plugin-websocket",
]
[[package]]
name = "hyper"
version = "0.14.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"h2 0.3.26",
"http 0.2.12",
"http-body 0.4.6",
"httparse",
"httpdate",
"itoa 1.0.14",
"pin-project-lite",
"socket2",
"tokio",
"tower-service",
"tracing",
"want",
]
[[package]]
name = "hyper"
version = "1.5.2"
@@ -2191,9 +2263,9 @@ dependencies = [
"bytes",
"futures-channel",
"futures-util",
"h2",
"http",
"http-body",
"h2 0.4.7",
"http 1.2.0",
"http-body 1.0.1",
"httparse",
"itoa 1.0.14",
"pin-project-lite",
@@ -2209,8 +2281,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
dependencies = [
"futures-util",
"http",
"hyper",
"http 1.2.0",
"hyper 1.5.2",
"hyper-util",
"rustls",
"rustls-pki-types",
@@ -2220,6 +2292,19 @@ dependencies = [
"webpki-roots",
]
[[package]]
name = "hyper-tls"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
dependencies = [
"bytes",
"hyper 0.14.32",
"native-tls",
"tokio",
"tokio-native-tls",
]
[[package]]
name = "hyper-util"
version = "0.1.10"
@@ -2229,9 +2314,9 @@ dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http",
"http-body",
"hyper",
"http 1.2.0",
"http-body 1.0.1",
"hyper 1.5.2",
"pin-project-lite",
"socket2",
"tokio",
@@ -2906,6 +2991,23 @@ dependencies = [
"windows-sys 0.59.0",
]
[[package]]
name = "native-tls"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466"
dependencies = [
"libc",
"log",
"openssl",
"openssl-probe",
"openssl-sys",
"schannel",
"security-framework",
"security-framework-sys",
"tempfile",
]
[[package]]
name = "ndk"
version = "0.8.0"
@@ -3398,6 +3500,60 @@ dependencies = [
"pathdiff",
]
[[package]]
name = "openssl"
version = "0.10.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5"
dependencies = [
"bitflags 2.6.0",
"cfg-if",
"foreign-types 0.3.2",
"libc",
"once_cell",
"openssl-macros",
"openssl-sys",
]
[[package]]
name = "openssl-macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.95",
]
[[package]]
name = "openssl-probe"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-src"
version = "300.4.1+3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c"
dependencies = [
"cc",
]
[[package]]
name = "openssl-sys"
version = "0.9.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741"
dependencies = [
"cc",
"libc",
"openssl-src",
"pkg-config",
"vcpkg",
]
[[package]]
name = "option-ext"
version = "0.2.0"
@@ -4083,6 +4239,47 @@ version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "reqwest"
version = "0.11.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
dependencies = [
"base64 0.21.7",
"bytes",
"encoding_rs",
"futures-core",
"futures-util",
"h2 0.3.26",
"http 0.2.12",
"http-body 0.4.6",
"hyper 0.14.32",
"hyper-tls",
"ipnet",
"js-sys",
"log",
"mime",
"native-tls",
"once_cell",
"percent-encoding",
"pin-project-lite",
"rustls-pemfile 1.0.4",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper 0.1.2",
"system-configuration 0.5.1",
"tokio",
"tokio-native-tls",
"tokio-socks",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"winreg 0.50.0",
]
[[package]]
name = "reqwest"
version = "0.12.12"
@@ -4096,11 +4293,11 @@ dependencies = [
"encoding_rs",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"h2 0.4.7",
"http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"hyper",
"hyper 1.5.2",
"hyper-rustls",
"hyper-util",
"ipnet",
@@ -4112,13 +4309,13 @@ dependencies = [
"pin-project-lite",
"quinn",
"rustls",
"rustls-pemfile",
"rustls-pemfile 2.2.0",
"rustls-pki-types",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"system-configuration",
"sync_wrapper 1.0.2",
"system-configuration 0.6.1",
"tokio",
"tokio-rustls",
"tokio-util",
@@ -4260,6 +4457,15 @@ dependencies = [
"zeroize",
]
[[package]]
name = "rustls-pemfile"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
dependencies = [
"base64 0.21.7",
]
[[package]]
name = "rustls-pemfile"
version = "2.2.0"
@@ -4304,6 +4510,15 @@ dependencies = [
"winapi-util",
]
[[package]]
name = "schannel"
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
dependencies = [
"windows-sys 0.59.0",
]
[[package]]
name = "schemars"
version = "0.8.21"
@@ -4360,6 +4575,29 @@ dependencies = [
"xcb",
]
[[package]]
name = "security-framework"
version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
"bitflags 2.6.0",
"core-foundation 0.9.4",
"core-foundation-sys",
"libc",
"security-framework-sys",
]
[[package]]
name = "security-framework-sys"
version = "2.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "selectors"
version = "0.22.0"
@@ -5035,6 +5273,12 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "sync_wrapper"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "sync_wrapper"
version = "1.0.2"
@@ -5064,6 +5308,17 @@ dependencies = [
"libc",
]
[[package]]
name = "system-configuration"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
dependencies = [
"bitflags 1.3.2",
"core-foundation 0.9.4",
"system-configuration-sys 0.5.0",
]
[[package]]
name = "system-configuration"
version = "0.6.1"
@@ -5072,7 +5327,17 @@ checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
dependencies = [
"bitflags 2.6.0",
"core-foundation 0.9.4",
"system-configuration-sys",
"system-configuration-sys 0.6.0",
]
[[package]]
name = "system-configuration-sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
@@ -5180,7 +5445,7 @@ dependencies = [
"glob",
"gtk",
"heck 0.5.0",
"http",
"http 1.2.0",
"image",
"jni",
"libc",
@@ -5193,7 +5458,7 @@ dependencies = [
"percent-encoding",
"plist",
"raw-window-handle",
"reqwest",
"reqwest 0.12.12",
"serde",
"serde_json",
"serde_repr",
@@ -5387,9 +5652,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e62a9bde54d6a0218b63f5a248f02056ad4316ba6ad81dfb9e4f73715df5deb1"
dependencies = [
"data-url",
"http",
"http 1.2.0",
"regex",
"reqwest",
"reqwest 0.12.12",
"schemars",
"serde",
"serde_json",
@@ -5514,11 +5779,11 @@ dependencies = [
"dirs 5.0.1",
"flate2",
"futures-util",
"http",
"http 1.2.0",
"infer",
"minisign-verify",
"percent-encoding",
"reqwest",
"reqwest 0.12.12",
"semver",
"serde",
"serde_json",
@@ -5543,7 +5808,7 @@ dependencies = [
"futures-util",
"log",
"read-progress-stream",
"reqwest",
"reqwest 0.12.12",
"serde",
"serde_json",
"tauri",
@@ -5560,7 +5825,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14055b796521e0facf6582256dea9322453595917851082610c557293862c966"
dependencies = [
"futures-util",
"http",
"http 1.2.0",
"log",
"rand 0.8.5",
"serde",
@@ -5580,7 +5845,7 @@ checksum = "2274ef891ccc0a8d318deffa9d70053f947664d12d58b9c0d1ae5e89237e01f7"
dependencies = [
"dpi",
"gtk",
"http",
"http 1.2.0",
"jni",
"raw-window-handle",
"serde",
@@ -5598,7 +5863,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3707b40711d3b9f6519150869e358ffbde7c57567fb9b5a8b51150606939b2a0"
dependencies = [
"gtk",
"http",
"http 1.2.0",
"jni",
"log",
"objc2",
@@ -5629,7 +5894,7 @@ dependencies = [
"dunce",
"glob",
"html5ever",
"http",
"http 1.2.0",
"infer",
"json-patch",
"kuchikiki",
@@ -5842,6 +6107,16 @@ dependencies = [
"syn 2.0.95",
]
[[package]]
name = "tokio-native-tls"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
dependencies = [
"native-tls",
"tokio",
]
[[package]]
name = "tokio-rustls"
version = "0.26.1"
@@ -5852,6 +6127,18 @@ dependencies = [
"tokio",
]
[[package]]
name = "tokio-socks"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f"
dependencies = [
"either",
"futures-util",
"thiserror 1.0.69",
"tokio",
]
[[package]]
name = "tokio-stream"
version = "0.1.17"
@@ -5971,7 +6258,7 @@ dependencies = [
"futures-core",
"futures-util",
"pin-project-lite",
"sync_wrapper",
"sync_wrapper 1.0.2",
"tokio",
"tower-layer",
"tower-service",
@@ -6057,7 +6344,7 @@ dependencies = [
"byteorder",
"bytes",
"data-encoding",
"http",
"http 1.2.0",
"httparse",
"log",
"rand 0.8.5",
@@ -7040,6 +7327,16 @@ dependencies = [
"winapi",
]
[[package]]
name = "winreg"
version = "0.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
dependencies = [
"cfg-if",
"windows-sys 0.48.0",
]
[[package]]
name = "winreg"
version = "0.52.0"
@@ -7077,7 +7374,7 @@ dependencies = [
"gdkx11",
"gtk",
"html5ever",
"http",
"http 1.2.0",
"javascriptcore-rs",
"jni",
"kuchikiki",
+5
View File
@@ -54,6 +54,11 @@ lazy_static = "1.4"
screenshots = "0.5.4"
base64 = "0.22.1"
rodio = "0.17.3"
reqwest = { version = "0.11", features = [
"json",
"socks",
"native-tls-vendored",
] }
[features]
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 KiB

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 88 KiB

+8 -3
View File
@@ -7,6 +7,8 @@ use common_cmd::{
set_height,
};
#[cfg(desktop)]
mod proxy;
#[cfg(desktop)]
use desktops::common_cmd;
#[cfg(desktop)]
use desktops::init;
@@ -14,14 +16,16 @@ use desktops::init;
use desktops::tray;
#[cfg(desktop)]
use init::CustomInit;
#[cfg(desktop)]
use proxy::test_proxy;
// 移动端依赖
#[cfg(mobile)]
mod mobiles;
#[cfg(mobile)]
use mobiles::init;
#[cfg(mobile)]
use init::CustomInit;
#[cfg(mobile)]
use mobiles::init;
pub fn run() {
#[cfg(desktop)]
@@ -51,7 +55,8 @@ fn setup_desktop() {
screenshot,
audio,
set_height,
set_badge_count
set_badge_count,
test_proxy
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
+58
View File
@@ -0,0 +1,58 @@
use reqwest::{Client, Proxy};
use std::time::Duration;
// 定义测试用的URL列表
const TEST_URLS: [&str; 3] = [
"https://www.baidu.com",
"https://www.bing.com",
"https://www.qq.com",
];
#[tauri::command]
pub async fn test_proxy(proxy_type: String, proxy_host: String, proxy_port: u16) -> Result<bool, String> {
if proxy_type.is_empty() {
return Ok(true); // 不使用代理时直接返回成功
}
let proxy_url = match proxy_type.as_str() {
"http" => format!("http://{}:{}", proxy_host, proxy_port),
"socks5" => format!("socks5://{}:{}", proxy_host, proxy_port),
_ => return Err("不支持的代理类型".to_string()),
};
// 构建代理客户端,移除了dns_resolver配置
let client = Client::builder()
.proxy(Proxy::all(&proxy_url).map_err(|e| format!("代理设置错误: {}", e))?)
.timeout(Duration::from_secs(10))
.build()
.map_err(|e| format!("创建客户端失败: {}", e))?;
// 依次测试多个URL,直到有一个成功
for url in TEST_URLS.iter() {
match test_url(&client, url).await {
Ok(_) => return Ok(true),
Err(e) => {
println!("测试 {} 失败: {}", url, e);
// 如果是DNS错误,直接返回特定错误信息
if e.contains("dns error") {
return Err("DNS解析失败,请检查网络连接或代理设置".to_string());
}
}
}
}
Err("所有测试网站均无法连接,请检查代理设置".to_string())
}
async fn test_url(client: &Client, url: &str) -> Result<(), String> {
match client.get(url).send().await {
Ok(response) => {
if response.status().is_success() {
Ok(())
} else {
Err(format!("HTTP状态码错误: {}", response.status()))
}
}
Err(e) => Err(format!("请求失败: {}", e)),
}
}
+17 -15
View File
@@ -22,7 +22,7 @@ export const getEnhancedFingerprint = async (): Promise<string> => {
// 创建新的Promise并保存引用
fingerprintPromise = (async () => {
console.time('🔍 设备指纹获取总耗时')
const totalStart = performance.now()
try {
// 检查缓存是否有效
@@ -30,14 +30,14 @@ export const getEnhancedFingerprint = async (): Promise<string> => {
if (cachedData) {
const { fingerprint, timestamp } = JSON.parse(cachedData)
if (Date.now() - timestamp < CACHE_DURATION) {
console.timeEnd('🔍 设备指纹获取总耗时')
console.log('✅ 使用缓存的设备指纹')
const totalTime = performance.now() - totalStart
console.log(`🔍 使用缓存的设备指纹,总耗时: ${totalTime.toFixed(2)}ms`)
return fingerprint
}
}
console.time('📊 收集设备信息耗时')
// 收集设备信息
const deviceInfoStart = performance.now()
const deviceInfo = {
platform: await type(),
screenSize: `${window.screen.width}x${window.screen.height}`,
@@ -48,18 +48,20 @@ export const getEnhancedFingerprint = async (): Promise<string> => {
language: navigator.language,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
}
console.timeEnd('📊 收集设备信息耗时')
const deviceInfoTime = performance.now() - deviceInfoStart
console.log(`📊 收集设备信息耗时: ${deviceInfoTime.toFixed(2)}ms`)
// 在主线程中获取基础浏览器指纹
console.time('Worker: 基础指纹生成')
const fpStart = performance.now()
const fp = await FingerprintJS.load()
const fpResult = await fp.get({
debug: false
})
console.timeEnd('Worker: 基础指纹生成')
const fpTime = performance.now() - fpStart
console.log(`基础指纹生成耗时: ${fpTime.toFixed(2)}ms`)
// 创建 Promise 等待 Worker 返回结果
console.time('🔨 Worker生成指纹耗时')
// Worker处理
const workerStart = performance.now()
const fingerprint = await new Promise<string>((resolve) => {
const handleMessage = (e: MessageEvent) => {
const { type, fingerprint } = e.data
@@ -76,7 +78,8 @@ export const getEnhancedFingerprint = async (): Promise<string> => {
browserFingerprint: fpResult.visitorId
})
})
console.timeEnd('🔨 Worker生成指纹耗时')
const workerTime = performance.now() - workerStart
console.log(`🔨 Worker生成指纹耗时: ${workerTime.toFixed(2)}ms`)
// 缓存结果
if (fingerprint) {
@@ -87,17 +90,16 @@ export const getEnhancedFingerprint = async (): Promise<string> => {
timestamp: Date.now()
})
)
console.log('✅ 生成新的设备指纹并缓存')
}
console.timeEnd('🔍 设备指纹获取总耗时')
const totalTime = performance.now() - totalStart
console.log(`🔍 设备指纹获取总耗时: ${totalTime.toFixed(2)}ms`)
return fingerprint
} catch (error) {
console.timeEnd('🔍 设备指纹获取总耗时')
console.error('❌ 获取设备指纹失败:', error)
const totalTime = performance.now() - totalStart
console.error(`❌ 获取设备指纹失败,总耗时: ${totalTime.toFixed(2)}ms`, error)
return ''
} finally {
// 清除正在进行的Promise引用
fingerprintPromise = null
}
})()
+21 -2
View File
@@ -74,6 +74,12 @@ async function Http<T = any>(
fullResponse: boolean = false,
abort?: AbortController
): Promise<{ data: T; resp: Response } | T> {
// 打印请求信息
console.log(`🚀 发起请求 → ${options.method} ${url}`, {
body: options.body,
query: options.query
})
// 默认重试配置
const defaultRetryOptions: RetryOptions = {
retries: 3,
@@ -118,8 +124,15 @@ async function Http<T = any>(
signal: abort?.signal
}
// 打印请求头内容
console.log(...httpHeaders)
// 获取代理设置
// const proxySettings = JSON.parse(localStorage.getItem('proxySettings') || '{}')
// 如果设置了代理,添加代理配置 (BETA)
// if (proxySettings.type && proxySettings.ip && proxySettings.port) {
// // 使用 Rust 后端的代理客户端
// fetchOptions.proxy = {
// url: `${proxySettings.type}://${proxySettings.ip}:${proxySettings.port}`
// }
// }
// 判断是否需要添加请求体
if (options.body) {
@@ -160,6 +173,12 @@ async function Http<T = any>(
// 解析响应数据
const responseData = options.isBlob ? await response.arrayBuffer() : await response.json()
// 打印响应结果
console.log(`✅ 请求成功 → ${options.method} ${url}`, {
status: response.status,
data: responseData
})
// 若有success === false,需要重试
if (responseData && responseData.success === false) {
throw new AppException(responseData.message || url, {
+1 -1
View File
@@ -357,7 +357,7 @@ const enterKey = (e: KeyboardEvent) => {
onBeforeMount(async () => {
// 如果不是自动登录且当前在登录页面,清除 TOKEN,防止用户直接使用控制台退出导致登录前还没有退出账号就继续登录
if (!login.value.autoLogin && route.path === '/login' && TOKEN.value) {
// await apis.logout()
await apis.logout()
isTrayMenuShow.value = false
computedToken.clear()
// 重新初始化 WebSocket 连接,此时传入 null 作为 token
+79 -11
View File
@@ -12,14 +12,14 @@
<n-collapse-transition :show="proxyType === 'http'">
<n-flex vertical :size="10" justify="center">
<p class="text-12px pt-14px">IP地址</p>
<n-input
class="rounded-6px text-12px"
v-model:value="IP"
type="text"
placeholder="http://xxx 或者 https://xxx" />
<n-input class="rounded-6px text-12px" v-model:value="IP" type="text" placeholder="例如:127.0.0.1" />
<p class="text-12px pt-14px">端口号</p>
<n-input class="rounded-6px text-12px" v-model:value="port" type="text" placeholder="请输入端口号" />
<n-input
class="rounded-6px text-12px"
v-model:value="port"
type="text"
placeholder="HTTP:7890 或 SOCKS5:7891" />
</n-flex>
<p @click="proxyTest" class="text-(14px #13987f center) cursor-pointer pt-20px">网络代理测试</p>
@@ -36,6 +36,7 @@
<script setup lang="ts">
import { lightTheme } from 'naive-ui'
import router from '@/router'
import { invoke } from '@tauri-apps/api/core'
const options = [
{
@@ -45,14 +46,81 @@ const options = [
{
label: 'HTTP代理',
value: 'http'
},
{
label: 'SOCKS5代理',
value: 'socks5'
}
]
const proxyType = ref(options[0].value)
const IP = ref()
const port = ref()
const handleSave = () => {}
const proxyTest = () => {}
const proxyType = ref(options[0].value)
const IP = ref('')
const port = ref('')
// 从本地存储加载代理设置
onMounted(() => {
const savedProxy = localStorage.getItem('proxySettings')
if (savedProxy) {
const settings = JSON.parse(savedProxy)
proxyType.value = settings.type
IP.value = settings.ip
port.value = settings.port
}
})
// 保存代理设置
const handleSave = async () => {
try {
if (proxyType.value && (!IP.value || !port.value)) {
window.$message.warning('请填写完整的代理信息')
return
}
// 保存到本地存储
const proxySettings = {
type: proxyType.value,
ip: IP.value,
port: port.value
}
localStorage.setItem('proxySettings', JSON.stringify(proxySettings))
window.$message.success('代理设置保存成功')
router.push('/login')
} catch (error) {
window.$message.error('代理设置失败:' + error)
}
}
// 测试代理连接
const proxyTest = async () => {
if (proxyType.value && (!IP.value || !port.value)) {
window.$message.warning('请填写完整的代理信息')
return
}
try {
window.$message.loading('正在测试代理连接...', {
duration: 0
})
const result = await invoke('test_proxy', {
proxyType: proxyType.value,
proxyHost: IP.value,
proxyPort: Number(port.value)
})
if (result) {
window.$message.success('代理连接测试成功')
} else {
window.$message.error('代理连接测试失败')
}
} catch (error) {
// 显示具体的错误信息
window.$message.error(`代理测试失败: ${error}`)
} finally {
window.$message.destroyAll() // 清除loading消息
}
}
</script>
<style scoped lang="scss">
+10 -7
View File
@@ -49,15 +49,16 @@ const detectBrowserFeatures = async (): Promise<Record<string, boolean>> => {
// 生成设备指纹
const generateFingerprint = async (data: { deviceInfo: any; browserFingerprint: string }): Promise<string> => {
try {
console.time('Worker: 指纹生成总耗时')
const totalStart = performance.now()
// 2. 浏览器特征检测
console.time('Worker: 特征检测')
const featureStart = performance.now()
const browserFeatures = await detectBrowserFeatures()
console.timeEnd('Worker: 特征检测')
const featureTime = performance.now() - featureStart
console.log(`Worker: 特征检测耗时: ${featureTime.toFixed(2)}ms`)
// 3. 组合所有特征
console.time('Worker: SHA-256计算')
const hashStart = performance.now()
const combinedFingerprint = JSON.stringify({
browserFingerprint: data.browserFingerprint,
deviceInfo: data.deviceInfo,
@@ -71,12 +72,14 @@ const generateFingerprint = async (data: { deviceInfo: any; browserFingerprint:
const fingerprint = Array.from(new Uint8Array(fingerprintBuffer))
.map((b) => b.toString(16).padStart(2, '0'))
.join('')
console.timeEnd('Worker: SHA-256计算')
const hashTime = performance.now() - hashStart
console.log(`Worker: SHA-256计算耗时: ${hashTime.toFixed(2)}ms`)
const totalTime = performance.now() - totalStart
console.log(`Worker: 指纹生成总耗时: ${totalTime.toFixed(2)}ms`)
console.timeEnd('Worker: 指纹生成总耗时')
return fingerprint
} catch (error) {
console.timeEnd('Worker: 指纹生成总耗时')
console.error('Worker: ❌ 生成设备指纹失败:', error)
return ''
}