diff --git a/src-tauri/src/config.rs b/src-tauri/src/config.rs index d51c440..948fc76 100644 --- a/src-tauri/src/config.rs +++ b/src-tauri/src/config.rs @@ -2,29 +2,30 @@ use serde::{Deserialize, Serialize}; use std::path::PathBuf; use std::string::String; +// Config may not exist, or may be old, so it's okay if these are optional #[derive(Serialize, Deserialize, Debug)] pub struct Configuration { - pub toggle_grasscutter: bool, - pub game_install_path: String, - pub grasscutter_with_game: bool, - pub grasscutter_path: String, - pub java_path: String, - pub close_action: u64, - pub startup_launch: bool, - pub last_ip: String, - pub last_port: String, - pub language: String, - pub customBackground: String, - pub cert_generated: bool, - pub theme: String, - pub https_enabled: bool, - pub debug_enabled: bool, - pub patch_rsa: bool, - pub use_internal_proxy: bool, - pub wipe_login: bool, - pub horny_mode: bool, - pub auto_mongodb: bool, - pub un_elevated: bool, + pub toggle_grasscutter: Option, + pub game_install_path: Option, + pub grasscutter_with_game: Option, + pub grasscutter_path: Option, + pub java_path: Option, + pub close_action: Option, + pub startup_launch: Option, + pub last_ip: Option, + pub last_port: Option, + pub language: Option, + pub customBackground: Option, + pub cert_generated: Option, + pub theme: Option, + pub https_enabled: Option, + pub debug_enabled: Option, + pub patch_rsa: Option, + pub use_internal_proxy: Option, + pub wipe_login: Option, + pub horny_mode: Option, + pub auto_mongodb: Option, + pub un_elevated: Option, } pub fn config_path() -> PathBuf { @@ -37,7 +38,7 @@ pub fn config_path() -> PathBuf { pub fn get_config() -> Configuration { let path = config_path(); - let config = std::fs::read_to_string(path).unwrap(); + let config = std::fs::read_to_string(path).unwrap_or("{}".to_string()); let config: Configuration = serde_json::from_str(&config).unwrap(); config diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a4d22fc..9bb1cda 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -105,15 +105,17 @@ async fn parse_args(inp: &Vec) -> Result { patch::patch_game().await; } - if args.value_of("non-elevated-game")? { - system_helpers::run_un_elevated(game_path.to_string(), Some(game_args)) - } else { - system_helpers::run_program(game_path.to_string(), Some(game_args)) + if game_path.is_some() { + if args.value_of("non-elevated-game")? { + system_helpers::run_un_elevated(game_path.unwrap().to_string(), Some(game_args)) + } else { + system_helpers::run_program(game_path.unwrap().to_string(), Some(game_args)) + } } } - if args.value_of("server")? { - let server_jar = config.grasscutter_path; + if args.value_of("server")? && config.grasscutter_path.is_some() && config.java_path.is_some() { + let server_jar = config.grasscutter_path.unwrap(); let mut server_path = server_jar.clone(); // Strip jar name from path if server_path.contains('/') { @@ -124,7 +126,7 @@ async fn parse_args(inp: &Vec) -> Result { let len = server_jar.rfind('\\').unwrap(); server_path.truncate(len); } - let java_path = config.java_path; + let java_path = config.java_path.unwrap(); system_helpers::run_jar(server_jar, server_path.to_string(), java_path); } @@ -155,7 +157,7 @@ fn main() -> Result<(), ArgsError> { println!("You running as a non-elevated user. Some stuff will almost definitely not work."); println!("==============================================================================="); - reopen_as_admin(); + //reopen_as_admin(); } // Setup datadir/cultivation just in case something went funky and it wasn't made diff --git a/src-tauri/src/patch.rs b/src-tauri/src/patch.rs index 6399c5e..789eaef 100644 --- a/src-tauri/src/patch.rs +++ b/src-tauri/src/patch.rs @@ -52,7 +52,12 @@ pub async fn unpatch_game() -> bool { pub async fn get_game_rsa_path() -> Option { let config = config::get_config(); - let mut game_folder = PathBuf::from(config.game_install_path); + + if config.game_install_path.is_none() { + return None; + } + + let mut game_folder = PathBuf::from(config.game_install_path.unwrap()); game_folder.pop(); Some(format!("{}/", game_folder.to_str().unwrap()).replace('\\', "/"))