diff options
Diffstat (limited to 'src/system/log.rs')
-rw-r--r-- | src/system/log.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/system/log.rs b/src/system/log.rs new file mode 100644 index 0000000..c80963f --- /dev/null +++ b/src/system/log.rs @@ -0,0 +1,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}") + }) + )); + } +} + |