2023-03-03 07:03:08 -05:00
|
|
|
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
|
|
|
|
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
2023-03-05 14:38:10 -05:00
|
|
|
use std::{
|
|
|
|
|
sync::{Arc, Mutex},
|
|
|
|
|
time::Duration,
|
|
|
|
|
};
|
|
|
|
|
use tauri::{window::WindowBuilder, WindowEvent};
|
|
|
|
|
use tokio::time::sleep;
|
|
|
|
|
|
|
|
|
|
const INIT_SCRIPT: &str = r#"
|
|
|
|
|
function onSelectUserClick(e) {
|
|
|
|
|
const element = document.getElementById('authorize-switch-approval-link');
|
|
|
|
|
if (!element) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
|
|
// very hacky way...
|
|
|
|
|
window.ipc.postMessage(JSON.stringify({
|
|
|
|
|
"cmd":"tauri",
|
|
|
|
|
"callback":0,
|
|
|
|
|
"error":0,
|
|
|
|
|
"__tauriModule":"Event",
|
2023-03-05 14:50:29 -05:00
|
|
|
"message":{"cmd":"emit","event":"login","payload":{"url":element.href}}
|
2023-03-05 14:38:10 -05:00
|
|
|
}))
|
|
|
|
|
}
|
|
|
|
|
function detectAndInject() {
|
|
|
|
|
const element = document.getElementById('authorize-switch-approval-link');
|
|
|
|
|
if (!element) {
|
|
|
|
|
window.setTimeout(detectAndInject, 100);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
element.addEventListener('click', onSelectUserClick);
|
|
|
|
|
}
|
|
|
|
|
detectAndInject();
|
|
|
|
|
"#;
|
2023-03-03 07:03:08 -05:00
|
|
|
|
2023-03-08 18:04:14 -05:00
|
|
|
#[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()
|
2023-03-09 06:33:32 -05:00
|
|
|
.inner_size(400.0, 700.0)
|
2023-03-08 18:04:14 -05:00
|
|
|
.initialization_script(&format!(
|
|
|
|
|
r##"
|
|
|
|
|
const gtoken = "_gtoken={gtoken}";
|
|
|
|
|
if (!document.cookie.includes(gtoken)) {{
|
|
|
|
|
document.cookie = gtoken;
|
|
|
|
|
window.location.reload();
|
|
|
|
|
}}
|
2023-03-09 07:49:37 -05:00
|
|
|
document.addEventListener("DOMContentLoaded", () => {{
|
|
|
|
|
// insert css
|
|
|
|
|
const style = document.createElement('style');
|
|
|
|
|
style.innerHTML = `
|
|
|
|
|
[class^="App_App_"] , [class^="InAppContent_children_"] , [class^="SwipableView_swipableViewItem_"] ,
|
2023-03-09 09:08:42 -05:00
|
|
|
[class^="MainWrapper_wrapper_"] , [class^="FriendList_wrapper_"] {{
|
2023-03-09 07:49:37 -05:00
|
|
|
overflow: auto;
|
|
|
|
|
}}
|
|
|
|
|
`;
|
|
|
|
|
document.head.appendChild(style);
|
|
|
|
|
}});
|
2023-03-08 18:04:14 -05:00
|
|
|
"##
|
|
|
|
|
))
|
|
|
|
|
.build()
|
|
|
|
|
.ok()?;
|
|
|
|
|
|
|
|
|
|
None
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-03 07:03:08 -05:00
|
|
|
#[tauri::command]
|
2023-03-05 14:38:10 -05:00
|
|
|
async fn open_login_window(app: tauri::AppHandle, url: String) -> Option<String> {
|
2023-03-06 15:27:48 -05:00
|
|
|
let encoded = urlencoding::encode(&url);
|
|
|
|
|
let window = WindowBuilder::new(
|
|
|
|
|
&app,
|
|
|
|
|
"login",
|
|
|
|
|
tauri::WindowUrl::App(format!("/redirect?url={encoded}").into()),
|
|
|
|
|
)
|
|
|
|
|
.title("Login")
|
|
|
|
|
.center()
|
|
|
|
|
.inner_size(1040.0, 960.0)
|
|
|
|
|
.initialization_script(INIT_SCRIPT)
|
|
|
|
|
.build()
|
|
|
|
|
.ok()?;
|
2023-03-05 14:38:10 -05:00
|
|
|
let result: Arc<Mutex<Option<String>>> = Arc::new(Mutex::new(None));
|
|
|
|
|
let r2 = result.clone();
|
|
|
|
|
let r3 = result.clone();
|
|
|
|
|
|
|
|
|
|
window.listen("login", move |e| {
|
|
|
|
|
let mut result = r2.lock().unwrap();
|
|
|
|
|
*result = e.payload().map(ToString::to_string);
|
|
|
|
|
});
|
|
|
|
|
window.on_window_event(move |e| {
|
|
|
|
|
if let WindowEvent::Destroyed = e {
|
|
|
|
|
let mut result = r3.lock().unwrap();
|
|
|
|
|
if result.is_none() {
|
|
|
|
|
*result = Some("".to_string());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
loop {
|
|
|
|
|
sleep(Duration::from_millis(100)).await;
|
|
|
|
|
let result = result.lock().unwrap();
|
|
|
|
|
if result.is_some() {
|
|
|
|
|
window.close().ok();
|
|
|
|
|
return result.clone();
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-03-03 07:03:08 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
tauri::Builder::default()
|
2023-03-08 18:04:14 -05:00
|
|
|
.invoke_handler(tauri::generate_handler![open_login_window, open_splatnet])
|
2023-03-03 07:03:08 -05:00
|
|
|
.run(tauri::generate_context!())
|
|
|
|
|
.expect("error while running tauri application");
|
|
|
|
|
}
|