refactor(notice): unify showNotice usage

This commit is contained in:
Slinetrac
2025-11-02 14:22:36 +08:00
Unverified
parent 4683fc7bf1
commit 9b455d740d
51 changed files with 328 additions and 168 deletions

View File

@@ -21,7 +21,7 @@ import { closeAllConnections, upgradeCore } from "tauri-plugin-mihomo-api";
import { BaseDialog, DialogRef } from "@/components/base";
import { useVerge } from "@/hooks/use-verge";
import { changeClashCore, restartCore } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
const VALID_CORE = [
{ name: "Mihomo", core: "verge-mihomo", chip: "Release Version" },
@@ -54,7 +54,7 @@ export function ClashCoreViewer({ ref }: { ref?: Ref<DialogRef> }) {
const errorMsg = await changeClashCore(core);
if (errorMsg) {
showNotice("error", errorMsg);
showNotice("error", createRawNotice(errorMsg));
setChangingCore(null);
return;
}
@@ -67,7 +67,7 @@ export function ClashCoreViewer({ ref }: { ref?: Ref<DialogRef> }) {
}, 500);
} catch (err: any) {
setChangingCore(null);
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
});
@@ -75,11 +75,11 @@ export function ClashCoreViewer({ ref }: { ref?: Ref<DialogRef> }) {
try {
setRestarting(true);
await restartCore();
showNotice("success", t(`Clash Core Restarted`));
showNotice("success", { i18nKey: "Clash Core Restarted" });
setRestarting(false);
} catch (err: any) {
setRestarting(false);
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
});
@@ -88,14 +88,14 @@ export function ClashCoreViewer({ ref }: { ref?: Ref<DialogRef> }) {
setUpgrading(true);
await upgradeCore();
setUpgrading(false);
showNotice("success", t(`Core Version Updated`));
showNotice("success", { i18nKey: "Core Version Updated" });
} catch (err: any) {
setUpgrading(false);
const errMsg = err.response?.data?.message || err.toString();
const showMsg = errMsg.includes("already using latest version")
? "Already Using Latest Core Version"
: errMsg;
showNotice("error", t(showMsg));
showNotice("error", { i18nKey: showMsg, fallback: showMsg });
}
});

View File

@@ -18,7 +18,7 @@ import { useTranslation } from "react-i18next";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { useClashInfo } from "@/hooks/use-clash";
import { useVerge } from "@/hooks/use-verge";
import { showNotice } from "@/services/noticeService";
import { createPrefixedNotice, showNotice } from "@/services/noticeService";
export function ControllerViewer({ ref }: { ref?: Ref<DialogRef> }) {
const { t } = useTranslation();
@@ -56,20 +56,18 @@ export function ControllerViewer({ ref }: { ref?: Ref<DialogRef> }) {
// 如果启用了外部控制器,则保存控制器地址和密钥
if (enableController) {
if (!controller.trim()) {
showNotice(
"error",
t(
showNotice("error", {
i18nKey:
"components.settings.externalController.messages.addressRequired",
),
);
});
return;
}
if (!secret.trim()) {
showNotice(
"error",
t("components.settings.externalController.messages.secretRequired"),
);
showNotice("error", {
i18nKey:
"components.settings.externalController.messages.secretRequired",
});
return;
}
@@ -79,12 +77,15 @@ export function ControllerViewer({ ref }: { ref?: Ref<DialogRef> }) {
await patchInfo({ "external-controller": "" });
}
showNotice("success", t("Configuration saved successfully"));
showNotice("success", { i18nKey: "Configuration saved successfully" });
setOpen(false);
} catch (err: any) {
const message = err?.message || err?.toString?.();
showNotice(
"error",
err.message || t("Failed to save configuration"),
message
? createPrefixedNotice(t("Failed to save configuration"), message)
: { i18nKey: "Failed to save configuration" },
4000,
);
} finally {
@@ -101,10 +102,9 @@ export function ControllerViewer({ ref }: { ref?: Ref<DialogRef> }) {
setTimeout(() => setCopySuccess(null));
} catch (err) {
console.warn("[ControllerViewer] copy to clipboard failed:", err);
showNotice(
"error",
t("components.settings.externalController.messages.copyFailed"),
);
showNotice("error", {
i18nKey: "components.settings.externalController.messages.copyFailed",
});
}
},
);

View File

@@ -29,7 +29,11 @@ import MonacoEditor from "react-monaco-editor";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { useClash } from "@/hooks/use-clash";
import { showNotice } from "@/services/noticeService";
import {
createPrefixedNotice,
createRawNotice,
showNotice,
} from "@/services/noticeService";
import { useThemeMode } from "@/services/states";
import getSystem from "@/utils/get-system";
@@ -424,9 +428,9 @@ export function DnsViewer({ ref }: { ref?: Ref<DialogRef> }) {
skipYamlSyncRef.current = true;
updateValuesFromConfig(parsedYaml);
} catch {
showNotice("error", t("Invalid YAML format"));
showNotice("error", { i18nKey: "Invalid YAML format" });
}
}, [yamlContent, t, updateValuesFromConfig]);
}, [yamlContent, updateValuesFromConfig]);
useEffect(() => {
if (skipYamlSyncRef.current) {
@@ -549,7 +553,10 @@ export function DnsViewer({ ref }: { ref?: Ref<DialogRef> }) {
showNotice(
"error",
t("DNS configuration error") + ": " + cleanErrorMsg,
createPrefixedNotice(
`${t("DNS configuration error")}:`,
cleanErrorMsg,
),
);
return;
}
@@ -561,9 +568,9 @@ export function DnsViewer({ ref }: { ref?: Ref<DialogRef> }) {
}
setOpen(false);
showNotice("success", t("DNS settings saved"));
showNotice("success", { i18nKey: "DNS settings saved" });
} catch (err: any) {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
});

View File

@@ -140,10 +140,12 @@ export const HeaderConfiguration = forwardRef<ClashHeaderConfigingRef>(
manual: true,
onSuccess: () => {
setOpen(false);
showNotice("success", t("Configuration saved successfully"));
showNotice("success", {
i18nKey: "Configuration saved successfully",
});
},
onError: () => {
showNotice("error", t("Failed to save configuration"));
showNotice("error", { i18nKey: "Failed to save configuration" });
},
},
);

