fix: app freeze when core run by service mode and open app window (#4922)
* fix: app freeze when core run by service mode * chore: update * chore: update UPDATELOG --------- Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
This commit is contained in:
@@ -28,6 +28,7 @@
|
|||||||
- 托盘节点切换不再显示隐藏组
|
- 托盘节点切换不再显示隐藏组
|
||||||
- 修复前端 IP 检测无法使用 ipapi, ipsb 提供商
|
- 修复前端 IP 检测无法使用 ipapi, ipsb 提供商
|
||||||
- 修复MacOS 下 Tun开启后 系统代理无法打开的问题
|
- 修复MacOS 下 Tun开启后 系统代理无法打开的问题
|
||||||
|
- 修复服务模式启动时,修改、生成配置文件或重启内核可能导致页面卡死的问题
|
||||||
|
|
||||||
## v2.4.2
|
## v2.4.2
|
||||||
|
|
||||||
|
|||||||
@@ -8,39 +8,46 @@ import { getRunningMode, isAdmin, isServiceAvailable } from "@/services/cmds";
|
|||||||
*/
|
*/
|
||||||
export function useSystemState() {
|
export function useSystemState() {
|
||||||
// 获取运行模式
|
// 获取运行模式
|
||||||
const { data: runningMode = "Sidecar", mutate: mutateRunningMode } = useSWR(
|
const {
|
||||||
"getRunningMode",
|
data: runningMode = "Sidecar",
|
||||||
getRunningMode,
|
mutate: mutateRunningMode,
|
||||||
{
|
isLoading: runningModeLoading,
|
||||||
suspense: false,
|
} = useSWR("getRunningMode", getRunningMode, {
|
||||||
revalidateOnFocus: false,
|
suspense: false,
|
||||||
},
|
revalidateOnFocus: false,
|
||||||
);
|
});
|
||||||
const isSidecarMode = runningMode === "Sidecar";
|
const isSidecarMode = runningMode === "Sidecar";
|
||||||
const isServiceMode = runningMode === "Service";
|
const isServiceMode = runningMode === "Service";
|
||||||
|
|
||||||
// 获取管理员状态
|
// 获取管理员状态
|
||||||
const { data: isAdminMode = false } = useSWR("isAdmin", isAdmin, {
|
const { data: isAdminMode = false, isLoading: isAdminLoading } = useSWR(
|
||||||
suspense: false,
|
"isAdmin",
|
||||||
revalidateOnFocus: false,
|
isAdmin,
|
||||||
});
|
|
||||||
|
|
||||||
const { data: isServiceOk = false, mutate: mutateServiceOk } = useSWR(
|
|
||||||
"isServiceAvailable",
|
|
||||||
isServiceAvailable,
|
|
||||||
{
|
{
|
||||||
suspense: false,
|
suspense: false,
|
||||||
revalidateOnFocus: false,
|
revalidateOnFocus: false,
|
||||||
onSuccess: (data) => {
|
|
||||||
console.log("[useSystemState] 服务状态更新:", data);
|
|
||||||
},
|
|
||||||
onError: (error) => {
|
|
||||||
console.error("[useSystemState] 服务状态检查失败:", error);
|
|
||||||
},
|
|
||||||
isPaused: () => !isServiceMode, // 仅在非 Service 模式下暂停请求
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const {
|
||||||
|
data: isServiceOk = false,
|
||||||
|
mutate: mutateServiceOk,
|
||||||
|
isLoading: isServiceLoading,
|
||||||
|
} = useSWR(isServiceMode ? "isServiceAvailable" : null, isServiceAvailable, {
|
||||||
|
suspense: false,
|
||||||
|
revalidateOnFocus: false,
|
||||||
|
onSuccess: (data) => {
|
||||||
|
console.log("[useSystemState] 服务状态更新:", data);
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error("[useSystemState] 服务状态检查失败:", error);
|
||||||
|
},
|
||||||
|
// isPaused: () => !isServiceMode, // 仅在非 Service 模式下暂停请求
|
||||||
|
});
|
||||||
|
|
||||||
|
const isLoading =
|
||||||
|
runningModeLoading || isAdminLoading || (isServiceMode && isServiceLoading);
|
||||||
|
|
||||||
const isTunModeAvailable = isAdminMode || isServiceOk;
|
const isTunModeAvailable = isAdminMode || isServiceOk;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -52,5 +59,6 @@ export function useSystemState() {
|
|||||||
isTunModeAvailable: isTunModeAvailable,
|
isTunModeAvailable: isTunModeAvailable,
|
||||||
mutateRunningMode,
|
mutateRunningMode,
|
||||||
mutateServiceOk,
|
mutateServiceOk,
|
||||||
|
isLoading,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { showNotice } from "@/services/noticeService";
|
|||||||
|
|
||||||
export const useVerge = () => {
|
export const useVerge = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { isTunModeAvailable } = useSystemState();
|
const { isTunModeAvailable, isLoading } = useSystemState();
|
||||||
|
|
||||||
const { data: verge, mutate: mutateVerge } = useSWR(
|
const { data: verge, mutate: mutateVerge } = useSWR(
|
||||||
"getVergeConfig",
|
"getVergeConfig",
|
||||||
@@ -27,7 +27,7 @@ export const useVerge = () => {
|
|||||||
|
|
||||||
// 当服务不可用且TUN模式开启时自动关闭TUN
|
// 当服务不可用且TUN模式开启时自动关闭TUN
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (enable_tun_mode && !isTunModeAvailable) {
|
if (enable_tun_mode && !isTunModeAvailable && !isLoading) {
|
||||||
console.log("[useVerge] 检测到服务不可用,自动关闭TUN模式");
|
console.log("[useVerge] 检测到服务不可用,自动关闭TUN模式");
|
||||||
|
|
||||||
patchVergeConfig({ enable_tun_mode: false })
|
patchVergeConfig({ enable_tun_mode: false })
|
||||||
@@ -43,7 +43,7 @@ export const useVerge = () => {
|
|||||||
showNotice("error", t("Failed to disable TUN Mode automatically"));
|
showNotice("error", t("Failed to disable TUN Mode automatically"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, [isTunModeAvailable, enable_tun_mode, mutateVerge, t]);
|
}, [isTunModeAvailable, isLoading, enable_tun_mode, mutateVerge, t]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
verge,
|
verge,
|
||||||
|
|||||||
Reference in New Issue
Block a user