Skip to content

Commit 0f80e02

Browse files
committed
Repair proxy settings under Windows
1 parent eb128c6 commit 0f80e02

File tree

1 file changed

+77
-11
lines changed

1 file changed

+77
-11
lines changed

src-tauri/src/app/window.rs

Lines changed: 77 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,24 @@ use tauri::{App, Config, Url, WebviewUrl, WebviewWindow, WebviewWindowBuilder};
66
#[cfg(target_os = "macos")]
77
use tauri::{Theme, TitleBarStyle};
88

9+
#[cfg(target_os = "windows")]
10+
fn build_proxy_browser_arg(url: &Url) -> Option<String> {
11+
let host = url.host_str()?;
12+
let scheme = url.scheme();
13+
let port = url
14+
.port()
15+
.or_else(|| match scheme {
16+
"http" => Some(80),
17+
"socks5" => Some(1080),
18+
_ => None,
19+
})?;
20+
21+
match scheme {
22+
"http" | "socks5" => Some(format!("--proxy-server={scheme}://{host}:{port}")),
23+
_ => None,
24+
}
25+
}
26+
927
pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) -> WebviewWindow {
1028
let package_name = tauri_config.clone().product_name.unwrap();
1129
let _data_dir = get_data_dir(app.handle(), package_name);
@@ -60,12 +78,36 @@ pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) ->
6078
.initialization_script(include_str!("../inject/style.js"))
6179
.initialization_script(include_str!("../inject/custom.js"));
6280

81+
#[cfg(target_os = "windows")]
82+
let mut windows_browser_args = String::from("--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection --disable-blink-features=AutomationControlled");
83+
84+
#[cfg(all(not(target_os = "windows"), not(target_os = "macos")))]
85+
let mut linux_browser_args =
86+
String::from("--disable-blink-features=AutomationControlled");
87+
6388
if window_config.enable_wasm {
64-
window_builder = window_builder
65-
.additional_browser_args("--enable-features=SharedArrayBuffer")
66-
.additional_browser_args("--enable-unsafe-webgpu");
89+
#[cfg(target_os = "windows")]
90+
{
91+
windows_browser_args.push_str(" --enable-features=SharedArrayBuffer");
92+
windows_browser_args.push_str(" --enable-unsafe-webgpu");
93+
}
94+
95+
#[cfg(all(not(target_os = "windows"), not(target_os = "macos")))]
96+
{
97+
linux_browser_args.push_str(" --enable-features=SharedArrayBuffer");
98+
linux_browser_args.push_str(" --enable-unsafe-webgpu");
99+
}
100+
101+
#[cfg(target_os = "macos")]
102+
{
103+
window_builder = window_builder
104+
.additional_browser_args("--enable-features=SharedArrayBuffer")
105+
.additional_browser_args("--enable-unsafe-webgpu");
106+
}
67107
}
68108

109+
let mut parsed_proxy_url: Option<Url> = None;
110+
69111
// Platform-specific configuration must be set before proxy on Windows/Linux
70112
#[cfg(target_os = "macos")]
71113
{
@@ -84,20 +126,44 @@ pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) ->
84126
// Windows and Linux: set data_directory before proxy_url
85127
#[cfg(not(target_os = "macos"))]
86128
{
87-
window_builder = window_builder
88-
.data_directory(_data_dir)
89-
.additional_browser_args("--disable-blink-features=AutomationControlled")
90-
.theme(None);
129+
window_builder = window_builder.data_directory(_data_dir).theme(None);
130+
131+
if !config.proxy_url.is_empty() {
132+
if let Ok(proxy_url) = Url::from_str(&config.proxy_url) {
133+
parsed_proxy_url = Some(proxy_url.clone());
134+
#[cfg(target_os = "windows")]
135+
{
136+
if let Some(arg) = build_proxy_browser_arg(&proxy_url) {
137+
windows_browser_args.push(' ');
138+
windows_browser_args.push_str(&arg);
139+
}
140+
}
141+
}
142+
}
143+
144+
#[cfg(target_os = "windows")]
145+
{
146+
window_builder = window_builder.additional_browser_args(&windows_browser_args);
147+
}
148+
149+
#[cfg(all(not(target_os = "windows"), not(target_os = "macos")))]
150+
{
151+
window_builder = window_builder.additional_browser_args(&linux_browser_args);
152+
}
91153
}
92154

93155
// Set proxy after platform-specific configs (required for Windows/Linux)
94-
if !config.proxy_url.is_empty() {
156+
if parsed_proxy_url.is_none() && !config.proxy_url.is_empty() {
95157
if let Ok(proxy_url) = Url::from_str(&config.proxy_url) {
96-
window_builder = window_builder.proxy_url(proxy_url);
97-
#[cfg(debug_assertions)]
98-
println!("Proxy configured: {}", config.proxy_url);
158+
parsed_proxy_url = Some(proxy_url);
99159
}
100160
}
101161

162+
if let Some(proxy_url) = parsed_proxy_url {
163+
window_builder = window_builder.proxy_url(proxy_url);
164+
#[cfg(debug_assertions)]
165+
println!("Proxy configured: {}", config.proxy_url);
166+
}
167+
102168
window_builder.build().expect("Failed to build window")
103169
}

0 commit comments

Comments
 (0)