@@ -6,6 +6,24 @@ use tauri::{App, Config, Url, WebviewUrl, WebviewWindow, WebviewWindowBuilder};
66#[ cfg( target_os = "macos" ) ]
77use 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+
927pub 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