From c5506fe39377d864f80175821712b33949241583 Mon Sep 17 00:00:00 2001 From: sigoden Date: Sun, 21 Apr 2024 07:57:02 +0800 Subject: refactor: tell user session compression (#426) --- src/utils/mod.rs | 2 +- src/utils/spinner.rs | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src/utils') diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 3df1a09..ba438a7 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -9,7 +9,7 @@ pub use self::abort_signal::{create_abort_signal, AbortSignal}; pub use self::clipboard::set_text; pub use self::prompt_input::*; pub use self::render_prompt::render_prompt; -pub use self::spinner::Spinner; +pub use self::spinner::{run_spinner, Spinner}; pub use self::tiktoken::cl100k_base_singleton; use fancy_regex::Regex; diff --git a/src/utils/spinner.rs b/src/utils/spinner.rs index c684901..3715eff 100644 --- a/src/utils/spinner.rs +++ b/src/utils/spinner.rs @@ -1,6 +1,11 @@ use anyhow::Result; use crossterm::{cursor, queue, style, terminal}; -use std::io::{Stdout, Write}; +use std::{ + io::{stdout, Stdout, Write}, + sync::mpsc, + thread, + time::Duration, +}; pub struct Spinner { index: usize, @@ -50,3 +55,18 @@ impl Spinner { Ok(()) } } + +pub fn run_spinner(message: &str, rx: mpsc::Receiver<()>) -> Result<()> { + let mut writer = stdout(); + let mut spinner = Spinner::new(message); + loop { + spinner.step(&mut writer)?; + if let Ok(()) = rx.try_recv() { + spinner.stop(&mut writer)?; + break; + } + thread::sleep(Duration::from_millis(50)) + } + spinner.stop(&mut writer)?; + Ok(()) +} -- cgit v1.2.3