From 842ecf0cf36d7fa6b6f634163b0dcacd6c1cbf5b Mon Sep 17 00:00:00 2001 From: alterwain Date: Tue, 18 Mar 2025 03:37:55 +0300 Subject: [PATCH] modified: src/config.rs modified: src/launcher.rs modified: src/main.rs modified: src/www/portable.html deleted: src/www/sign_in.html --- src/config.rs | 3 +- src/launcher.rs | 46 +++- src/main.rs | 32 ++- src/www/portable.html | 571 +++++++++++++++++++++++------------------- src/www/sign_in.html | 183 -------------- 5 files changed, 389 insertions(+), 446 deletions(-) delete mode 100644 src/www/sign_in.html diff --git a/src/config.rs b/src/config.rs index a1ce667..7a43165 100644 --- a/src/config.rs +++ b/src/config.rs @@ -26,12 +26,13 @@ pub struct LauncherConfig { pub show_beta: bool, pub show_snapshots: bool, pub ram_amount: u32, + pub enable_blur: bool, servers: Vec } impl Default for LauncherConfig { fn default() -> Self { - Self { is_portable: Default::default(), user_name: Default::default(), java_path: "java".to_string(), show_alpha: true, show_beta: true, show_snapshots: false, ram_amount: 1024, servers: Default::default() } + Self { is_portable: Default::default(), user_name: Default::default(), java_path: "java".to_string(), show_alpha: true, show_beta: true, show_snapshots: false, ram_amount: 1024, servers: Default::default(), enable_blur: Default::default() } } } diff --git a/src/launcher.rs b/src/launcher.rs index 2562669..4b751f1 100644 --- a/src/launcher.rs +++ b/src/launcher.rs @@ -143,6 +143,33 @@ impl Launcher { v } + pub fn get_screenshots(&self) -> Vec<(String, String)> { + let mut v = Vec::new(); + let mut instances = self.config.launcher_dir(); + instances.push("instances"); + if let Ok(entries) = std::fs::read_dir(instances) { + for entry in entries { + if entry.is_err() { continue; } + let entry = entry.unwrap(); + if !entry.metadata().unwrap().is_dir() { continue; } + let mut p = entry.path(); + p.push("data"); + p.push("screenshots"); + if !p.exists() { continue; } + if let Ok(screenshots) = std::fs::read_dir(p) { + for screenshot in screenshots { + if let Ok(screenshot) = screenshot { + if screenshot.file_name().to_str().unwrap().ends_with("png") { + v.push((screenshot.path().to_str().unwrap().to_string(), format!("data:image/png;base64,{}", BASE64_STANDARD.encode(std::fs::read(screenshot.path()).unwrap())))); + } + } + } + } + } + } + v + } + pub async fn launch_instance(&self, instance_name: String, username: String, uuid: String, token: String) { let mut instances = self.config.launcher_dir(); instances.push("instances"); @@ -154,7 +181,15 @@ impl Launcher { client_jar.push(&instance_name); client_jar.push("client.jar"); + let mut instance_dir = self.config.launcher_dir(); + instance_dir.push("instances"); + instance_dir.push(&instance_name); + instance_dir.push("data"); + let mut cmd = Command::new(&self.config.java_path); + cmd.current_dir(instance_dir); + cmd.stdout(std::process::Stdio::piped()); + for arg in JAVA_ARGS { cmd.arg(arg.to_string()); @@ -204,7 +239,16 @@ impl Launcher { let mut assets_dir = self.config.launcher_dir(); assets_dir.push("assets"); cmd.args(&["--username", &username, "--version", &instance_name, "--gameDir", game_dir.to_str().unwrap(), "--assetsDir", assets_dir.to_str().unwrap(), "--assetIndex", &config.assetIndex.id, "--uuid", &uuid, "--accessToken", &token, "--userProperties", "{}", "--userType", "mojang", "--width", "925", "--height", "530"]); - cmd.spawn(); + let child = cmd.spawn().unwrap(); + + /*if let Some(stdout) = child.stdout.take() { + let reader = BufReader::new(stdout); + let mut lines = reader.lines(); + + while let Ok(Some(line)) = lines.next_line().await { + println!("Line: {}", line); + } + }*/ } } diff --git a/src/main.rs b/src/main.rs index 4bdefd8..0137608 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,11 @@ use std::sync::{Arc, Mutex}; +use base64::prelude::{BASE64_STANDARD, BASE64_STANDARD_NO_PAD}; +use base64::Engine; use config::LauncherConfig; use launcher::Launcher; use serde::{Deserialize, Serialize}; +use tokio::process::Command; use tokio::runtime::Runtime; use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; use winit::application::ApplicationHandler; @@ -196,7 +199,20 @@ async fn main() { responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["add_server_response".to_string(), status.to_string(), msg.to_string()] }).unwrap())); } "fetch_settings" => { - responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["fetch_settings_response".to_string(), launcher.config.show_alpha.to_string(), launcher.config.show_beta.to_string(), launcher.config.show_snapshots.to_string(), launcher.config.java_path.clone(), launcher.config.ram_amount.to_string()] }).unwrap())); + responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["fetch_settings_response".to_string(), launcher.config.show_alpha.to_string(), launcher.config.show_beta.to_string(), launcher.config.show_snapshots.to_string(), launcher.config.java_path.clone(), launcher.config.ram_amount.to_string(), launcher.config.enable_blur.to_string()] }).unwrap())); + } + "save_bg" => { + let params = ¶ms.unwrap().params; + let mut p = launcher.config.launcher_dir(); + p.push("bg.base64"); + let _ = std::fs::write(p, ¶ms[0]); + } + "fetch_bg" => { + let mut p = launcher.config.launcher_dir(); + p.push("bg.base64"); + if let Ok(data) = std::fs::read(p) { + responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["fetch_bg".to_string(), String::from_utf8(data).unwrap()] }).unwrap())); + } } "update_settings" => { let params = ¶ms.unwrap().params; @@ -205,8 +221,22 @@ async fn main() { launcher.config.show_alpha = params[0].parse().unwrap(); launcher.config.show_beta = params[1].parse().unwrap(); launcher.config.show_snapshots = params[2].parse().unwrap(); + launcher.config.enable_blur = params[5].parse().unwrap(); launcher.save_config(); } + "open_file" => { + let params = ¶ms.unwrap().params; + let _ = Command::new("cmd").args(["/C", "start", ¶ms[0]]).spawn(); + } + "load_screenshots" => { + let screenshots = launcher.get_screenshots(); + let mut svec = Vec::new(); + for (path,data) in screenshots { + svec.push(path); + svec.push(data); + } + responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: [vec!["load_screenshots".to_string()], svec].concat() }).unwrap())); + } _ => {} } } diff --git a/src/www/portable.html b/src/www/portable.html index fde6637..7fa2b89 100644 --- a/src/www/portable.html +++ b/src/www/portable.html @@ -92,7 +92,7 @@
  • @@ -128,287 +128,286 @@
    - +