summary refs log tree commit diff
path: root/src/system/log.rs
diff options
context:
space:
mode:
authorAshelyn Rose <git@ashen.earth>2025-03-01 14:03:56 -0700
committerAshelyn Rose <git@ashen.earth>2025-03-01 14:03:56 -0700
commit89bf5a8b4f85583795b9211eaca485d6fc633389 (patch)
tree18375298e6906f0644b9ed5b4d9c974d8e609cfe /src/system/log.rs
parent99e5f7e3ff51aebc6796d1b7cf852367eb35d8d5 (diff)
Refactor logging
Diffstat (limited to 'src/system/log.rs')
-rw-r--r--src/system/log.rs57
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}")
+            })
+        ));
+    }
+}
+