feat: open Splatnet3 in app
parent
f8af485c90
commit
6d5b0f6bb2
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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' />
|
||||
|
|
|
|||
Loading…
Reference in New Issue