Browse Source

feat: support copy CMD & PowerShell proxy env

keiko233 1 year ago
parent
commit
26fd90dfa3
2 changed files with 27 additions and 6 deletions
  1. 15 3
      src-tauri/src/core/tray.rs
  2. 12 3
      src-tauri/src/feat.rs

+ 15 - 3
src-tauri/src/core/tray.rs

@@ -52,8 +52,16 @@ impl Tray {
             ))
             .add_item(CustomMenuItem::new("tun_mode", t!("TUN Mode", "Tun 模式")))
             .add_item(CustomMenuItem::new(
-                "copy_env",
-                t!("Copy Env", "复制环境变量"),
+                "copy_env_sh",
+                t!("Copy Env (sh)", "复制环境变量(sh)"),
+            ))
+            .add_item(CustomMenuItem::new(
+                "copy_env_cmd",
+                t!("Copy Env (CMD)", "复制环境变量(CMD)"),
+            ))
+            .add_item(CustomMenuItem::new(
+                "copy_env_ps",
+                t!("Copy Env (PS)", "复制环境变量(PS)"),
             ))
             .add_submenu(SystemTraySubmenu::new(
                 t!("Open Dir", "打开目录"),
@@ -149,7 +157,11 @@ impl Tray {
                 "open_window" => resolve::create_window(app_handle),
                 "system_proxy" => feat::toggle_system_proxy(),
                 "tun_mode" => feat::toggle_tun_mode(),
-                "copy_env" => feat::copy_clash_env(),
+                "copy_env_sh" => feat::copy_clash_env("sh"),
+                #[cfg(target_os = "windows")]
+                "copy_env_cmd" => feat::copy_clash_env("cmd"),
+                #[cfg(target_os = "windows")]
+                "copy_env_ps" => feat::copy_clash_env("ps"),
                 "open_app_dir" => crate::log_err!(cmds::open_app_dir()),
                 "open_core_dir" => crate::log_err!(cmds::open_core_dir()),
                 "open_logs_dir" => crate::log_err!(cmds::open_logs_dir()),

+ 12 - 3
src-tauri/src/feat.rs

@@ -332,10 +332,19 @@ async fn update_core_config() -> Result<()> {
 }
 
 /// copy env variable
-pub fn copy_clash_env() {
+pub fn copy_clash_env(option: &str) {
     let port = { Config::clash().data().get_client_info().port };
-    let text = format!("export https_proxy=http://127.0.0.1:{port} http_proxy=http://127.0.0.1:{port} all_proxy=socks5://127.0.0.1:{port}");
+    
+    let sh = format!("export https_proxy=http://127.0.0.1:{port} http_proxy=http://127.0.0.1:{port} all_proxy=socks5://127.0.0.1:{port}");
+    let cmd: String = format!("set http_proxy=http://127.0.0.1:{port} \n set https_proxy=http://127.0.0.1:{port}");
+    let ps: String = format!("$env:HTTP_PROXY=\"http://127.0.0.1:{port}\"; $env:HTTPS_PROXY=\"http://127.0.0.1:{port}\"");
 
     let mut cliboard = Clipboard::new();
-    cliboard.write_text(text);
+
+    match option {
+        "sh" => cliboard.write_text(sh),
+        "cmd" => cliboard.write_text(cmd),
+        "ps" => cliboard.write_text(ps),
+        _ => log::error!(target: "app", "copy_clash_env: Invalid option! {option}"),
+    }
 }