This commit is contained in:
Kasserrr
2025-08-30 02:01:00 +08:00
4 changed files with 129 additions and 97 deletions
+5 -1
View File
@@ -29,7 +29,11 @@ import {
} from "@mui/icons-material";
import { useNavigate } from "react-router-dom";
import { EnhancedCard } from "@/components/home/enhanced-card";
import { updateProxy, deleteConnection, syncTrayProxySelection } from "@/services/cmds";
import {
updateProxy,
deleteConnection,
syncTrayProxySelection,
} from "@/services/cmds";
import delayManager from "@/services/delay";
import { useVerge } from "@/hooks/use-verge";
import { useAppData } from "@/providers/app-data-provider";
+15 -6
View File
@@ -344,7 +344,7 @@ export const ProxyGroups = (props: Props) => {
const { name, now } = group;
console.log(`[ProxyGroups] GUI代理切换: ${name} -> ${proxy.name}`);
try {
// 1. 保存到selected中 (先保存本地状态)
if (current) {
@@ -364,7 +364,9 @@ export const ProxyGroups = (props: Props) => {
// 2. 使用统一的同步命令更新代理并同步状态
await updateProxyAndSync(name, proxy.name);
console.log(`[ProxyGroups] 代理和状态同步完成: ${name} -> ${proxy.name}`);
console.log(
`[ProxyGroups] 代理和状态同步完成: ${name} -> ${proxy.name}`,
);
// 3. 刷新前端显示
onProxies();
@@ -379,18 +381,25 @@ export const ProxyGroups = (props: Props) => {
});
});
}
} catch (error) {
console.error(`[ProxyGroups] 代理切换失败: ${name} -> ${proxy.name}`, error);
console.error(
`[ProxyGroups] 代理切换失败: ${name} -> ${proxy.name}`,
error,
);
// 如果统一命令失败,回退到原来的方式
try {
await updateProxy(name, proxy.name);
await forceRefreshProxies();
await syncTrayProxySelection();
onProxies();
console.log(`[ProxyGroups] 代理切换回退成功: ${name} -> ${proxy.name}`);
console.log(
`[ProxyGroups] 代理切换回退成功: ${name} -> ${proxy.name}`,
);
} catch (fallbackError) {
console.error(`[ProxyGroups] 代理切换回退也失败: ${name} -> ${proxy.name}`, fallbackError);
console.error(
`[ProxyGroups] 代理切换回退也失败: ${name} -> ${proxy.name}`,
fallbackError,
);
onProxies(); // 至少刷新显示
}
}
+38 -11
View File
@@ -240,7 +240,7 @@ export const AppDataProvider = ({
// 监听强制代理刷新事件(托盘代理切换立即刷新)
const handleForceRefreshProxies = () => {
console.log("[AppDataProvider] 强制代理刷新事件");
// 立即刷新,无延迟,无防抖
forceRefreshProxies()
.then(() => {
@@ -263,9 +263,18 @@ export const AppDataProvider = ({
// 使用 Tauri 事件监听器替代 window 事件监听器
const setupTauriListeners = async () => {
try {
const unlistenClash = await listen("verge://refresh-clash-config", handleRefreshClash);
const unlistenProxy = await listen("verge://refresh-proxy-config", handleRefreshProxy);
const unlistenForceRefresh = await listen("verge://force-refresh-proxies", handleForceRefreshProxies);
const unlistenClash = await listen(
"verge://refresh-clash-config",
handleRefreshClash,
);
const unlistenProxy = await listen(
"verge://refresh-proxy-config",
handleRefreshProxy,
);
const unlistenForceRefresh = await listen(
"verge://force-refresh-proxies",
handleForceRefreshProxies,
);
return () => {
unlistenClash();
@@ -274,16 +283,34 @@ export const AppDataProvider = ({
};
} catch (error) {
console.warn("[AppDataProvider] 设置 Tauri 事件监听器失败:", error);
// 降级到 window 事件监听器
window.addEventListener("verge://refresh-clash-config", handleRefreshClash);
window.addEventListener("verge://refresh-proxy-config", handleRefreshProxy);
window.addEventListener("verge://force-refresh-proxies", handleForceRefreshProxies);
window.addEventListener(
"verge://refresh-clash-config",
handleRefreshClash,
);
window.addEventListener(
"verge://refresh-proxy-config",
handleRefreshProxy,
);
window.addEventListener(
"verge://force-refresh-proxies",
handleForceRefreshProxies,
);
return () => {
window.removeEventListener("verge://refresh-clash-config", handleRefreshClash);
window.removeEventListener("verge://refresh-proxy-config", handleRefreshProxy);
window.removeEventListener("verge://force-refresh-proxies", handleForceRefreshProxies);
window.removeEventListener(
"verge://refresh-clash-config",
handleRefreshClash,
);
window.removeEventListener(
"verge://refresh-proxy-config",
handleRefreshProxy,
);
window.removeEventListener(
"verge://force-refresh-proxies",
handleForceRefreshProxies,
);
};
}
};