diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index babb427..78416e6 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1912,9 +1912,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", @@ -3268,11 +3268,31 @@ dependencies = [ [[package]] name = "saturn-launcher" -version = "0.1.0" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04de217dd60acb7ecc80dde0dd093aa0bb90d0ed2d3c62099fc4f1246a43bda3" dependencies = [ + "hex", + "log", + "md5", + "oauth2", + "open", + "serde", + "serde_json", + "sha1", + "ureq", + "uuid", + "walkdir", + "zip", +] + +[[package]] +name = "saturn-launcher-app" +version = "0.1.0" +dependencies = [ + "saturn-launcher", "serde", "serde_json", - "smallauncher_lib", "tauri", "tauri-build", "tauri-plugin-opener", @@ -3592,25 +3612,6 @@ version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" -[[package]] -name = "smallauncher_lib" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb1e378566b18d3c6bdf3abde36a666f24e6b6071004b3eb1b765f8b220c4dda" -dependencies = [ - "hex", - "log", - "md5", - "oauth2", - "open", - "serde", - "serde_json", - "sha1", - "ureq", - "uuid", - "zip", -] - [[package]] name = "smallvec" version = "1.15.1" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 2de4cd1..56a1179 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "saturn-launcher" +name = "saturn-launcher-app" version = "0.1.0" description = "A Tauri App" authors = ["you"] @@ -22,5 +22,5 @@ tauri = { version = "2", features = [] } tauri-plugin-opener = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" -smallauncher_lib = "0.1.1" +saturn-launcher = "0.0.7" diff --git a/src-tauri/src/env.rs b/src-tauri/src/env.rs index 859b9ac..f23f683 100644 --- a/src-tauri/src/env.rs +++ b/src-tauri/src/env.rs @@ -1,15 +1,14 @@ -use smallauncher_lib::path; use std::env; use std::path; #[cfg(target_family = "unix")] pub fn get_data_folder() -> Result { let home = env::var("HOME")?; - Ok(path!(home, ".saturn-launcher")) + Ok(path::PathBuf::from(home).join(".saturn-launcher")) } #[cfg(target_family = "windows")] pub fn get_data_folder() -> Result { let env = env::var("APPDATA")?; - Ok(path!(env, ".saturn-launcher")) + Ok(path::PathBuf::from(env).join(".saturn-launcher")) } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index eba1764..5fcfd1f 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -3,17 +3,22 @@ Resources: - https://tauri.app/develop/calling-rust/ */ -use smallauncher_lib::path; +const FABRIC_API: &str = + "https://cdn.modrinth.com/data/P7dR8mSH/versions/p96k10UR/fabric-api-0.119.4%2B1.21.4.jar"; +const LATEST_CLIENT: &str = "https://github.com/saturnclientmc/saturnclient/releases/download/0.0.4-beta2/saturnclient-0.0.4-beta2.jar"; +const CLIENT_JAR: &str = "saturnclient-0.0.4-beta2.jar"; + +use std::fs; pub mod env; #[tauri::command] fn authenticate() { let base_path = env::get_data_folder().expect("error get folder game"); - let auth_path = path!(&base_path, "auth"); + let auth_path = base_path.join("auth"); - match smallauncher_lib::auth::auth_microsoft() { - Ok(auth) => match smallauncher_lib::auth::save(&auth_path, &auth) { + match saturn_launcher::auth::auth_microsoft() { + Ok(auth) => match saturn_launcher::auth::save(&auth_path, &auth) { Ok(_) => println!("Authentication successful."), Err(e) => println!("Failed to save authentication: {:?}", e), }, @@ -23,24 +28,41 @@ fn authenticate() { #[tauri::command] fn download(version: &str) { - let base_path = env::get_data_folder().expect("error get folder game"); - let game_path = path!(&base_path, "minecraft"); - let jre_path = path!(&base_path, "jre"); - println!("Downloading {version}"); + saturn_launcher::download_version("1.21.4"); + println!("Downloaded {version}"); + println!("Installing fabric for {version}"); + saturn_launcher::install_fabric(version, "0.17.2"); + println!("Fabric installed for {version}"); - match smallauncher_lib::download::download_minecraft_version(&game_path, &jre_path, &version) { - Ok(_) => println!("Download completed!"), - Err(e) => println!("Download failed: {:?}", e), + println!("Installing Saturn Client for {version}"); + let base_path = env::get_data_folder().unwrap(); + let mods_path = base_path.join("instances").join(version).join("mods"); + if !mods_path.exists() { + fs::create_dir_all(&mods_path).unwrap(); + } + let saturn_jar = mods_path.join(CLIENT_JAR); + { + let mut saturn_file = fs::File::create(saturn_jar).unwrap(); + saturn_launcher::download::download(LATEST_CLIENT, &mut saturn_file).unwrap(); + println!("Saturn Client Installed for {version}"); + } + + let fabric_api_jar = mods_path.join("fabric-api.jar"); + { + let mut fabric_file = fs::File::create(fabric_api_jar).unwrap(); + saturn_launcher::download::download(FABRIC_API, &mut fabric_file).unwrap(); + println!("Saturn Client Installed for {version}"); } } #[tauri::command] fn check_version(version: &str) { - let base_path = env::get_data_folder().expect("error get folder game"); - let game_path = path!(&base_path, "minecraft"); + let base_path = env::get_data_folder().unwrap(); + let instances_path = base_path.join("instances"); + let instance = instances_path.join(version); - if smallauncher_lib::launch::check_version_integrity(&game_path, &version) { + if saturn_launcher::launch::check_version_integrity(&instance, &format!("{version}-fabric")) { println!("Version {version} is ok"); } else { println!("Version {version} is not ok"); @@ -49,52 +71,42 @@ fn check_version(version: &str) { #[tauri::command] fn launch_minecraft(username: &str, version: &str) { - let base_path = env::get_data_folder().expect("error get folder game"); - let auth_path = path!(&base_path, "auth"); - let game_path = path!(&base_path, "minecraft"); - let jre_path = path!(&base_path, "jre"); + let base_path = env::get_data_folder().unwrap(); + let auth_path = base_path.join("auth"); + let jre_path = base_path.join("jre"); + let instances_path = base_path.join("instances"); + let instance = instances_path.join(version); - let auth = match smallauncher_lib::auth::load(&auth_path, &username) { + let auth = match saturn_launcher::auth::load(&auth_path, &username) { Ok(Some(auth)) => auth, - Ok(None) => smallauncher_lib::auth::auth_offline("test_idk"), + Ok(None) => saturn_launcher::auth::auth_offline("offline_player"), Err(e) => { println!("Failed to load authentication: {:?}", e); return; } }; - match smallauncher_lib::launch::launch_minecraft_version(&game_path, &jre_path, &version, &auth) - { - Ok(_) => println!("Game launched successfully."), - Err(e) => println!("Failed to launch game: {:?}", e), + if !instance.exists() { + download(version); } -} -#[tauri::command] -fn list_versions() { - let base_path = env::get_data_folder().expect("error get folder game"); - let game_path = path!(&base_path, "minecraft"); - match smallauncher_lib::launch::list_versions(&game_path) { - Ok(list) => { - if !list.is_empty() { - for version in list { - println!("{version}"); - } - } else { - println!("No installed versions found."); - } - } - Err(smallauncher_lib::error::Error::Io(e)) if e.kind() == std::io::ErrorKind::NotFound => { - println!("No installed versions found. The versions directory does not exist."); - } - Err(e) => println!("Error listing versions: {:?}", e), - } + saturn_launcher::launch::launch_minecraft_version( + &instance, + &jre_path, + &format!("{version}-fabric"), + &auth, + ) + .unwrap() } #[tauri::command] fn list_accounts() -> Vec { let base_path = env::get_data_folder().expect("error get folder game"); - let auth_path = path!(&base_path, "auth"); + let auth_path = base_path.join("auth"); + + if !auth_path.exists() { + fs::create_dir_all(&auth_path).unwrap(); + } match std::fs::read_dir(auth_path) { Ok(dir) => dir @@ -129,7 +141,6 @@ pub fn run() { download, check_version, launch_minecraft, - list_versions, list_accounts, ]) .run(tauri::generate_context!())