From 4c5aa7084e3529321c409f2a9c1946a499138dd7 Mon Sep 17 00:00:00 2001
From: GyDi <segydi@foxmail.com>
Date: Thu, 10 Mar 2022 02:19:06 +0800
Subject: [PATCH] fix: external-controller

---
 src-tauri/src/core/clash.rs | 10 +++++++++-
 src/services/api.ts         |  8 +++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src-tauri/src/core/clash.rs b/src-tauri/src/core/clash.rs
index 6e200d0..a8699db 100644
--- a/src-tauri/src/core/clash.rs
+++ b/src-tauri/src/core/clash.rs
@@ -258,8 +258,16 @@ impl Clash {
     config::save_yaml(temp_path.clone(), &config, Some("# Clash Verge Temp File"))?;
 
     tauri::async_runtime::spawn(async move {
+      // `external-controller` could be
+      // "127.0.0.1:9090" or ":9090"
+      // Todo: maybe it could support single port
       let server = info.server.unwrap();
-      let server = format!("http://{server}/configs");
+      let server = match server.starts_with(":") {
+        true => format!("http://127.0.0.1{server}/configs"),
+        false => format!("http://{server}/configs"),
+      };
+
+      dbg!(&server);
 
       let mut headers = HeaderMap::new();
       headers.insert("Content-Type", "application/json".parse().unwrap());
diff --git a/src/services/api.ts b/src/services/api.ts
index d5c96c3..192a8a8 100644
--- a/src/services/api.ts
+++ b/src/services/api.ts
@@ -14,7 +14,13 @@ export async function getAxios(force: boolean = false) {
   try {
     const info = await getClashInfo();
 
-    if (info?.server) server = info?.server;
+    if (info?.server) {
+      server = info.server;
+
+      // compatible width `external-controller`
+      if (server.startsWith(":")) server = `127.0.0.1${server}`;
+      else if (/^\d+$/.test(server)) server = `127.0.0.1:${server}`;
+    }
     if (info?.secret) secret = info?.secret;
   } catch {}
 
-- 
GitLab