use std::{
io,
sync::{atomic::Ordering, Arc},
};
use crossterm::tty::IsTty;
use crate::types::SharedState;
#[inline(always)]
pub fn push_line(app: &Arc<SharedState>, line: String, line_count: usize) {
{
app.logbuf.write(line);
}
app.regex_channel
.send((line_count, line_count + 1))
.unwrap();
}
pub fn reader_thread(app: Arc<SharedState>) {
let mut line_count: usize = 0;
let stdin = io::stdin();
if stdin.is_tty() {
push_line(&app, String::from(" ** EOF REACHED ** "), line_count);
return;
}
loop {
if app.should_quit.load(Ordering::Relaxed) {
break;
}
let mut buffer = String::new();
let size = stdin.read_line(&mut buffer);
match size {
Ok(0) => {
push_line(&app, String::from(" ** EOF REACHED ** "), line_count);
break;
}
Ok(_) => {
push_line(&app, buffer, line_count);
line_count += 1;
}
Err(_) => {
todo!("Handle me!");
}
}
}
}