apyr 0.0.0

A simple, fast, and easy to use TUI log browser.
use std::sync::Arc;

use crossbeam::channel;

use crate::state::App;

pub fn worker_thread(app_handle: Arc<App>, channel: channel::Receiver<(usize, usize)>) {
    loop {
        let range = channel.recv().unwrap();

        let re;
        {
            re = app_handle.re.read().unwrap().clone();
        }

        let mut matches = Vec::new();

        if let Some(re) = re {
            let log_lines = app_handle.log_lines.read().unwrap();
            for i in range.0..range.1 {
                if re.is_match(&log_lines[i]) {
                    matches.push(i);
                }
            }
        }

        if !matches.is_empty() {
            let mut app_matches = app_handle.matches.lock().unwrap();
            app_matches.append(&mut matches);
        }
    }
}