46 lines
1.5 KiB
Rust
46 lines
1.5 KiB
Rust
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<dyn std::error::Error>>{
|
|
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(())
|
|
}
|