diff options
Diffstat (limited to 'src/bin/ttyplay/frames.rs')
-rw-r--r-- | src/bin/ttyplay/frames.rs | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/bin/ttyplay/frames.rs b/src/bin/ttyplay/frames.rs index 0808c58..dd60a21 100644 --- a/src/bin/ttyplay/frames.rs +++ b/src/bin/ttyplay/frames.rs @@ -44,13 +44,28 @@ impl FrameData { self.frames.len() } - pub fn search(&self, start: usize, query: &str) -> Option<usize> { - for (idx, frame) in self.frames.iter().enumerate().skip(start) { - if frame.screen.contents().contains(query) { - return Some(idx); - } + pub fn search( + &self, + start: usize, + query: &str, + backwards: bool, + ) -> Option<usize> { + if backwards { + self.frames + .iter() + .enumerate() + .rev() + .skip(self.frames.len() - start + 1) + .find(|(_, frame)| frame.screen.contents().contains(query)) + .map(|(i, _)| i) + } else { + self.frames + .iter() + .enumerate() + .skip(start) + .find(|(_, frame)| frame.screen.contents().contains(query)) + .map(|(i, _)| i) } - None } pub async fn add_frame(&mut self, frame: Frame) { |