summaryrefslogtreecommitdiffstats
path: root/src/utils
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-07-28 08:56:00 +0800
committerGitHub <noreply@github.com>2024-07-28 08:56:00 +0800
commit49b61129c95a3528eaf25dabcb55825b5ed7be72 (patch)
tree18f4e8b46c8f5ca8093f1684a4c1dfa7d9f92a51 /src/utils
parent3441630c6223ebbab55d62c969390edf865d3d34 (diff)
downloadaichat-49b61129c95a3528eaf25dabcb55825b5ed7be72.tar.gz
feat: add `config.stream` and `.set stream` repl command (#759)
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/mod.rs2
-rw-r--r--src/utils/spinner.rs24
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
+ }
+}