From 49b61129c95a3528eaf25dabcb55825b5ed7be72 Mon Sep 17 00:00:00 2001 From: sigoden Date: Sun, 28 Jul 2024 08:56:00 +0800 Subject: feat: add `config.stream` and `.set stream` repl command (#759) --- src/utils/spinner.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/utils/spinner.rs') 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(task: F, spinner_message: &str) -> Result +where + F: Future>, +{ + if *IS_STDOUT_TERMINAL { + let spinner = create_spinner(spinner_message).await; + let ret = task.await; + spinner.stop(); + ret + } else { + task.await + } +} -- cgit v1.2.3