mirror of
https://github.com/ALEZ-DEV/Babylonia-terminal.git
synced 2026-03-21 21:58:52 +00:00
hum... I forgot this in my latest commit :|
This commit is contained in:
parent
c1a4c5c2f6
commit
d03a34b9c1
@ -10,10 +10,15 @@ use std::fs as std_fs;
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
use std::time::Duration;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
use std::vec;
|
use std::vec;
|
||||||
use tokio::fs::File;
|
use tokio::fs::File;
|
||||||
use tokio::fs::{create_dir_all, remove_file};
|
use tokio::fs::{create_dir_all, remove_file};
|
||||||
|
use tokio::sync::mpsc;
|
||||||
|
use tokio::sync::mpsc::Receiver;
|
||||||
|
use tokio::sync::mpsc::Sender;
|
||||||
|
use tokio::time::timeout;
|
||||||
|
|
||||||
use super::component_downloader::ComponentDownloader;
|
use super::component_downloader::ComponentDownloader;
|
||||||
use crate::utils::github_requester::GithubRequester;
|
use crate::utils::github_requester::GithubRequester;
|
||||||
@ -47,25 +52,46 @@ impl GameComponent {
|
|||||||
.await??; // only the std::File is supported by chksum_md5, that's why I block
|
.await??; // only the std::File is supported by chksum_md5, that's why I block
|
||||||
let digest = chksum_md5::chksum(file)?;
|
let digest = chksum_md5::chksum(file)?;
|
||||||
|
|
||||||
debug!(
|
|
||||||
"{} = {} -> {}",
|
|
||||||
digest.to_hex_lowercase(),
|
|
||||||
r.md5,
|
|
||||||
digest.to_hex_lowercase() == r.md5
|
|
||||||
);
|
|
||||||
|
|
||||||
if digest.to_hex_lowercase() != r.md5 {
|
if digest.to_hex_lowercase() != r.md5 {
|
||||||
to_download.push(r.clone());
|
to_download.push(r.clone());
|
||||||
remove_file(file_path).await?;
|
remove_file(file_path).await?;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debug!("{:?} don't exist", file_path);
|
|
||||||
to_download.push(r.clone());
|
to_download.push(r.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(to_download)
|
Ok(to_download)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn update_progress<P: downloader::progress::Reporter + 'static>(
|
||||||
|
progress: Arc<P>,
|
||||||
|
max_size: u64,
|
||||||
|
game_dir: PathBuf,
|
||||||
|
mut rx: Receiver<&'static str>,
|
||||||
|
) {
|
||||||
|
tokio::spawn(async move {
|
||||||
|
progress.setup(Some(max_size.to_owned()), "");
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let current_size = fs_extra::dir::get_size(game_dir.clone());
|
||||||
|
if let Ok(size) = current_size {
|
||||||
|
progress.progress(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Ok(v) = timeout(Duration::from_millis(250), rx.recv()).await {
|
||||||
|
match v {
|
||||||
|
Some(str) => {
|
||||||
|
if str == "done" {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GithubRequester for GameComponent {}
|
impl GithubRequester for GameComponent {}
|
||||||
@ -91,19 +117,18 @@ impl ComponentDownloader for GameComponent {
|
|||||||
.parallel_requests(5)
|
.parallel_requests(5)
|
||||||
.build()?;
|
.build()?;
|
||||||
|
|
||||||
//if let Some(ref p) = progress {
|
|
||||||
// let mut size: u64 = 0;
|
|
||||||
|
|
||||||
// resources
|
|
||||||
// .resource
|
|
||||||
// .iter()
|
|
||||||
// .for_each(|r| size += r.size as u64);
|
|
||||||
|
|
||||||
// p.setup(Some(size), "download has started");
|
|
||||||
//}
|
|
||||||
|
|
||||||
let checked_resources =
|
let checked_resources =
|
||||||
GameComponent::check_and_get_resources_to_download(output_dir, &resources).await?;
|
GameComponent::check_and_get_resources_to_download(output_dir, &resources).await?;
|
||||||
|
let (tx, rx): (Sender<&str>, Receiver<&str>) = mpsc::channel(100);
|
||||||
|
|
||||||
|
if let Some(p) = progress {
|
||||||
|
GameComponent::update_progress(
|
||||||
|
p,
|
||||||
|
resources.get_max_size_resources(),
|
||||||
|
output_dir.clone(),
|
||||||
|
rx,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
for chunk_resource in checked_resources.chunks(5) {
|
for chunk_resource in checked_resources.chunks(5) {
|
||||||
let mut output_path: Vec<PathBuf> = vec![];
|
let mut output_path: Vec<PathBuf> = vec![];
|
||||||
@ -141,9 +166,6 @@ impl ComponentDownloader for GameComponent {
|
|||||||
);
|
);
|
||||||
dl.check_file_name = false;
|
dl.check_file_name = false;
|
||||||
|
|
||||||
if let Some(p) = progress.clone() {
|
|
||||||
dl = dl.progress(FileDownloadReporter::create(p));
|
|
||||||
}
|
|
||||||
dl
|
dl
|
||||||
})
|
})
|
||||||
.collect::<Vec<downloader::Download>>();
|
.collect::<Vec<downloader::Download>>();
|
||||||
@ -151,6 +173,8 @@ impl ComponentDownloader for GameComponent {
|
|||||||
downloader.async_download(&to_download).await?;
|
downloader.async_download(&to_download).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _ = tx.send("done").await;
|
||||||
|
|
||||||
Ok(output_dir.clone())
|
Ok(output_dir.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user