diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 2c2aa17..229f53a 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2172,6 +2172,12 @@ dependencies = [ "selectors 0.24.0", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "leb128fmt" version = "0.1.0" @@ -2329,7 +2335,6 @@ dependencies = [ "lighty-java", "lighty-launch", "lighty-loaders", - "lighty-tauri", "lighty-version", "once_cell", "tokio", @@ -2357,28 +2362,6 @@ dependencies = [ "zip", ] -[[package]] -name = "lighty-tauri" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3842cdcd5530f59351a3d6f0a9d3d57e76b010d456427e789ad479a7c2272d" -dependencies = [ - "directories", - "lighty-auth", - "lighty-core", - "lighty-java", - "lighty-launch", - "lighty-loaders", - "lighty-version", - "once_cell", - "serde", - "serde_json", - "tauri", - "thiserror 2.0.18", - "tokio", - "tracing", -] - [[package]] name = "lighty-version" version = "0.8.6" @@ -2616,6 +2599,15 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "num-conv" version = "0.2.1" @@ -3860,12 +3852,16 @@ dependencies = [ name = "saturn-launcher" version = "0.1.0" dependencies = [ + "anyhow", + "directories", "lighty-launcher", + "once_cell", "serde", "serde_json", "tauri", "tauri-build", "tauri-plugin-opener", + "tracing-subscriber", ] [[package]] @@ -4173,6 +4169,15 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -4792,6 +4797,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + [[package]] name = "time" version = "0.3.47" @@ -5110,6 +5124,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", ] [[package]] @@ -5277,6 +5317,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "version-compare" version = "0.2.1" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index de8891c..0fab6b9 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -22,4 +22,8 @@ tauri = { version = "2", features = [] } tauri-plugin-opener = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" -lighty-launcher = { version = "0.8.6", features = ["fabric", "tauri-commands"] } +lighty-launcher = { version = "0.8.6", features = ["fabric"] } +directories = "6.0" +once_cell = "1.21" +tracing-subscriber = "0.3" +anyhow = "1.0" diff --git a/src-tauri/src/launcher.rs b/src-tauri/src/launcher.rs new file mode 100644 index 0000000..c7917e2 --- /dev/null +++ b/src-tauri/src/launcher.rs @@ -0,0 +1,46 @@ +use directories::ProjectDirs; +use lighty_launcher::{ + auth::{Authenticator, OfflineAuth}, + java::JavaDistribution, + launch::Launch, + loaders::Loader, + version::VersionBuilder, +}; +use once_cell::sync::Lazy; + +static LAUNCHER_DIR: Lazy = Lazy::new(|| { + ProjectDirs::from("org", "SaturnLauncher", "SaturnLauncher") + .expect("Failed to create project directories") +}); + +#[tauri::command] +pub async fn launch() -> Result<(), String> { + println!("Launcher directory: {:?}", LAUNCHER_DIR); + + tracing_subscriber::fmt::init(); + + // Authenticate + let mut auth = OfflineAuth::new("PlayerName"); + let profile = auth + .authenticate() + .await + .map_err(|e| format!("Authentication failed: {}", e))?; + + // Create version instance + let mut version = VersionBuilder::new( + "vanilla-1.21.1", + Loader::Vanilla, + "", + "1.21.1", + &LAUNCHER_DIR, + ); + + // Launch the game + version + .launch(&profile, JavaDistribution::Temurin) + .run() + .await + .map_err(|e| format!("Launch failed: {}", e))?; + + Ok(()) +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index fed28c7..92aa0b2 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,4 +1,5 @@ pub mod commands; +pub mod launcher; use serde::{Deserialize, Serialize}; use std::sync::Mutex; diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index b4375a0..64924ca 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,7 +1,6 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -use lighty_launcher::tauri::lighty_plugin; use saturn_launcher_lib::{commands::*, AppState}; use std::sync::Mutex; @@ -9,14 +8,14 @@ use std::sync::Mutex; fn main() { tauri::Builder::default() .plugin(tauri_plugin_opener::init()) - .plugin(lighty_plugin()) .manage(Mutex::new(AppState::default())) .invoke_handler(tauri::generate_handler![ get_installed_mods, toggle_mod, install_mod, get_settings, - update_settings + update_settings, + saturn_launcher_lib::launcher::launch ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src/App.tsx b/src/App.tsx index 138eefe..c86fdeb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,7 +8,7 @@ import { User, LogOut, } from "lucide-react"; -import { getVersions } from "./services/LauncherService"; +import { getVersions } from "./services/SaturnApi"; import { clsx, type ClassValue } from "clsx"; import { twMerge } from "tailwind-merge"; import Logo from "@/assets/logo.png"; diff --git a/src/components/ModsSection.tsx b/src/components/ModsSection.tsx index acf2183..7a9cf0e 100644 --- a/src/components/ModsSection.tsx +++ b/src/components/ModsSection.tsx @@ -14,7 +14,7 @@ import { getVersions, toggleMod, installMod, -} from "../services/LauncherService"; +} from "../services/SaturnApi"; import { clsx, type ClassValue } from "clsx"; import { twMerge } from "tailwind-merge"; import { motion, AnimatePresence } from "framer-motion"; diff --git a/src/components/PlaySection.tsx b/src/components/PlaySection.tsx index ab1aac5..990c271 100644 --- a/src/components/PlaySection.tsx +++ b/src/components/PlaySection.tsx @@ -1,9 +1,10 @@ import React, { useEffect, useState } from "react"; import { Play, Loader2 } from "lucide-react"; -import { launchGame } from "../services/LauncherService"; +// import { launchGame } from "../services/SaturnApi"; import Bg from "@/assets/bg.png"; import { listen } from "@tauri-apps/api/event"; import { GameVersion } from "@/services/Types"; +import { launch } from "@/services/LauncherApi"; interface PlaySectionProps { version: GameVersion; @@ -43,7 +44,7 @@ const PlaySection: React.FC = ({ version }) => {