#![allow(
clippy::wildcard_imports,
clippy::too_many_arguments,
clippy::needless_pass_by_value,
dead_code,
reason = "split-out module preserves existing code while keeping files under the linecheck limit"
)]
use super::*;
pub(crate) fn kill_matching_sessions(
dir: &Path,
matches: &dyn Fn(&str) -> bool,
is_alive: &dyn Fn(&str) -> bool,
kill: &dyn Fn(&str),
) -> usize {
let Ok(entries) = std::fs::read_dir(dir) else {
return 0;
};
let mut killed = 0;
for entry in entries.flatten() {
if !entry.file_type().is_ok_and(|ft| ft.is_dir()) {
continue;
}
let name = entry.file_name().to_string_lossy().into_owned();
let Some((dir_slug, _ts)) = parse_workbench_name(&name) else {
continue;
};
if !matches(dir_slug) {
continue;
}
let session = format!("moadim-{name}");
if is_alive(&session) {
kill(&session);
killed += 1;
}
}
killed
}
pub(crate) fn kill_sessions_for_slug(
dir: &Path,
slug: &str,
is_alive: &dyn Fn(&str) -> bool,
kill: &dyn Fn(&str),
) -> usize {
kill_matching_sessions(dir, &|dir_slug| dir_slug == slug, is_alive, kill)
}
pub fn kill_sessions_for_deleted_routine(slug: &str) -> usize {
kill_sessions_for_slug(
&workbenches_dir(),
slug,
&tmux_session_alive,
&tmux_kill_session,
)
}
pub fn kill_all_routine_sessions() -> usize {
kill_matching_sessions(
&workbenches_dir(),
&|_dir_slug| true,
&tmux_session_alive,
&tmux_kill_session,
)
}