use std::{
sync::{Arc, Mutex},
thread,
};
use crossbeam_channel::{unbounded, Sender};
use legacytranslate::LogLevel;
#[derive(Clone)]
pub struct MessageList
{
messages: Arc<Mutex<Vec<(LogLevel, String)>>>,
}
impl MessageList
{
#[allow(clippy::missing_panics_doc)]
#[must_use]
pub fn new() -> (Self, Sender<(LogLevel, String)>)
{
let messages = Arc::new(Mutex::new(vec![]));
let messages_clone = messages.clone();
let (tx, rx) = unbounded();
thread::spawn(move || {
let messages = messages_clone;
for (loglevel, mes) in &rx
{
println!("{loglevel:?}: {mes}");
messages.lock().unwrap().push((loglevel, mes));
}
});
(Self { messages }, tx)
}
#[allow(clippy::missing_panics_doc)]
#[must_use]
pub fn get_list(&self) -> Vec<String>
{
self.messages
.lock()
.unwrap()
.iter()
.map(|(loglevel, s)| format!("{loglevel:?}: {s}"))
.collect()
}
}