mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-11-08 11:02:08 +08:00
Merge branch 'dev' of https://github.com/Be-Forever223/clash-verge-rev into dev
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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(); // 至少刷新显示
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user