From 1d5dc8bf5793194eb5e24ba0784d675c3b276522 Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 9 Apr 2024 04:07:47 +0200 Subject: [PATCH] 2 progress bars (#12) * added progress struct basis * added terminal.rs for common terminal tasks * added basic progress bar * readme updates for new progress bar --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 6 +- examples/progress.rs | 52 ++++++++++ images/rustrover64_WupAJU44Lu.gif | Bin 0 -> 130428 bytes src/animations/frames/mod.rs | 2 + src/animations/frames/progress.rs | 51 ++++++++++ src/animations/frames/spinner.rs | 1 - src/animations/mod.rs | 1 + src/animations/progress.rs | 161 ++++++++++++++++++++++++++++++ src/animations/spinner.rs | 33 ++---- src/lib.rs | 3 +- src/terminal.rs | 55 ++++++++++ 13 files changed, 338 insertions(+), 31 deletions(-) create mode 100644 examples/progress.rs create mode 100644 images/rustrover64_WupAJU44Lu.gif create mode 100644 src/animations/frames/progress.rs create mode 100644 src/animations/progress.rs create mode 100644 src/terminal.rs diff --git a/Cargo.lock b/Cargo.lock index 319f1c8..95efa15 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -359,7 +359,7 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "zenity" -version = "1.3.1" +version = "1.3.2" dependencies = [ "crossterm", "rand", diff --git a/Cargo.toml b/Cargo.toml index a1397fb..37bdb0a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ readme = "README.md" categories = ["command-line-utilities", "command-line-interface"] -description = "100+ Cool Animations and Support for Multiple Animations at Once (Yet Another Spinner Lib)" +description = "100+ spinner animations and Progress Bars and Support for Multiple Animations at Once" repository = "https://github.com/Arteiii/zenity" keywords = ["console", "animations", "cli", "spinner", "loading"] homepage = "https://arteiii.github.io" diff --git a/README.md b/README.md index d706e47..2fd3dae 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # zenity (Yet Another Spinner Lib) -Elevate your Rust command-line interfaces with 100+ spinner animations and multiline support +Elevate your Rust command-line interfaces with 100+ spinner animations and Progress Bars + multiline support [![Publish to Crates](https://github.com/Arteiii/zenity/actions/workflows/publish_crate.yml/badge.svg)](https://github.com/Arteiii/zenity/actions/workflows/publish_crate.yml) [![Compile Rust](https://github.com/Arteiii/zenity/actions/workflows/release_examples.yml/badge.svg)](https://github.com/Arteiii/zenity/actions/workflows/release_examples.yml) @@ -13,6 +13,10 @@ Elevate your Rust command-line interfaces with 100+ spinner animations and multi ![](./images/rustrover64_tlGiHM9JP0.gif) +![progress bar](./images/rustrover64_WupAJU44Lu.gif) + +checkout the examples for this^^ + Do you often find yourself gazing into the void of your terminal, wondering if your computer has decided to take a coffee break without notifying you? diff --git a/examples/progress.rs b/examples/progress.rs new file mode 100644 index 0000000..8affb75 --- /dev/null +++ b/examples/progress.rs @@ -0,0 +1,52 @@ +use std::sync::{Arc, Mutex}; +use std::thread; +use std::time::Duration; + +use rand::Rng; + +use zenity::animations::{ + frames::progress::ProgressBarFrames, + progress::{Bar, Progress}, +}; + +fn main() { + // I know that this is not the best solution I will rework it asap + // contributions welcome + + println!("test Header line"); + thread::sleep(Duration::from_secs(8)); + + let mut progress = Progress::default(); + + let progress1 = progress.add(Bar::default()); + + // TODO: create wrapper for this + let progress2 = progress.add(Bar { + frames: Arc::new(Mutex::new(ProgressBarFrames::rect())), + size: Arc::new(Mutex::new(70_usize)), + current: Arc::new(Mutex::new(0_usize)), + goal: Arc::new(Mutex::new(253_usize)), + }); + + let progress3 = progress.add(Bar { + frames: Arc::new(Mutex::new(ProgressBarFrames::hash())), + size: Arc::new(Mutex::new(7_usize)), + current: Arc::new(Mutex::new(0_usize)), + goal: Arc::new(Mutex::new(253_usize)), + }); + + progress.run_all(); + + let loading = 1_usize; + + for loading in loading..=253 { + progress.set(&progress1, &loading); + progress.set(&progress2, &loading); + progress.set(&progress3, &loading); + + let sleep_time = rand::thread_rng().gen_range(1..=70); + thread::sleep(Duration::from_millis(sleep_time)); + } + + thread::sleep(Duration::from_millis(1000)); +} diff --git a/images/rustrover64_WupAJU44Lu.gif b/images/rustrover64_WupAJU44Lu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c45dde99fcc0b4ad4afa14a98bd1bec428023067 GIT binary patch literal 130428 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

=G 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

sfX6}bd9XT>yC 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, + + /// string to place on complete places + pub bar_complete_char: Vec<&'static str>, + + /// string to place on incomplete places + pub bar_incomplete_char: Vec<&'static str>, + + /// ending string + pub end: Vec<&'static str>, +} + +// TODO: add animations by adding +1 for each bar so you can have a wave animation and others + +impl ProgressBarFrames { + /// '=' as the complete char and '-' as the incomplete char + pub fn equal() -> Self { + Self { + begin: vec!["["], + bar_complete_char: vec!["="], + bar_incomplete_char: vec!["-"], + end: vec!["]"], + } + } + + /// '#' as the complete char and '.' as the incomplete char + pub fn hash() -> Self { + Self { + begin: vec!["["], + bar_complete_char: vec!["#"], + bar_incomplete_char: vec!["."], + end: vec!["]"], + } + } + /// '#' as the complete char and '.' as the incomplete char + pub fn rect() -> Self { + Self { + begin: vec![" "], + bar_complete_char: vec!["\u{25A0}"], + bar_incomplete_char: vec![" "], + end: vec![" "], + } + } + + // TODO: add more +} diff --git a/src/animations/frames/spinner.rs b/src/animations/frames/spinner.rs index ce129eb..fe95dec 100644 --- a/src/animations/frames/spinner.rs +++ b/src/animations/frames/spinner.rs @@ -1,6 +1,5 @@ //! Predefined Frames and other aniamtions - /// represents a collection of frames and their display speed, typically used for animations /// /// # Example diff --git a/src/animations/mod.rs b/src/animations/mod.rs index c6f8934..bd6b29d 100644 --- a/src/animations/mod.rs +++ b/src/animations/mod.rs @@ -3,4 +3,5 @@ pub(crate) mod animation; pub mod frames; +pub mod progress; pub mod spinner; diff --git a/src/animations/progress.rs b/src/animations/progress.rs new file mode 100644 index 0000000..19d3394 --- /dev/null +++ b/src/animations/progress.rs @@ -0,0 +1,161 @@ +//! mod for progress bars + +use std::collections::HashMap; +use std::sync::{Arc, Mutex}; +use std::thread; + +use rand::Rng; + +use crate::animations::frames::progress::ProgressBarFrames; +use crate::terminal::{console_cursor, console_render}; + +/// bar struct encapsulating the loading bar data animation +pub struct Bar { + /// frames to use for animation + pub frames: Arc>, + + /// size of progress bar + pub size: Arc>, + + /// goal value + pub goal: Arc>, + + /// current value + pub current: Arc>, +} + +impl Default for Bar { + fn default() -> Self { + Bar { + frames: Arc::new(Mutex::new(ProgressBarFrames::equal())), + size: Arc::new(Mutex::new(31)), + goal: Arc::new(Mutex::new(253)), + current: Arc::new(Mutex::new(0)), + } + } +} + +/// struct holding multiple bars +pub struct Progress { + // TODO: instead of random ids go after creation and increment by one + // this would allow to render them line for line based on this and order them correctly + bar: Arc>>, + stop: Arc>, +} + +impl Default for Progress { + fn default() -> Self { + Self::new() + } +} + +impl Progress { + /// creates a new Progress instance + /// + /// ## Example + /// ``` + /// # use zenity::multi_spinner::MultiSpinner; + /// let _spinner = MultiSpinner::new(); + /// ``` + pub fn new() -> Self { + // console_cursor::reset_cursor(); + + console_cursor::save_hide_cursor(); + + Progress { + bar: Arc::new(Mutex::new(HashMap::new())), + stop: Arc::new(Mutex::new(false)), + } + } + + /// add a new progress bar + pub fn add(&self, bar: Bar) -> usize { + let mut rng = rand::thread_rng(); + let mut uid: usize; + + loop { + uid = rng.gen(); + if !self.bar.lock().unwrap().contains_key(&uid) { + break; + } + } + + self.bar.lock().unwrap().insert(uid, bar); + + uid + } + + /// set the current + /// + /// # Arguments + /// + /// * `uid` - the unique identifier of the progress bar + /// * `new_current` - the new value to set as the current progress + /// + /// **NOTE:** + /// - if the UID is invalid, this function does nothing + /// - this function locks the progress bar associated with the provided uid and updates its current value + pub fn set(&self, uid: &usize, new_current: &usize) { + if let Some(bar) = self.bar.lock().unwrap().get(uid) { + let mut current = bar.current.lock().unwrap(); + *current = *new_current; + } + } + + /// start each queued progressbar + pub fn run_all(&mut self) { + let bars = Arc::clone(&self.bar); + let stop = Arc::clone(&self.stop); + + thread::spawn(move || { + while !*stop.lock().unwrap() { + let mut rendered_frames = Vec::new(); + + for (_, spinner) in bars.lock().unwrap().iter() { + let frames = spinner.frames.lock().unwrap(); + let begin: &str = frames.begin[0]; + let end: &str = frames.end[0]; + let current_incomplete: &str = frames.bar_incomplete_char[0]; + let current_complete: &str = frames.bar_complete_char[0]; + + let size: usize = *spinner.size.lock().unwrap(); + let goal = *spinner.goal.lock().unwrap(); + let current: usize = *spinner.current.lock().unwrap(); + + // calculate percentage completion + let completion_percentage = (current as f64 / goal as f64) * 100.0; + + // calculate number of characters to represent the completion percentage + let complete_size = ((completion_percentage / 100.0) * size as f64) as usize; + let incomplete_size = size - complete_size; + + // Render the frame with the updated incomplete string and add it to the vector + let rendered_frame = format!( + "{begin}{}{}{end} {:.2}% | {}/{}", + current_complete.repeat(complete_size), + current_incomplete.repeat(incomplete_size), + completion_percentage, + current, + goal, + ); + rendered_frames.push(rendered_frame); + } + + // Join all the rendered frames from the vector + let combined_output = rendered_frames.join("\n"); + + // render the frame with the updated incomplete string + console_render::render_frame(&combined_output); + } + }); + } +} + +impl Drop for Progress { + /// stops the thread when the object is dropped + fn drop(&mut self) { + // cleanup methods + console_render::cleanup(); + console_cursor::reset_cursor(); + } +} diff --git a/src/animations/spinner.rs b/src/animations/spinner.rs index ffddd62..0ef7a3c 100644 --- a/src/animations/spinner.rs +++ b/src/animations/spinner.rs @@ -1,17 +1,15 @@ //! mod for multiline spinners use std::collections::HashMap; -use std::io::stdout; use std::sync::{Arc, Mutex}; use std::thread; use std::time::Duration; -use crate::helper::iterators; -use crossterm::style::Print; -use crossterm::{cursor, execute, terminal}; use rand::Rng; +use crate::helper::iterators; use crate::spinner::Frames; +use crate::terminal::{console_cursor, console_render}; /// spinner struct encapsulating the spinner animation pub struct Spinner { @@ -86,7 +84,6 @@ impl MultiSpinner { uid } - /// set text of a specific spinner /// /// if the uid is invalid this does nothing @@ -149,6 +146,8 @@ impl MultiSpinner { let stop = Arc::clone(&self.stop); thread::spawn(move || { + console_cursor::save_hide_cursor(); + let mut index = 1_usize; while !*stop.lock().unwrap() { @@ -176,19 +175,6 @@ impl MultiSpinner { }); } - /// helper function to output frame using crossterm - fn render_frame(frame: &str) { - execute!( - stdout(), - cursor::Hide, - cursor::MoveTo(0, 1), - cursor::SavePosition, - terminal::Clear(terminal::ClearType::FromCursorDown), - Print(frame), - ) - .unwrap(); - } - /// helper function to render frames to stdout fn render_frames(frames: &[Vec<&str>], index: usize, texts: &[String], should_stop: &[bool]) { let first_frame = iterators::balanced_iterator(index, frames); @@ -207,20 +193,15 @@ impl MultiSpinner { .collect::>() .join("\n"); - MultiSpinner::render_frame(&combined_string); + console_render::render_frame(&combined_string); } /// helper function to clean-up after animation stop fn cleanup(&mut self) { *self.stop.lock().unwrap() = true; - execute!( - stdout(), - cursor::MoveTo(0, 0), - terminal::Clear(terminal::ClearType::FromCursorDown), - cursor::Show, - ) - .unwrap(); + console_render::cleanup(); + console_cursor::reset_cursor(); } } diff --git a/src/lib.rs b/src/lib.rs index 33a779b..b8d454e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,7 +58,8 @@ pub use crate::animations::frames::spinner; pub use crate::helper::colors::{combine_attributes, CliColorConfig}; pub mod animations; -mod helper; +pub(crate) mod helper; +pub(crate) mod terminal; /// `LoadingAnimation` is a struct that provides a straightforward interface for creating and managing customizable loading animations. /// diff --git a/src/terminal.rs b/src/terminal.rs new file mode 100644 index 0000000..95e7520 --- /dev/null +++ b/src/terminal.rs @@ -0,0 +1,55 @@ +pub(crate) mod console_render { + use std::io::stdout; + + use crossterm::{cursor, execute, style, terminal}; + + // use crossterm::style::ContentStyle; + + pub fn render_frame(frame: &str) { + execute!(stdout(), cursor::RestorePosition, style::Print(frame),).unwrap(); + } + + // pub fn render_styled_frame(frame: &String, style: ContentStyle) { + // execute!( + // stdout(), + // cursor::RestorePosition, + // style::SetStyle(style), // set animation color + // style::Print(frame), + // style::ResetColor, // reset colors + // ) + // .unwrap(); + // } + + pub fn cleanup() { + execute!( + stdout(), + cursor::RestorePosition, + cursor::MoveToNextLine(2), + terminal::Clear(terminal::ClearType::FromCursorDown), + ) + .unwrap(); + } +} + +pub(crate) mod console_cursor { + use std::io::stdout; + + use crossterm::{cursor, execute, terminal}; + + /// sets the cursor to be hidden, moves it to the next line,saves its current position, + /// and clears the terminal screen from the cursor position down + pub fn save_hide_cursor() { + execute!( + stdout(), + cursor::Hide, + cursor::SavePosition, + terminal::Clear(terminal::ClearType::FromCursorDown), + ) + .unwrap(); + } + + /// resets the cursor to be shown and restores its saved position + pub fn reset_cursor() { + execute!(stdout(), cursor::RestorePosition, cursor::Show).unwrap(); + } +}