summaryrefslogtreecommitdiffstats
path: root/src/render/stream.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-10-29 14:15:02 +0800
committerGitHub <noreply@github.com>2024-10-29 14:15:02 +0800
commitbf07cdf256e1e3008578972f5916a4d6763554f5 (patch)
tree3f48ead051403a7f270198578e86a92672bb4208 /src/render/stream.rs
parentbb542f6e92fd782b70c44fddb21d013c289d0a3c (diff)
downloadaichat-bf07cdf256e1e3008578972f5916a4d6763554f5.tar.gz
refactor: improve code quality (#956)
Diffstat (limited to 'src/render/stream.rs')
-rw-r--r--src/render/stream.rs37
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;
}
}