Working launcher
This commit is contained in:
Generated
+24
-23
@@ -1912,9 +1912,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jobserver"
|
name = "jobserver"
|
||||||
version = "0.1.33"
|
version = "0.1.34"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
|
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom 0.3.3",
|
"getrandom 0.3.3",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -3268,11 +3268,31 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "saturn-launcher"
|
name = "saturn-launcher"
|
||||||
version = "0.1.0"
|
version = "0.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "04de217dd60acb7ecc80dde0dd093aa0bb90d0ed2d3c62099fc4f1246a43bda3"
|
||||||
dependencies = [
|
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",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"smallauncher_lib",
|
|
||||||
"tauri",
|
"tauri",
|
||||||
"tauri-build",
|
"tauri-build",
|
||||||
"tauri-plugin-opener",
|
"tauri-plugin-opener",
|
||||||
@@ -3592,25 +3612,6 @@ version = "0.4.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
|
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]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.15.1"
|
version = "1.15.1"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "saturn-launcher"
|
name = "saturn-launcher-app"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
description = "A Tauri App"
|
description = "A Tauri App"
|
||||||
authors = ["you"]
|
authors = ["you"]
|
||||||
@@ -22,5 +22,5 @@ tauri = { version = "2", features = [] }
|
|||||||
tauri-plugin-opener = "2"
|
tauri-plugin-opener = "2"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
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::env;
|
||||||
use std::path;
|
use std::path;
|
||||||
|
|
||||||
#[cfg(target_family = "unix")]
|
#[cfg(target_family = "unix")]
|
||||||
pub fn get_data_folder() -> Result<path::PathBuf, env::VarError> {
|
pub fn get_data_folder() -> Result<path::PathBuf, env::VarError> {
|
||||||
let home = env::var("HOME")?;
|
let home = env::var("HOME")?;
|
||||||
Ok(path!(home, ".saturn-launcher"))
|
Ok(path::PathBuf::from(home).join(".saturn-launcher"))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_family = "windows")]
|
#[cfg(target_family = "windows")]
|
||||||
pub fn get_data_folder() -> Result<path::PathBuf, env::VarError> {
|
pub fn get_data_folder() -> Result<path::PathBuf, env::VarError> {
|
||||||
let env = env::var("APPDATA")?;
|
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/
|
- 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;
|
pub mod env;
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn authenticate() {
|
fn authenticate() {
|
||||||
let base_path = env::get_data_folder().expect("error get folder game");
|
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() {
|
match saturn_launcher::auth::auth_microsoft() {
|
||||||
Ok(auth) => match smallauncher_lib::auth::save(&auth_path, &auth) {
|
Ok(auth) => match saturn_launcher::auth::save(&auth_path, &auth) {
|
||||||
Ok(_) => println!("Authentication successful."),
|
Ok(_) => println!("Authentication successful."),
|
||||||
Err(e) => println!("Failed to save authentication: {:?}", e),
|
Err(e) => println!("Failed to save authentication: {:?}", e),
|
||||||
},
|
},
|
||||||
@@ -23,24 +28,41 @@ fn authenticate() {
|
|||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn download(version: &str) {
|
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}");
|
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) {
|
println!("Installing Saturn Client for {version}");
|
||||||
Ok(_) => println!("Download completed!"),
|
let base_path = env::get_data_folder().unwrap();
|
||||||
Err(e) => println!("Download failed: {:?}", e),
|
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]
|
#[tauri::command]
|
||||||
fn check_version(version: &str) {
|
fn check_version(version: &str) {
|
||||||
let base_path = env::get_data_folder().expect("error get folder game");
|
let base_path = env::get_data_folder().unwrap();
|
||||||
let game_path = path!(&base_path, "minecraft");
|
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");
|
println!("Version {version} is ok");
|
||||||
} else {
|
} else {
|
||||||
println!("Version {version} is not ok");
|
println!("Version {version} is not ok");
|
||||||
@@ -49,52 +71,42 @@ fn check_version(version: &str) {
|
|||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn launch_minecraft(username: &str, version: &str) {
|
fn launch_minecraft(username: &str, version: &str) {
|
||||||
let base_path = env::get_data_folder().expect("error get folder game");
|
let base_path = env::get_data_folder().unwrap();
|
||||||
let auth_path = path!(&base_path, "auth");
|
let auth_path = base_path.join("auth");
|
||||||
let game_path = path!(&base_path, "minecraft");
|
let jre_path = base_path.join("jre");
|
||||||
let jre_path = path!(&base_path, "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(Some(auth)) => auth,
|
||||||
Ok(None) => smallauncher_lib::auth::auth_offline("test_idk"),
|
Ok(None) => saturn_launcher::auth::auth_offline("offline_player"),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!("Failed to load authentication: {:?}", e);
|
println!("Failed to load authentication: {:?}", e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match smallauncher_lib::launch::launch_minecraft_version(&game_path, &jre_path, &version, &auth)
|
if !instance.exists() {
|
||||||
{
|
download(version);
|
||||||
Ok(_) => println!("Game launched successfully."),
|
|
||||||
Err(e) => println!("Failed to launch game: {:?}", e),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
saturn_launcher::launch::launch_minecraft_version(
|
||||||
fn list_versions() {
|
&instance,
|
||||||
let base_path = env::get_data_folder().expect("error get folder game");
|
&jre_path,
|
||||||
let game_path = path!(&base_path, "minecraft");
|
&format!("{version}-fabric"),
|
||||||
match smallauncher_lib::launch::list_versions(&game_path) {
|
&auth,
|
||||||
Ok(list) => {
|
)
|
||||||
if !list.is_empty() {
|
.unwrap()
|
||||||
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),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn list_accounts() -> Vec<String> {
|
fn list_accounts() -> Vec<String> {
|
||||||
let base_path = env::get_data_folder().expect("error get folder game");
|
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) {
|
match std::fs::read_dir(auth_path) {
|
||||||
Ok(dir) => dir
|
Ok(dir) => dir
|
||||||
@@ -129,7 +141,6 @@ pub fn run() {
|
|||||||
download,
|
download,
|
||||||
check_version,
|
check_version,
|
||||||
launch_minecraft,
|
launch_minecraft,
|
||||||
list_versions,
|
|
||||||
list_accounts,
|
list_accounts,
|
||||||
])
|
])
|
||||||
.run(tauri::generate_context!())
|
.run(tauri::generate_context!())
|
||||||
|
|||||||
Reference in New Issue
Block a user