use std::{env, io::{Cursor, Seek}, path::PathBuf}; use flate2::read::GzDecoder; use tar::Archive; use crate::{ftp, java, system_dirs::get_local_data_directory}; pub fn check_prism() -> bool { let path = get_local_data_directory().join("prism"); path.exists() } pub fn install_prism() -> Result<(), Box>{ if check_prism() { return Ok(()); } java::install_java(21); let path = PathBuf::new().join("prism").join(format!("prism-{}",if env::consts::OS == "windows" {"win.zip"} else {"lin.tar.gz"})); let size = ftp::ftp_get_size(path.clone())?; let mut buff = Cursor::new(vec![]); let mut total = 0; ftp::ftp_retr(path, &mut buff, |data| { total += data; println!("Downloading Prism: {}MB / {}MB", total/(1024*1024), size/(1024*1024)); }).unwrap(); std::fs::create_dir_all(get_local_data_directory().join("prism"))?; buff.rewind()?; if env::consts::OS != "windows" { let tar = GzDecoder::new(buff); let mut archive = Archive::new(tar); if !archive.unpack(get_local_data_directory().join("prism")).is_ok() { std::fs::remove_dir_all(get_local_data_directory().join("prism")); } } else { if !zip_extract::extract(buff, get_local_data_directory().join("prism").as_path(), true).is_ok() { std::fs::remove_dir_all(get_local_data_directory().join("prism")); } } let buff = Cursor::new(vec![]); ftp::ftp_retr(PathBuf, writer, callback) Ok(()) }