use std::collections::HashMap;
use super::MarkLineEntry;
use crate::app::window_state::WindowState;
impl WindowState {
pub(super) fn apply_mark_line_results(
&mut self,
pending_marks: HashMap<u64, Vec<MarkLineEntry>>,
current_scrollback_len: usize,
) {
let tab = if let Some(t) = self.tab_manager.active_tab_mut() {
t
} else {
return;
};
let trigger_ids_in_batch: Vec<u64> = pending_marks.keys().copied().collect();
tab.scripting.trigger_marks.retain(|m| {
if let Some(tid) = m.trigger_id
&& trigger_ids_in_batch.contains(&tid)
{
return m.line < current_scrollback_len;
}
true });
for (trigger_id, entries) in pending_marks {
let mut seen_rows = std::collections::HashSet::new();
let mut unique: Vec<MarkLineEntry> = Vec::new();
for (row, label, color) in entries.into_iter().rev() {
if seen_rows.insert(row) {
unique.push((row, label, color));
}
}
for (row, label, color) in unique {
let absolute_line = current_scrollback_len + row;
log::info!(
"Trigger {} MarkLine: row={} abs={} label={:?}",
trigger_id,
row,
absolute_line,
label
);
tab.scripting
.trigger_marks
.push(crate::scrollback_metadata::ScrollbackMark {
line: absolute_line,
exit_code: None,
start_time: None,
duration_ms: None,
command: label,
color,
trigger_id: Some(trigger_id),
});
}
}
}
}