use super::super::echo::{Echo, Target};
use crate::AppModel;
use std::path::Path;
impl AppModel {
pub(crate) fn await_conversation(&mut self, ws: &Path, conversation: &str, goal: &str) {
self.started = Some(Echo::started(ws, conversation, goal, self.now_unix()));
self.focus_agent(ws, conversation);
}
pub(crate) fn await_message(&mut self, ws: &Path, agent: &str, content: &str, queued: usize) {
self.started = Some(Echo::messaged(
&self.derived,
ws,
agent,
content,
queued,
self.now_unix(),
));
}
pub(in crate::app) fn adopt_started(&mut self) {
let Some(mut echo) = self.started.take() else {
return;
};
let resolved = echo.resolved(&self.derived);
if let Some(agent) = &resolved {
let claimed = self.focus.agent == echo.born;
echo.target = Target::Agent(agent.clone());
if claimed {
self.focus_agent(&echo.ws, agent);
}
}
let landed = echo.landed(&self.derived);
self.started = Some(echo);
if let Some(agent) = resolved {
self.release_held(&agent);
}
if landed {
self.started = None;
}
}
}