legacygui 0.1.2

A simple GUI audio player with strange features.
Documentation
//! Module for capturing legacylisten's localized messages

use std::{
    sync::{Arc, Mutex},
    thread,
};

use crossbeam_channel::{unbounded, Sender};
use legacytranslate::LogLevel;

/// Capturing legacylisten's localized messages
///
/// This struct captures the localized messages legacylisten normally
/// would print out.
#[derive(Clone)]
pub struct MessageList
{
    messages: Arc<Mutex<Vec<(LogLevel, String)>>>,
}

impl MessageList
{
    /// Creates a new [`MessageList`]
    // This cannot panic.
    #[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)
    }

    /// Returns all messages
    ///
    /// This function returns a copy of all messages.
    // This cannot panic.
    #[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()
    }
}