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 } ` } < / L i n k >
< / D i v i d e r >
2023-09-27 15:39:57 +08:00
< Alert severity = "error" > { error } < / A l e r t >
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
< / L i n k >
2023-09-27 15:39:57 +08:00
{ / * < L i n k h r e f = { p r o c e s s . e n v . R E A C T _ A P P _ U S E R S C R I P T _ D O W N L O A D U R L 2 } >
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
< / L i n k >
2023-09-27 15:39:57 +08:00
{ / * < L i n k h r e f = { p r o c e s s . e n v . R E A C T _ A P P _ U S E R S C R I P T _ I O S _ D O W N L O A D U R L 2 } >
Install / Update Userscript for iOS Safari 2
< /Link> */ }
2023-08-29 11:53:02 +08:00
< / S t a c k >
2023-08-09 17:33:51 +08:00
< / c e n t e r >
) ;
}
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 } ` } < / L i n k >
< / D i v i d e r >
2023-08-09 20:51:43 +08:00
< CircularProgress / >
2023-08-09 17:33:51 +08:00
< / c e n t e r >
) ;
}
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 / > } / >
< / R o u t e >
< / R o u t e s >
< / H a s h R o u t e r >
< / A l e r t P r o v i d e r >
2023-08-05 20:11:02 +08:00
< / T h e m e P r o v i d e r >
2023-08-30 18:05:37 +08:00
< / S e t t i n g P r o v i d e r >
2023-07-20 13:45:41 +08:00
) ;
}