diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index c3fdbef..dc611ad 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -6,7 +6,7 @@ pub mod authentification; pub mod launcher; -use std::sync::{Mutex, Arc}; +use std::sync::Mutex; use authentification::{Authentification, Prompt, GameProfile}; use anyhow::Result; @@ -27,47 +27,62 @@ async fn login(app: tauri::AppHandle, _window: tauri::Window, state: tauri::Stat match result { Ok(val) => { let name = val.name.clone(); - state.lock().unwrap().0.replace(val); - Ok(format!("Hello {}", name)) + match state.lock() { + Ok(mut game_profile) => { + game_profile.0 = Some(val); + Ok(format!("Hello {}", name)) + }, + Err(err) => { + Err(err.to_string()) + } + } + }, Err(err) => Err(err.to_string()) } } #[tauri::command] -async fn download(app: tauri::AppHandle, _window: tauri::Window, state: tauri::State<'_, Mutex>) -> Result { +async fn download(state: tauri::State<'_, Mutex>) -> Result { if let Some(base_dir) = BaseDirs::new() { let data_folder = base_dir.data_dir().join(".altarik"); let root_path = data_folder.as_path(); match state.lock() { Ok(game_profile) => { - let game_profile = game_profile.0.as_ref().unwrap(); - let java_path = root_path.join("java"); - let opts = ClientOptions { - authorization: &game_profile, - root_path, - java_path: &java_path.as_path(), - version_number: "1.19.4".to_string(), - version_type: launcher::VersionType::Release, - memory_min: "2G".to_string(), - memory_max: "4G".to_string(), - }; - let client = MinecraftClient::new(&opts); - match client { - Ok(mut client) => { - match client.download_assets() { - Ok(_) => { - Ok("Content downloaded".to_string()) + match &game_profile.0 { + Some(game_profile) => { + let java_path = root_path.join("java"); + let opts = ClientOptions { + authorization: game_profile, + root_path, + java_path: &java_path.as_path(), + version_number: "1.19.4".to_string(), + version_type: launcher::VersionType::Release, + memory_min: "2G".to_string(), + memory_max: "4G".to_string(), + }; + let client = MinecraftClient::new(&opts); + match client { + Ok(mut client) => { + match client.download_assets() { + Ok(_) => { + Ok("Content downloaded".to_string()) + }, + Err(err) => { + Err(err.to_string()) + } + } }, Err(err) => { Err(err.to_string()) } } }, - Err(err) => { - Err(err.to_string()) + None => { + Err("You're not connected".to_string()) } } + }, Err(err) => { Err(err.to_string()) @@ -82,7 +97,7 @@ async fn download(app: tauri::AppHandle, _window: tauri::Window, state: tauri::S #[tokio::main] async fn main() { tauri::Builder::default() - .manage(Arc::new(CustomState(None))) + .manage(Mutex::new(CustomState(None))) .invoke_handler(tauri::generate_handler![greet, login, download]) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src/components/login.js b/src/components/login.js index 82b2e10..e2294d2 100644 --- a/src/components/login.js +++ b/src/components/login.js @@ -22,7 +22,14 @@ export default { } }, download (e) { - + e.preventDefault() + if(!this.hideDownloadButton) { + this.invoke("download", {}).then(value => { + this.greet_message = value + }).catch(err => { + this.greet_message = "Error: " + err + }) + } }, }, props: {