feat: open Splatnet3 in app

main
imspace 2023-03-09 07:04:14 +08:00
parent f8af485c90
commit 6d5b0f6bb2
2 changed files with 36 additions and 3 deletions

View File

@ -35,7 +35,31 @@ function detectAndInject() {
detectAndInject();
"#;
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
#[tauri::command]
async fn open_splatnet(app: tauri::AppHandle, gtoken: String) -> Option<()> {
let _window = WindowBuilder::new(
&app,
"splatnet3",
tauri::WindowUrl::App("https://api.lp1.av5ja.srv.nintendo.net/".into()),
)
.title("Splatnet3")
.center()
.inner_size(1040.0, 960.0)
.initialization_script(&format!(
r##"
const gtoken = "_gtoken={gtoken}";
if (!document.cookie.includes(gtoken)) {{
document.cookie = gtoken;
window.location.reload();
}}
"##
))
.build()
.ok()?;
None
}
#[tauri::command]
async fn open_login_window(app: tauri::AppHandle, url: String) -> Option<String> {
let encoded = urlencoding::encode(&url);
@ -79,7 +103,7 @@ async fn open_login_window(app: tauri::AppHandle, url: String) -> Option<String>
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![open_login_window])
.invoke_handler(tauri::generate_handler![open_login_window, open_splatnet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

View File

@ -1,3 +1,4 @@
import { invoke } from '@tauri-apps/api';
import { ErrorContent } from 'components/ErrorContent';
import { Loading } from 'components/Loading';
import { LogPanel, RunPanel } from 'components/RunPanel';
@ -10,7 +11,7 @@ import { getConfig, getProfile } from 'services/config';
import { composeLoadable } from 'utils/composeLoadable';
export const Home: React.FC = () => {
let { loading, error, retry } = composeLoadable({
let { loading, error, retry, result } = composeLoadable({
config: usePromise(getConfig),
profile: usePromise(() => getProfile(0)),
});
@ -27,6 +28,13 @@ export const Home: React.FC = () => {
<ErrorContent error={error} retry={retry} />
</>
}
const gtoken = result?.profile.state.loginState?.gToken
const onOpenSplatnet3 = async () => {
await invoke('open_splatnet', {
gtoken,
})
};
return <div className='flex p-2 w-full h-full gap-2'>
<div className='max-w-full md:max-w-sm flex-auto'>
@ -35,6 +43,7 @@ export const Home: React.FC = () => {
<RunPanel />
<Link to='/settings' className='btn'>{t('设置')}</Link>
<a className='btn' href={STAT_INK} target='_blank' rel='noreferrer'>{t('前往 stat.ink')}</a>
<button className='btn' onClick={onOpenSplatnet3}>{t('打开鱿鱼圈3')}</button>
</div>
</div>
<LogPanel className='hidden sm:block flex-1' />