Files
kiss-translator/src/views/Options/index.js

137 lines
4.4 KiB
JavaScript
Raw Normal View History

2023-08-05 20:11:02 +08:00
import { Routes, Route, HashRouter } from "react-router-dom";
2023-07-20 13:45:41 +08:00
import About from "./About";
import Rules from "./Rules";
import Setting from "./Setting";
import Layout from "./Layout";
2023-07-31 15:08:51 +08:00
import SyncSetting from "./SyncSetting";
2023-08-30 18:05:37 +08:00
import { SettingProvider } from "../../hooks/Setting";
2023-08-05 20:11:02 +08:00
import ThemeProvider from "../../hooks/Theme";
2023-08-09 17:33:51 +08:00
import { useEffect, useState } from "react";
2023-08-30 18:05:37 +08:00
import { isGm } from "../../libs/client";
2023-08-09 17:33:51 +08:00
import { sleep } from "../../libs/utils";
2023-08-09 20:51:43 +08:00
import CircularProgress from "@mui/material/CircularProgress";
2023-08-31 13:38:06 +08:00
import { trySyncSettingAndRules } from "../../libs/sync";
2023-08-20 23:30:08 +08:00
import { AlertProvider } from "../../hooks/Alert";
2023-08-29 11:53:02 +08:00
import Link from "@mui/material/Link";
import Divider from "@mui/material/Divider";
import Stack from "@mui/material/Stack";
2023-09-02 15:54:51 +08:00
import { adaptScript } from "../../libs/gm";
import Alert from "@mui/material/Alert";
2023-09-06 00:25:46 +08:00
import Apis from "./Apis";
2023-09-08 16:56:00 +08:00
import Webfix from "./Webfix";
2023-09-13 15:53:40 +08:00
import InputSetting from "./InputSetting";
2023-10-23 18:02:42 +08:00
import Tranbox from "./Tranbox";
2023-07-20 13:45:41 +08:00
export default function Options() {
2023-09-02 15:54:51 +08:00
const [error, setError] = useState("");
2023-08-09 17:33:51 +08:00
const [ready, setReady] = useState(false);
useEffect(() => {
(async () => {
2023-08-17 13:27:22 +08:00
if (isGm) {
// 等待GM注入
let i = 0;
for (;;) {
2023-09-02 15:54:51 +08:00
if (window?.APP_INFO?.name === process.env.REACT_APP_NAME) {
const { version, eventName } = window.APP_INFO;
// 检查版本是否一致
if (version !== process.env.REACT_APP_VERSION) {
setError(
2023-09-27 15:39:57 +08:00
`The version of the local script(v${version}) is not the latest version(v${process.env.REACT_APP_VERSION}). 本地脚本之版本(v${version})非最新版(v${process.env.REACT_APP_VERSION})。`
2023-09-02 15:54:51 +08:00
);
break;
}
if (eventName) {
// 注入GM接口
adaptScript(eventName);
}
2023-08-31 13:38:06 +08:00
// 同步数据
await trySyncSettingAndRules();
2023-08-17 13:27:22 +08:00
setReady(true);
break;
}
2023-08-09 17:33:51 +08:00
2023-08-17 13:27:22 +08:00
if (++i > 8) {
2023-09-27 15:39:57 +08:00
setError(
"Time out. Please confirm whether to install or enable KISS Translator GreaseMonkey script? 连接超时,请检查是否安装或启用简约翻译油猴脚本。"
);
2023-08-17 13:27:22 +08:00
break;
}
2023-08-09 20:53:37 +08:00
2023-08-17 13:27:22 +08:00
await sleep(1000);
}
2023-08-31 13:38:06 +08:00
} else {
// 同步数据
await trySyncSettingAndRules();
setReady(true);
2023-08-09 17:33:51 +08:00
}
})();
}, []);
if (error) {
return (
<center>
2023-08-29 11:53:02 +08:00
<Divider>
<Link
href={process.env.REACT_APP_HOMEPAGE}
>{`KISS Translator v${process.env.REACT_APP_VERSION}`}</Link>
</Divider>
2023-09-27 15:39:57 +08:00
<Alert severity="error">{error}</Alert>
2023-08-29 11:53:02 +08:00
<Stack spacing={2}>
<Link href={process.env.REACT_APP_USERSCRIPT_DOWNLOADURL}>
2023-09-27 15:39:57 +08:00
Install/Update Userscript for Tampermonkey/Violentmonkey
2023-08-29 11:53:02 +08:00
</Link>
2023-09-27 15:39:57 +08:00
{/* <Link href={process.env.REACT_APP_USERSCRIPT_DOWNLOADURL2}>
Install/Update Userscript for Tampermonkey/Violentmonkey 2
</Link> */}
2023-08-31 21:21:36 +08:00
<Link href={process.env.REACT_APP_USERSCRIPT_IOS_DOWNLOADURL}>
2023-09-27 15:39:57 +08:00
Install/Update Userscript for iOS Safari
2023-08-29 11:53:02 +08:00
</Link>
2023-09-27 15:39:57 +08:00
{/* <Link href={process.env.REACT_APP_USERSCRIPT_IOS_DOWNLOADURL2}>
Install/Update Userscript for iOS Safari 2
</Link> */}
2023-08-29 11:53:02 +08:00
</Stack>
2023-08-09 17:33:51 +08:00
</center>
);
}
2023-08-31 13:38:06 +08:00
if (!ready) {
2023-08-09 17:33:51 +08:00
return (
<center>
2023-08-29 11:53:02 +08:00
<Divider>
<Link
href={process.env.REACT_APP_HOMEPAGE}
>{`KISS Translator v${process.env.REACT_APP_VERSION}`}</Link>
</Divider>
2023-08-09 20:51:43 +08:00
<CircularProgress />
2023-08-09 17:33:51 +08:00
</center>
);
}
2023-07-20 13:45:41 +08:00
return (
2023-08-30 18:05:37 +08:00
<SettingProvider>
2023-08-05 20:11:02 +08:00
<ThemeProvider>
2023-08-20 23:30:08 +08:00
<AlertProvider>
<HashRouter>
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Setting />} />
<Route path="rules" element={<Rules />} />
2023-09-13 15:53:40 +08:00
<Route path="input" element={<InputSetting />} />
2023-10-23 18:02:42 +08:00
<Route path="tranbox" element={<Tranbox />} />
2023-09-06 00:25:46 +08:00
<Route path="apis" element={<Apis />} />
2023-08-20 23:30:08 +08:00
<Route path="sync" element={<SyncSetting />} />
2023-09-08 16:56:00 +08:00
<Route path="webfix" element={<Webfix />} />
2023-08-20 23:30:08 +08:00
<Route path="about" element={<About />} />
</Route>
</Routes>
</HashRouter>
</AlertProvider>
2023-08-05 20:11:02 +08:00
</ThemeProvider>
2023-08-30 18:05:37 +08:00
</SettingProvider>
2023-07-20 13:45:41 +08:00
);
}