diff options
| author | sigoden <sigoden@gmail.com> | 2024-07-28 08:56:00 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-28 08:56:00 +0800 |
| commit | 49b61129c95a3528eaf25dabcb55825b5ed7be72 (patch) | |
| tree | 18f4e8b46c8f5ca8093f1684a4c1dfa7d9f92a51 /src/utils | |
| parent | 3441630c6223ebbab55d62c969390edf865d3d34 (diff) | |
| download | aichat-49b61129c95a3528eaf25dabcb55825b5ed7be72.tar.gz | |
feat: add `config.stream` and `.set stream` repl command (#759)
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/mod.rs | 2 | ||||
| -rw-r--r-- | src/utils/spinner.rs | 24 |
2 files changed, 20 insertions, 6 deletions
diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 340359c..4e5428a 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -16,7 +16,7 @@ pub use self::path::*; pub use self::prompt_input::*; pub use self::render_prompt::render_prompt; pub use self::request::*; -pub use self::spinner::{create_spinner, Spinner}; +pub use self::spinner::*; use anyhow::{Context, Result}; use fancy_regex::Regex; diff --git a/src/utils/spinner.rs b/src/utils/spinner.rs index 8f386db..53969f4 100644 --- a/src/utils/spinner.rs +++ b/src/utils/spinner.rs @@ -1,7 +1,9 @@ +use super::IS_STDOUT_TERMINAL; + use anyhow::Result; use crossterm::{cursor, queue, style, terminal}; -use is_terminal::IsTerminal; use std::{ + future::Future, io::{stdout, Write}, time::Duration, }; @@ -10,7 +12,6 @@ use tokio::{sync::mpsc, time::interval}; pub struct SpinnerInner { index: usize, message: String, - is_not_terminal: bool, } impl SpinnerInner { @@ -20,12 +21,11 @@ impl SpinnerInner { SpinnerInner { index: 0, message: message.to_string(), - is_not_terminal: !stdout().is_terminal(), } } fn step(&mut self) -> Result<()> { - if self.is_not_terminal || self.message.is_empty() { + if !*IS_STDOUT_TERMINAL || self.message.is_empty() { return Ok(()); } let mut writer = stdout(); @@ -50,7 +50,7 @@ impl SpinnerInner { } fn clear_message(&mut self) -> Result<()> { - if self.is_not_terminal || self.message.is_empty() { + if !*IS_STDOUT_TERMINAL || self.message.is_empty() { return Ok(()); } self.message.clear(); @@ -126,3 +126,17 @@ async fn run_spinner(message: String, mut rx: mpsc::UnboundedReceiver<SpinnerEve } Ok(()) } + +pub async fn run_with_spinner<F, T>(task: F, spinner_message: &str) -> Result<T> +where + F: Future<Output = Result<T>>, +{ + if *IS_STDOUT_TERMINAL { + let spinner = create_spinner(spinner_message).await; + let ret = task.await; + spinner.stop(); + ret + } else { + task.await + } +} |
