mirror of
https://github.com/herdrdev/herdr.git
synced 2026-09-22 16:01:07 +00:00
48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
use std::time::Instant;
|
|
|
|
use super::{App, SESSION_SAVE_DEBOUNCE};
|
|
|
|
impl App {
|
|
pub(super) fn schedule_session_save(&mut self) {
|
|
if !self.no_session {
|
|
self.session_save_deadline = Some(Instant::now() + SESSION_SAVE_DEBOUNCE);
|
|
}
|
|
}
|
|
|
|
pub(crate) fn sync_session_save_schedule(&mut self) {
|
|
if self.state.session_dirty {
|
|
self.state.session_dirty = false;
|
|
self.schedule_session_save();
|
|
}
|
|
}
|
|
|
|
pub(crate) fn save_session_now(&mut self) {
|
|
if self.no_session {
|
|
self.session_save_deadline = None;
|
|
return;
|
|
}
|
|
|
|
if self.state.workspaces.is_empty() {
|
|
crate::persist::clear();
|
|
} else {
|
|
let snap = crate::persist::capture(
|
|
&self.state.workspaces,
|
|
&self.state.terminals,
|
|
&self.terminal_runtimes,
|
|
self.state.active,
|
|
self.state.selected,
|
|
self.state.agent_panel_scope,
|
|
self.state.sidebar_width,
|
|
self.state.sidebar_section_split,
|
|
self.state.collapsed_space_keys.clone(),
|
|
);
|
|
let history = self.persist_pane_history.then(|| {
|
|
crate::persist::capture_history(&self.state.workspaces, &self.terminal_runtimes)
|
|
});
|
|
crate::persist::save(&snap, history.as_ref());
|
|
}
|
|
|
|
self.session_save_deadline = None;
|
|
}
|
|
}
|