use super::super::transcript::BlockKind;
use super::super::types::{App, TrustPrompt};
use crate::config::runtime::RuntimeConfig;
use crate::interactive::session_activation;
use crate::interactive::session_state::SessionState;
use crate::interactive::session_trust;
use saya_store::SqliteStateStore;
use std::sync::Arc;
pub(crate) fn build_app(
runtime: &RuntimeConfig,
state_db: &SqliteStateStore,
state: &mut SessionState,
session: &mut crate::interactive::session_runtime::SessionRuntime,
trusted_echo: Option<&str>,
trust_pending: bool,
) -> App {
let profiles = runtime
.connections
.profiles
.keys()
.cloned()
.collect::<Vec<String>>();
let mut app = App::new(
profiles,
Arc::new(runtime.clone()),
state_db.clone(),
session.universe(),
);
if let Some(notice) = session.notice() {
app.transcript.push(BlockKind::System, notice.to_string());
}
if let Some(echo) = trusted_echo {
app.transcript.push(BlockKind::System, echo.to_string());
}
if let Some(line) = session_activation::line_if_bypass(state, runtime, &session.universe()) {
app.transcript.push(BlockKind::System, line);
}
if let Some(note) = session_trust::bypass_no_lane_note(
session_activation::is_bypass_mode(state),
session.universe().host_composed(),
) {
app.transcript.push(BlockKind::System, note);
}
app.reload_at_refs(state);
app.show_history(state);
if trust_pending {
app.overlays.trust = Some(TrustPrompt::default());
}
app
}