use crate::structs::packages::ChromePackage;
use anyhow::{self, Ok};
use indicatif::{ProgressBar, ProgressStyle};
use std::{fs::File, io::Write};
pub fn get_latest_chrome_package(chrome_packages: &Vec<ChromePackage>) -> Option<ChromePackage> {
let mut latest_package: Option<ChromePackage> = None;
for package in chrome_packages {
if latest_package.is_none() {
latest_package = Some(package.clone());
} else {
let latest_package_version = &latest_package.as_ref().unwrap().version;
let package_version = &package.version;
if package_version > latest_package_version {
latest_package = Some(package.clone());
}
}
}
latest_package
}
pub async fn create_progressbar(length: u64) -> ProgressBar {
let pb = ProgressBar::new(length);
pb.set_style(ProgressStyle::default_bar()
.template("{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({bytes_per_sec}, {eta})").unwrap()
.progress_chars("#>-")
);
pb
}
pub async fn write_file(mut file: &File, mut response: reqwest::Response) -> anyhow::Result<()> {
let file_size = response.content_length().unwrap_or(0);
let progress_bar = create_progressbar(file_size).await;
while let Some(chunk) = response.chunk().await? {
file.write_all(&chunk)?;
let increment = chunk.len() as u64; progress_bar.inc(increment as u64);
}
file.flush()?;
Ok(())
}