Wait for newlines, then render markdown on a line by line basis. Word wrap it for the current terminal size and then spit it out line by line into the UI. Also adds tests and fixes some UI regressions.
29 lines
862 B
Rust
29 lines
862 B
Rust
use std::sync::mpsc::Sender;
|
|
|
|
use crate::app_event::AppEvent;
|
|
use crate::session_log;
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub(crate) struct AppEventSender {
|
|
pub app_event_tx: Sender<AppEvent>,
|
|
}
|
|
|
|
impl AppEventSender {
|
|
pub(crate) fn new(app_event_tx: Sender<AppEvent>) -> Self {
|
|
Self { app_event_tx }
|
|
}
|
|
|
|
/// Send an event to the app event channel. If it fails, we swallow the
|
|
/// error and log it.
|
|
pub(crate) fn send(&self, event: AppEvent) {
|
|
// Record inbound events for high-fidelity session replay.
|
|
// Avoid double-logging Ops; those are logged at the point of submission.
|
|
if !matches!(event, AppEvent::CodexOp(_)) {
|
|
session_log::log_inbound_app_event(&event);
|
|
}
|
|
if let Err(e) = self.app_event_tx.send(event) {
|
|
tracing::error!("failed to send event: {e}");
|
|
}
|
|
}
|
|
}
|