use std::{error::Error, fs, process::Command}; use shy_launcher::{config::Config, downloader}; #[tokio::main(flavor = "current_thread")] async fn main() -> Result<(), Box> { println!("Starting app launcher..."); let config = Config::load("config.json")?; println!("Starting download..."); downloader::download(config.downloads()).await; println!("Verifying file presence..."); for download in config.downloads() { let filename = download.filename(); if !fs::exists(filename)? { panic!("Required file {} not present", filename); } println!("[ok] {}", filename); } println!("Freeing memory..."); if unsafe { libc::malloc_trim(0) } == 1 { println!("Freed up some memory."); } println!("Launching app..."); println!(); println!("--------------------------"); println!(); let mut child = Command::new(config.run()) .args(config.args()) .spawn()?; let exit = child.wait()?; println!(); println!("--------------------------"); println!(); println!("Child exited: {exit}"); Ok(()) }