From d9300d80ff97a107779605a3d6a4518aab33c21a Mon Sep 17 00:00:00 2001 From: bel Date: Mon, 27 Mar 2023 19:49:11 -0600 Subject: [PATCH] learning that enums are cool and basically the interfaces i wanted --- src/gui.rs | 83 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/src/gui.rs b/src/gui.rs index e107692..896ecaf 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -38,8 +38,8 @@ pub fn main(cfg: GUI, output_stream: Box) -> iced::Result { } struct Main { - feedback_recv_c: std::sync::mpsc::Receiver, - feedback_send_c: std::sync::mpsc::Sender, + feedback_recv_c: std::sync::mpsc::Receiver, + feedback_send_c: std::sync::mpsc::Sender, ntfy_from_client: String, ntfy_from_server: String, configuring: Option, @@ -93,6 +93,13 @@ enum Message { R, } +#[derive(Debug, Clone)] +enum Feedback { + Heard(String), + Say(String), + Send(String), +} + fn controller_button_to_string(btn: Message, cur: iced::keyboard::KeyCode) -> String { return format!("{:?} => {:?}", cur, btn); } @@ -114,16 +121,14 @@ impl Main { } } - fn send_say(&mut self, text: String) { - if text.len() == 0 { - return; - } - if text.len() > 1000 { - return; - } - match self.feedback_send_c.send(text.clone()) { + fn send_from_client(&mut self, text: Feedback) { + match text.clone() { + Feedback::Say(s) | Feedback::Send(s) if s.len() > 0 && s.len() < 1000 => {}, + _ => return, + }; + match self.feedback_send_c.send(text) { Ok(_) => {}, - Err(err) => eprintln!("main.send_say() failed to enqueue {}: {}", text, err), + Err(err) => eprintln!("main.send_say() failed to enqueue: {}", err), }; } @@ -136,9 +141,12 @@ impl Main { loop { match self.feedback_recv_c.try_recv() { Ok(msg) => { - self.ntfy_from_server = msg + match msg { + Feedback::Heard(msg) => self.ntfy_from_server = msg, + _ => {}, + }; }, - _ => return, + _ => {}, }; } } @@ -212,7 +220,7 @@ impl Application for Main { let (sender2, receiver2) = std::sync::mpsc::channel(); let feedback_cfg = flags.cfg.feedback.clone(); thread::spawn(move || { - Feedback{ + Feedbacker{ send_c: sender1, recv_c: receiver2, cfg: feedback_cfg, @@ -259,13 +267,13 @@ impl Application for Main { Message::InputTextEntryUpdate(payload) => { self.input_text_entry_value = payload; }, - Message::InputTextEntrySubmitSay => { - self.send_say(self.input_text_entry_value.clone()); + Message::InputTextEntrySubmitSend => { + self.send_from_client(Feedback::Send(self.input_text_entry_value.clone())); self.input_text_entry_value = String::from(""); }, - Message::InputTextEntrySubmitSend => { + Message::InputTextEntrySubmitSay => { + self.send_from_client(Feedback::Say(self.input_text_entry_value.clone())); self.input_text_entry_value = String::from(""); - eprintln!("TODO"); }, Message::EventOccurred(event) if self.configuring.is_some() => { match event { @@ -391,13 +399,13 @@ impl Application for Main { } } -struct Feedback { - send_c: std::sync::mpsc::Sender, - recv_c: std::sync::mpsc::Receiver, +struct Feedbacker { + send_c: std::sync::mpsc::Sender, + recv_c: std::sync::mpsc::Receiver, cfg: GUIFeedback, } -impl Feedback { +impl Feedbacker { fn listen(&mut self) { loop { std::thread::sleep(std::time::Duration::from_secs(2)); @@ -408,9 +416,7 @@ impl Feedback { _ => {}, }; match self.read_from_client() { - Some(msg) if msg.len() > 0 => { - self.write_from_client(msg.clone()); - }, + Some(msg) => self.write_from_client(msg.clone()), _ => {}, }; } @@ -435,14 +441,14 @@ impl Feedback { } fn write_from_server(&mut self, msg: String) { - match self.send_c.send(msg.clone()) { + match self.send_c.send(Feedback::Heard(msg.clone())) { Ok(_) => {}, Err(err) => eprintln!("feedback.listen() failed to display {}: {}", msg, err), }; } - fn read_from_client(&mut self) -> Option { - let mut last: Option = None; + fn read_from_client(&mut self) -> Option { + let mut last: Option = None; loop { match self.recv_c.try_recv() { Ok(msg) => { @@ -454,15 +460,18 @@ impl Feedback { return last; } - fn write_from_client(&mut self, msg: String) { - match &self.cfg.url_say { - Some(url) => { - match reqwest::blocking::get(format!("{}{}", url, msg)) { - Err(err) => { - eprintln!("feedback.write_from_client: cannot say: {}", err); - }, - _ => {}, - }; + fn write_from_client(&mut self, msg: Feedback) { + match msg { + Feedback::Say(say) | Feedback::Send(say) if say.len() > 0 => match &self.cfg.url_say { + Some(url) => { + match reqwest::blocking::get(format!("{}{}", url, say)) { + Err(err) => { + eprintln!("feedback.write_from_client: cannot say: {}", err); + }, + _ => {}, + }; + }, + _ => {}, }, _ => {}, };