View File

@@ -5,7 +5,7 @@ import { useTranslation } from "react-i18next";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { useVerge } from "@/hooks/use-verge";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import { HotkeyInput } from "./hotkey-input";
@@ -82,7 +82,7 @@ export const HotkeyViewer = forwardRef<DialogRef>((props, ref) => {
});
setOpen(false);
} catch (err: any) {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
});

View File

@@ -23,7 +23,7 @@ import { DEFAULT_HOVER_DELAY } from "@/components/proxy/proxy-group-navigator";
import { useVerge } from "@/hooks/use-verge";
import { useWindowDecorations } from "@/hooks/use-window";
import { copyIconFile, getAppDir } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
import { GuardState } from "./guard-state";
@@ -104,7 +104,7 @@ export const LayoutViewer = forwardRef<DialogRef>((_, ref) => {
const onSwitchFormat = (_e: any, value: boolean) => value;
const onError = (err: any) => {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
};
const onChangeData = (patch: Partial<IVergeConfig>) => {
mutateVerge({ ...verge, ...patch }, false);

View File

@@ -15,7 +15,7 @@ import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useVerge } from "@/hooks/use-verge";
import { entry_lightweight_mode } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
export function LiteModeViewer({ ref }: { ref?: Ref<DialogRef> }) {
const { t } = useTranslation();
@@ -46,7 +46,7 @@ export function LiteModeViewer({ ref }: { ref?: Ref<DialogRef> }) {
});
setOpen(false);
} catch (err: any) {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
});

View File

@@ -14,7 +14,7 @@ import { useTranslation } from "react-i18next";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useVerge } from "@/hooks/use-verge";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
export const MiscViewer = forwardRef<DialogRef>((props, ref) => {
const { t } = useTranslation();
@@ -70,7 +70,7 @@ export const MiscViewer = forwardRef<DialogRef>((props, ref) => {
});
setOpen(false);
} catch (err: any) {
showNotice("error", err.toString());
showNotice("error", createRawNotice(err.toString()));
}
});

View File

@@ -109,8 +109,6 @@ const AddressDisplay = ({
label: string;
content: string;
}) => {
const { t } = useTranslation();
return (
<Box
sx={{
@@ -135,7 +133,7 @@ const AddressDisplay = ({
size="small"
onClick={async () => {
await writeText(content);
showNotice("success", t("Copy Success"));
showNotice("success", { i18nKey: "Copy Success" });
}}
>
<ContentCopyRounded sx={{ fontSize: "18px" }} />

View File

@@ -36,7 +36,7 @@ import {
getSystemProxy,
patchVergeConfig,
} from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
const sleep = (ms: number) =>
@@ -161,7 +161,7 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
]);
}
} catch (err: any) {
showNotice("error", err.toString());
showNotice("error", createRawNotice(err.toString()));
}
};
@@ -410,7 +410,7 @@ export const SysproxyViewer = forwardRef<DialogRef>((props, ref) => {
} catch (err: any) {
console.error("配置保存失败:", err);
mutateVerge();
showNotice("error", err.toString());
showNotice("error", createRawNotice(err.toString()));
// setOpen(true);
}
});

