diff options
| author | sigoden <sigoden@gmail.com> | 2024-10-29 14:15:02 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-29 14:15:02 +0800 |
| commit | bf07cdf256e1e3008578972f5916a4d6763554f5 (patch) | |
| tree | 3f48ead051403a7f270198578e86a92672bb4208 /src/render/stream.rs | |
| parent | bb542f6e92fd782b70c44fddb21d013c289d0a3c (diff) | |
| download | aichat-bf07cdf256e1e3008578972f5916a4d6763554f5.tar.gz | |
refactor: improve code quality (#956)
Diffstat (limited to 'src/render/stream.rs')
| -rw-r--r-- | src/render/stream.rs | 37 |
1 files changed, 13 insertions, 24 deletions
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<SseEvent>, 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<SseEvent>, abort: &AbortSignal) -> Result<()> { +pub async fn raw_stream( + mut rx: UnboundedReceiver<SseEvent>, + 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<SseEvent>, abort: &AbortSignal async fn markdown_stream_inner( mut rx: UnboundedReceiver<SseEvent>, 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; } } |
