use super::super::session_save::{poll_session_save, queue_session_save};
use super::super::sql_task;
use super::super::transcript::BlockKind;
use super::super::types::App;
use crate::interactive::compact_task;
use crate::interactive::session_state::SessionState;
use saya_store::FsSessionStore;
pub(crate) fn tick_workers(app: &mut App, store: &FsSessionStore, state: &mut SessionState) {
poll_session_save(app, store);
app.poll_run_panel(state.show_thinking);
if app.compact_task.is_some() {
compact_task::poll(&mut *app, state);
queue_session_save(&mut *app, store, state);
}
if let Some((rx, task, _started)) = app.sql_task.as_ref() {
match rx.try_recv() {
Ok(event) => {
let task = task.clone();
app.sql_task = None;
app.request.started = None;
app.request.activity = None;
sql_task::complete(&task, event, &mut app.transcript, &mut app.last_query);
if matches!(task.followup, sql_task::Followup::Sql { .. }) {
app.wide_table.h_offset = 0;
}
}
Err(std::sync::mpsc::TryRecvError::Empty) => {}
Err(std::sync::mpsc::TryRecvError::Disconnected) => {
app.sql_task = None;
app.request.started = None;
app.request.activity = None;
app.transcript.push(
BlockKind::Error,
"SQL command ended without a result.".to_string(),
);
}
}
}
}