View File

@@ -16,7 +16,7 @@ import { BaseDialog, DialogRef } from "@/components/base";
import { EditorViewer } from "@/components/profile/editor-viewer";
import { useVerge } from "@/hooks/use-verge";
import { defaultDarkTheme, defaultTheme } from "@/pages/_theme";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
export function ThemeViewer(props: { ref?: React.Ref<DialogRef> }) {
const { ref } = props;
@@ -51,7 +51,7 @@ export function ThemeViewer(props: { ref?: React.Ref<DialogRef> }) {
await patchVerge({ theme_setting: theme });
setOpen(false);
} catch (err: any) {
showNotice("error", err.toString());
showNotice("error", createRawNotice(err.toString()));
}
});

View File

@@ -15,7 +15,7 @@ import { useTranslation } from "react-i18next";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { useClash } from "@/hooks/use-clash";
import { enhanceProfiles } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
import { StackModeSwitch } from "./stack-mode-switch";
@@ -80,13 +80,15 @@ export function TunViewer({ ref }: { ref?: Ref<DialogRef> }) {
);
try {
await enhanceProfiles();
showNotice("success", t("components.settings.tun.messages.applied"));
showNotice("success", {
i18nKey: "components.settings.tun.messages.applied",
});
} catch (err: any) {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
setOpen(false);
} catch (err: any) {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
});

View File

@@ -12,7 +12,7 @@ import useSWR from "swr";
import { BaseDialog, DialogRef } from "@/components/base";
import { useListen } from "@/hooks/use-listen";
import { portableFlag } from "@/pages/_layout";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import { useSetUpdateState, useUpdateState } from "@/services/states";
import { checkUpdateSafe as checkUpdate } from "@/services/update";
@@ -95,7 +95,7 @@ export function UpdateViewer({ ref }: { ref?: Ref<DialogRef> }) {
await updateInfo.downloadAndInstall();
await relaunch();
} catch (err: any) {
showNotice("error", err?.message || err.toString());
showNotice("error", createRawNotice(err?.message || err.toString()));
} finally {
setUpdateState(false);
if (progressListener) {

View File

@@ -8,7 +8,7 @@ import { BaseDialog, BaseEmpty, DialogRef } from "@/components/base";
import { useClashInfo } from "@/hooks/use-clash";
import { useVerge } from "@/hooks/use-verge";
import { openWebUrl } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import { WebUIItem } from "./web-ui-item";
@@ -92,7 +92,7 @@ export function WebUIViewer({ ref }: { ref?: Ref<DialogRef> }) {
await openWebUrl(url);
} catch (e: any) {
showNotice("error", e.message || e.toString());
showNotice("error", createRawNotice(e.message || e.toString()));
}
});

View File

@@ -11,7 +11,7 @@ import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useClash } from "@/hooks/use-clash";
import { useVerge } from "@/hooks/use-verge";
import { invoke_uwp_tool } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import { useClashLog } from "@/services/states";
import getSystem from "@/utils/get-system";
@@ -72,7 +72,7 @@ const SettingClash = ({ onError }: Props) => {
t("components.settings.clash.messages.geoDataUpdated"),
);
} catch (err: any) {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
};
@@ -89,7 +89,7 @@ const SettingClash = ({ onError }: Props) => {
} catch (err: any) {
setDnsSettingsEnabled(!enable);
localStorage.setItem("dns_settings_enabled", String(!enable));
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
await patchVerge({ enable_dns_settings: !enable }).catch(() => {});
throw err;
}

View File

@@ -13,7 +13,7 @@ import {
openDevTools,
openLogsDir,
} from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { createRawNotice, showNotice } from "@/services/noticeService";
import { checkUpdateSafe as checkUpdate } from "@/services/update";
import { version } from "@root/package.json";
@@ -55,7 +55,7 @@ const SettingVergeAdvanced = ({ onError: _ }: Props) => {
updateRef.current?.open();
}
} catch (err: any) {
showNotice("error", err.message || err.toString());
showNotice("error", createRawNotice(err.message || err.toString()));
}
};