Working launcher
This commit is contained in:
Generated
+24
-23
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
use smallauncher_lib::path;
|
||||
use std::env;
|
||||
use std::path;
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
pub fn get_data_folder() -> Result<path::PathBuf, env::VarError> {
|
||||
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<path::PathBuf, env::VarError> {
|
||||
let env = env::var("APPDATA")?;
|
||||
Ok(path!(env, ".saturn-launcher"))
|
||||
Ok(path::PathBuf::from(env).join(".saturn-launcher"))
|
||||
}
|
||||
|
||||
+57
-46
@@ -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<String> {
|
||||
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!())
|
||||
|
||||
Reference in New Issue
Block a user