use super::WindowManager;
impl WindowManager {
pub fn start_script(&mut self, config_index: usize) {
crate::debug_info!(
"SCRIPT",
"start_script called with config_index={}",
config_index
);
let focused = self.get_focused_window_id();
if let Some(window_id) = focused
&& let Some(ws) = self.windows.get_mut(&window_id)
&& let Some(tab) = ws.tab_manager.active_tab_mut()
{
crate::debug_info!(
"SCRIPT",
"start_script: ws.config.load().scripts.len()={}, tab.scripting.script_ids.len()={}",
ws.config.load().scripts.len(),
tab.scripting.script_ids.len()
);
if config_index >= ws.config.load().scripts.len() {
crate::debug_error!(
"SCRIPT",
"Script config index {} out of range (scripts.len={})",
config_index,
ws.config.load().scripts.len()
);
return;
}
let script_config = &ws.config.load().scripts[config_index];
crate::debug_info!(
"SCRIPT",
"start_script: found config name='{}' path='{}' enabled={} args={:?}",
script_config.name,
script_config.script_path,
script_config.enabled,
script_config.args
);
if !script_config.enabled {
crate::debug_info!(
"SCRIPT",
"Script '{}' is disabled, not starting",
script_config.name
);
return;
}
crate::debug_info!("SCRIPT", "start_script: spawning process...");
let result = {
let term = tab.terminal.blocking_read();
tab.scripting
.start_script_at(&term, config_index, script_config)
};
match result {
Ok(script_id) => {
crate::debug_info!("SCRIPT", "start_script: SUCCESS script_id={}", script_id);
}
Err(e) => {
let err_msg = format!("Failed to start: {}", e);
crate::debug_error!(
"SCRIPT",
"start_script: FAILED to start '{}': {}",
script_config.name,
e
);
if let Some(sw) = &mut self.settings_window {
let errors = &mut sw.settings_ui.script_errors;
while errors.len() <= config_index {
errors.push(String::new());
}
errors[config_index] = err_msg;
sw.request_redraw();
}
return;
}
}
self.sync_script_running_state();
} else {
crate::debug_error!(
"SCRIPT",
"start_script: no focused window or active tab found"
);
}
}
pub fn stop_script(&mut self, config_index: usize) {
log::debug!("stop_script called with index {}", config_index);
let focused = self.get_focused_window_id();
if let Some(window_id) = focused
&& let Some(ws) = self.windows.get_mut(&window_id)
&& let Some(tab) = ws.tab_manager.active_tab_mut()
{
{
let term = tab.terminal.blocking_read();
tab.scripting.clear_script_at(&term, config_index);
}
self.sync_script_running_state();
}
}
}