diff --git a/gui/src-tauri/src/main.rs b/gui/src-tauri/src/main.rs index d08cb05..df0d19a 100644 --- a/gui/src-tauri/src/main.rs +++ b/gui/src-tauri/src/main.rs @@ -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 { let encoded = urlencoding::encode(&url); @@ -79,7 +103,7 @@ async fn open_login_window(app: tauri::AppHandle, url: String) -> Option 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"); } diff --git a/gui/src/pages/Home.tsx b/gui/src/pages/Home.tsx index ce0ae85..9e666e5 100644 --- a/gui/src/pages/Home.tsx +++ b/gui/src/pages/Home.tsx @@ -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 = () => { } + const gtoken = result?.profile.state.loginState?.gToken + const onOpenSplatnet3 = async () => { + await invoke('open_splatnet', { + gtoken, + }) + }; + return
@@ -35,6 +43,7 @@ export const Home: React.FC = () => { {t('设置')} {t('前往 stat.ink')} +