diff --git a/src/launcher.rs b/src/launcher.rs index 4b751f1..a47cbca 100644 --- a/src/launcher.rs +++ b/src/launcher.rs @@ -3,6 +3,7 @@ use std::io::Cursor; use base64::Engine; use base64::prelude::BASE64_STANDARD; use tokio::fs::File; +use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::process::Command; use tokio::sync::mpsc; use tokio::sync::mpsc::UnboundedSender; @@ -170,7 +171,7 @@ impl Launcher { v } - pub async fn launch_instance(&self, instance_name: String, username: String, uuid: String, token: String) { + pub async fn launch_instance(&self, instance_name: String, username: String, uuid: String, token: String, sender: UnboundedSender) { let mut instances = self.config.launcher_dir(); instances.push("instances"); instances.push(&instance_name); @@ -189,6 +190,7 @@ impl Launcher { let mut cmd = Command::new(&self.config.java_path); cmd.current_dir(instance_dir); cmd.stdout(std::process::Stdio::piped()); + cmd.stderr(std::process::Stdio::inherit()); for arg in JAVA_ARGS { @@ -239,16 +241,18 @@ 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"]); - let child = cmd.spawn().unwrap(); + let mut 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); + tokio::spawn(async move { + 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 { + let _ = sender.send(line); + } } - }*/ + }); } } diff --git a/src/main.rs b/src/main.rs index 0137608..b83df7a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -80,6 +80,7 @@ async fn main() { let mut launcher = Launcher::default(); let (sx, mut dl_rec) = mpsc::unbounded_channel(); + let (mut lx, mut logs_rec) = mpsc::unbounded_channel(); loop { if let Some((ui_action, params, responder)) = receiver.recv().await { @@ -181,9 +182,18 @@ async fn main() { responder.respond(Response::new(vec![])); } } + "check_logs_status" => { + if let Ok(text) = logs_rec.try_recv() { + responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["update_logs".to_string(), text] }).unwrap())); + } else { + responder.respond(Response::new(vec![])); + } + } "run_instance" => { let instance_name = params.unwrap().params[0].clone(); - launcher.launch_instance(instance_name, launcher.config.user_name().to_string(), util::random_string(32), util::random_string(32)).await; + logs_rec.close(); + (lx, logs_rec) = mpsc::unbounded_channel(); + launcher.launch_instance(instance_name, launcher.config.user_name().to_string(), util::random_string(32), util::random_string(32), lx.clone()).await; } "locate_java" => { if let Ok(java_path) = java_locator::locate_file("java.exe") { diff --git a/src/www/portable.html b/src/www/portable.html index 7fa2b89..800c79f 100644 --- a/src/www/portable.html +++ b/src/www/portable.html @@ -161,15 +161,7 @@
-

[INFO] Initializing Minecraft...

-
- - -
- +

alterdekim

@@ -454,10 +446,18 @@ } else if( params[i] == "fetch_bg") { setBackground(params[i+1]); i++; + } else if( params[i] == "update_logs" ) { + updateLogs(params[i+1]); + break; } } } + function updateLogs(text) { + $("#log-container").append("

"+text+"

"); + $("#log-container").scrollTop($("#log-container")[0].scrollHeight); + } + function setBackground(bg) { $("body").removeClass("bg-gray-100"); $("body").css("background-image", 'url("'+bg+'")'); @@ -615,6 +615,7 @@ } function runInstance(version) { + $("#log-container").html(""); $.post({url: "run_instance", data: JSON.stringify({ params: [version] })}, processParams); showSection(undefined, "logs"); } @@ -678,6 +679,9 @@ if( !$("#loading-section").hasClass("hidden") ) { $.get("check_download_status", processParams); } + if( !$("#logs-section").hasClass("hidden") ) { + $.get("check_logs_status", processParams); + } }, 10); });