(
&mut self,
terminal: &mut Terminal<CrosstermBackend<std::io::Stdout>>,
)
| 366 | } |
| 367 | |
| 368 | async fn event_loop( |
| 369 | &mut self, |
| 370 | terminal: &mut Terminal<CrosstermBackend<std::io::Stdout>>, |
| 371 | ) -> Result<()> { |
| 372 | let mut reader = EventStream::new(); |
| 373 | let mut tick = tokio::time::interval(Duration::from_millis(100)); |
| 374 | let mut feed_rx = self.feed_rx.take().expect("feed_rx taken once"); |
| 375 | let mut main_run_rx = self.main_run_rx.take().expect("main_run_rx taken once"); |
| 376 | let mut control_plane_prompt_rx = self.control_plane_prompt_rx.take(); |
| 377 | let mut relay_prompt_rx = self |
| 378 | .relay_prompt_rx |
| 379 | .take() |
| 380 | .expect("relay_prompt_rx taken once"); |
| 381 | let mut relay_abort_rx = self |
| 382 | .relay_abort_rx |
| 383 | .take() |
| 384 | .expect("relay_abort_rx taken once"); |
| 385 | let mut relay_resolve_rx = self |
| 386 | .relay_resolve_rx |
| 387 | .take() |
| 388 | .expect("relay_resolve_rx taken once"); |
| 389 | let mut relay_model_rx = self |
| 390 | .relay_model_rx |
| 391 | .take() |
| 392 | .expect("relay_model_rx taken once"); |
| 393 | let mut turn = TurnState::default(); |
| 394 | self.refresh_goal_state().await; |
| 395 | |
| 396 | loop { |
| 397 | terminal.draw(|f| self.render(f))?; |
| 398 | self.push_relay_snapshot(); |
| 399 | if self.quit { |
| 400 | break; |
| 401 | } |
| 402 | tokio::select! { |
| 403 | biased; |
| 404 | result = poll_turn(&mut turn.fut), if turn.fut.is_some() => { |
| 405 | self.finish_turn(&mut turn, result).await; |
| 406 | } |
| 407 | maybe_event = reader.next() => { |
| 408 | match maybe_event { |
| 409 | Some(Ok(event)) => self.handle_event(event, &mut turn, terminal).await?, |
| 410 | Some(Err(_)) => {} |
| 411 | None => self.quit = true, |
| 412 | } |
| 413 | } |
| 414 | Some(update) = feed_rx.recv() => { |
| 415 | self.apply_feed_update(update); |
| 416 | while let Ok(update) = feed_rx.try_recv() { |
| 417 | self.apply_feed_update(update); |
| 418 | } |
| 419 | } |
| 420 | Some(trace_id) = main_run_rx.recv(), if turn.fut.is_none() => { |
| 421 | self.start_triggered_turn(trace_id, &mut turn); |
| 422 | } |
| 423 | Some(text) = relay_prompt_rx.recv() => { |
| 424 | self.submit_remote_text(text, &mut turn); |
| 425 | } |
no test coverage detected