summary refs log tree commit diff
path: root/src/system/log.rs
blob: c80963f8de8f158f50a18da6867c7ef935c89e9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use crate::SystemUiEvent;
use std::{collections::HashMap, sync::{mpsc::Sender, Arc}};

#[derive(Clone)]
pub struct Logger {
    system_name: String,
    ui_sender : Sender<(String, SystemUiEvent)>,
    name_lookup: Arc<HashMap<String, String>>,
}

impl Logger {
    pub fn new(system_name: String, system_config: crate::config::System, ui_sender: Sender<(String, SystemUiEvent)>) -> Self {
        Self {
            system_name,
            ui_sender,
            name_lookup: Arc::new(system_config.members.iter().map(|member| (member.discord_token.clone(), member.name.clone())).collect::<HashMap<_,_>>()),
        }
    }

    pub async fn log_connect(&self, member_token: String) {
        let member_name = self.name_lookup.get(&member_token).expect("Member not found").clone();
        let _ = self.ui_sender.send((self.system_name.clone(), SystemUiEvent::GatewayConnect(member_name)));

    }

    pub async fn log_disconnect(&self, member_token: String) {
        let member_name = self.name_lookup.get(&member_token).expect("Member not found").clone();
        let _ = self.ui_sender.send((self.system_name.clone(), SystemUiEvent::GatewayDisconnect(member_name)));
    }

    pub async fn log_err(&self, member_token: Option<String>, message: String) {
        let member = member_token.map(|token| self.name_lookup.get(&token).cloned()).flatten();

        let _ = self.ui_sender.send((
            self.system_name.clone(),
            SystemUiEvent::LogLine(if let Some(member_name) = member {
                format!("{member_name}: Error: {message}")
            } else {
                format!("{message}")
            })
        ));
    }

    pub async fn log_line(&self, member_token: Option<String>, message: String) {
        let member = member_token.map(|token| self.name_lookup.get(&token).cloned()).flatten();

        let _ = self.ui_sender.send((
            self.system_name.clone(),
            SystemUiEvent::LogLine(if let Some(member_name) = member {
                format!("{member_name}: {message}")
            } else {
                format!("{message}")
            })
        ));
    }
}