diff --git a/src/main.rs b/src/main.rs index 7b8b911..5f7d7ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,14 @@ mod models; mod utils; -use crate::{models::vanilla::{VanillaVersionDetail, VanillaVersionType, VanillaVersions}, utils::{with_progressbar, with_spinner}}; +use crate::{models::vanilla::{VanillaVersionDetail, VanillaVersionType, VanillaVersions}, utils::with_spinner}; use clap::{ Parser, Subcommand, builder::styling::{self}, }; use dialoguer::{FuzzySelect, Select, theme::ColorfulTheme}; use futures_util::StreamExt; +use indicatif::{ProgressBar, ProgressStyle}; use sha1::{Digest, Sha1}; use std::error::Error; use tokio::io::AsyncWriteExt; @@ -73,31 +74,30 @@ async fn main() -> Result<(), Box> { .interact()?; let version_detail: VanillaVersionDetail = - with_spinner("", "", || async { - let version_detail: VanillaVersionDetail = - reqwest::get(release_versions[version_index].url.clone()) - .await? - .json() - .await?; - Ok(version_detail) - }).await?; + reqwest::get(release_versions[version_index].url.clone()) + .await? + .json() + .await?; - let start_msg = format!( + println!( "downloading server.jar for {} {}", loaders[loader_index], release_version_names[version_index] ); - with_progressbar(&start_msg, "download finished", version_detail.downloads.server.size, |pb| async move { - let server_bytes = reqwest::get(version_detail.downloads.server.url).await?; - let mut file = tokio::fs::File::create("server.jar").await?; - let mut stream = server_bytes.bytes_stream(); + let pb = ProgressBar::new(version_detail.downloads.server.size); + pb.set_style(ProgressStyle::default_bar().template( + "{bar:40.green/white} {bytes}/{total_bytes} ({bytes_per_sec})", + )?); - while let Some(chunk) = stream.next().await { - let chunk = chunk?; - file.write_all(&chunk).await?; - pb.inc(chunk.len() as u64); - } - Ok(()) - }).await?; + let server_bytes = reqwest::get(version_detail.downloads.server.url).await?; + let mut file = tokio::fs::File::create("server.jar").await?; + let mut stream = server_bytes.bytes_stream(); + + while let Some(chunk) = stream.next().await { + let chunk = chunk?; + file.write_all(&chunk).await?; + pb.inc(chunk.len() as u64); + } + pb.finish_with_message("download finished"); with_spinner("verifying sha1 hash", "sha1 hash verified", || async { let data = tokio::fs::read("server.jar").await?; diff --git a/src/utils.rs b/src/utils.rs index 5672b7c..9e5ba69 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,5 +1,5 @@ use std::{error::Error, future::Future}; -use indicatif::{ProgressBar, ProgressStyle}; +use indicatif::ProgressBar; pub async fn with_spinner( start_msg: &str, @@ -17,32 +17,7 @@ where let result = f().await; pb.finish_and_clear(); - if !finish_msg.is_empty() { - println!("{} {}", dialoguer::console::style("✔").green(), finish_msg); - - } - - result -} - -pub async fn with_progressbar( - start_msg: &str, - finish_msg: &str, - len: u64, - f: F, -) -> Result> -where - F: FnOnce(ProgressBar) -> Fut, - Fut: Future>> -{ - let pb = ProgressBar::new(len); - pb.set_style(ProgressStyle::default_bar().template( - "{msg}\n{bar:40.green/white} {bytes}/{total_bytes} ({bytes_per_sec})", - )?); - pb.set_message(start_msg.to_string()); - - let result = f(pb.clone()).await; - pb.finish_with_message(finish_msg.to_string()); + println!("{} {}", dialoguer::console::style("✔").green(), finish_msg); result }