From bf07cdf256e1e3008578972f5916a4d6763554f5 Mon Sep 17 00:00:00 2001 From: sigoden Date: Tue, 29 Oct 2024 14:15:02 +0800 Subject: refactor: improve code quality (#956) --- src/render/mod.rs | 6 +++--- src/render/stream.rs | 37 +++++++++++++------------------------ 2 files changed, 16 insertions(+), 27 deletions(-) (limited to 'src/render') diff --git a/src/render/mod.rs b/src/render/mod.rs index 97161f8..9d93203 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -13,14 +13,14 @@ use tokio::sync::mpsc::UnboundedReceiver; pub async fn render_stream( rx: UnboundedReceiver, config: &GlobalConfig, - abort: AbortSignal, + abort_signal: AbortSignal, ) -> Result<()> { let ret = if *IS_STDOUT_TERMINAL { let render_options = config.read().render_options()?; let mut render = MarkdownRender::init(render_options)?; - markdown_stream(rx, &mut render, &abort).await + markdown_stream(rx, &mut render, &abort_signal).await } else { - raw_stream(rx, &abort).await + raw_stream(rx, &abort_signal).await }; ret.map_err(|err| err.context("Failed to reader stream")) } diff --git a/src/render/stream.rs b/src/render/stream.rs index 2264c16..07a1a18 100644 --- a/src/render/stream.rs +++ b/src/render/stream.rs @@ -1,12 +1,10 @@ use super::{MarkdownRender, SseEvent}; -use crate::utils::{create_spinner, AbortSignal}; +use crate::utils::{create_spinner, poll_abort_signal, AbortSignal}; use anyhow::Result; use crossterm::{ - cursor, - event::{self, Event, KeyCode, KeyModifiers}, - queue, style, + cursor, queue, style, terminal::{self, disable_raw_mode, enable_raw_mode}, }; use std::{ @@ -19,12 +17,12 @@ use tokio::sync::mpsc::UnboundedReceiver; pub async fn markdown_stream( rx: UnboundedReceiver, render: &mut MarkdownRender, - abort: &AbortSignal, + abort_signal: &AbortSignal, ) -> Result<()> { enable_raw_mode()?; let mut stdout = io::stdout(); - let ret = markdown_stream_inner(rx, render, abort, &mut stdout).await; + let ret = markdown_stream_inner(rx, render, abort_signal, &mut stdout).await; disable_raw_mode()?; @@ -34,9 +32,12 @@ pub async fn markdown_stream( ret } -pub async fn raw_stream(mut rx: UnboundedReceiver, abort: &AbortSignal) -> Result<()> { +pub async fn raw_stream( + mut rx: UnboundedReceiver, + abort_signal: &AbortSignal, +) -> Result<()> { loop { - if abort.aborted() { + if abort_signal.aborted() { return Ok(()); } if let Some(evt) = rx.recv().await { @@ -57,7 +58,7 @@ pub async fn raw_stream(mut rx: UnboundedReceiver, abort: &AbortSignal async fn markdown_stream_inner( mut rx: UnboundedReceiver, render: &mut MarkdownRender, - abort: &AbortSignal, + abort_signal: &AbortSignal, writer: &mut Stdout, ) -> Result<()> { let mut buffer = String::new(); @@ -68,7 +69,7 @@ async fn markdown_stream_inner( let mut spinner = Some(create_spinner("Generating").await); 'outer: loop { - if abort.aborted() { + if abort_signal.aborted() { return Ok(()); } for reply_event in gather_events(&mut rx).await { @@ -141,20 +142,8 @@ async fn markdown_stream_inner( } } - if crossterm::event::poll(Duration::from_millis(25))? { - if let Event::Key(key) = event::read()? { - match key.code { - KeyCode::Char('c') if key.modifiers == KeyModifiers::CONTROL => { - abort.set_ctrlc(); - break; - } - KeyCode::Char('d') if key.modifiers == KeyModifiers::CONTROL => { - abort.set_ctrld(); - break; - } - _ => {} - } - } + if poll_abort_signal(abort_signal)? { + break; } } -- cgit v1.2.3