Compare commits
5 Commits
75149668ef
...
v0.1.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
787201c3a8 | ||
|
|
6f8a76cb13 | ||
|
|
0f4c567405 | ||
|
|
d9300d80ff | ||
|
|
72ae3121d4 |
766
Cargo.lock
generated
766
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -8,9 +8,8 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1.0.156", features = ["derive"] }
|
serde = { version = "1.0.156", features = ["derive"] }
|
||||||
serde_yaml = "0.9.19"
|
serde_yaml = "0.9.19"
|
||||||
serde_json = "1"
|
serde_json = { version = "1", default-features=false, features=["alloc"] }
|
||||||
iced = "0.8.0"
|
iced = { version = "0.8.0", default-features=false, features = ["glow"] }
|
||||||
iced_native = "0.9.1"
|
|
||||||
handlebars = "4"
|
handlebars = "4"
|
||||||
iced_futures = { version = "0.6.0", features = ["async-std"] }
|
iced_futures = { version = "0.6.0", default-features=false, features = ["async-std"] }
|
||||||
reqwest = { version = "0.11", features = ["blocking"] }
|
reqwest = { version = "0.11", default-features=false, features = ["blocking"] }
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ pub struct GUI {
|
|||||||
pub struct GUIFeedback {
|
pub struct GUIFeedback {
|
||||||
pub url_read: Option<String>,
|
pub url_read: Option<String>,
|
||||||
pub url_say: Option<String>,
|
pub url_say: Option<String>,
|
||||||
|
pub url_send: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
@@ -140,6 +141,10 @@ fn build_config_std() -> Config {
|
|||||||
Ok(url) => Some(url),
|
Ok(url) => Some(url),
|
||||||
Err(_) => None,
|
Err(_) => None,
|
||||||
},
|
},
|
||||||
|
url_send: match env::var("INPUT_GUI_FEEDBACK_URL_SEND") {
|
||||||
|
Ok(url) => Some(url),
|
||||||
|
Err(_) => None,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
device: None,
|
device: None,
|
||||||
|
|||||||
96
src/gui.rs
96
src/gui.rs
@@ -38,8 +38,8 @@ pub fn main(cfg: GUI, output_stream: Box<dyn OutputStream>) -> iced::Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct Main {
|
struct Main {
|
||||||
feedback_recv_c: std::sync::mpsc::Receiver<String>,
|
feedback_recv_c: std::sync::mpsc::Receiver<Feedback>,
|
||||||
feedback_send_c: std::sync::mpsc::Sender<String>,
|
feedback_send_c: std::sync::mpsc::Sender<Feedback>,
|
||||||
ntfy_from_client: String,
|
ntfy_from_client: String,
|
||||||
ntfy_from_server: String,
|
ntfy_from_server: String,
|
||||||
configuring: Option<Message>,
|
configuring: Option<Message>,
|
||||||
@@ -76,7 +76,7 @@ struct Stick {
|
|||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
enum Message {
|
enum Message {
|
||||||
EventOccurred(iced_native::Event),
|
EventOccurred(iced::Event),
|
||||||
Tick,
|
Tick,
|
||||||
InputTextEntryUpdate(String),
|
InputTextEntryUpdate(String),
|
||||||
InputTextEntrySubmitSay,
|
InputTextEntrySubmitSay,
|
||||||
@@ -93,6 +93,13 @@ enum Message {
|
|||||||
R,
|
R,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
enum Feedback {
|
||||||
|
Heard(String),
|
||||||
|
Say(String),
|
||||||
|
Send(String),
|
||||||
|
}
|
||||||
|
|
||||||
fn controller_button_to_string(btn: Message, cur: iced::keyboard::KeyCode) -> String {
|
fn controller_button_to_string(btn: Message, cur: iced::keyboard::KeyCode) -> String {
|
||||||
return format!("{:?} => {:?}", cur, btn);
|
return format!("{:?} => {:?}", cur, btn);
|
||||||
}
|
}
|
||||||
@@ -114,16 +121,14 @@ impl Main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_say(&mut self, text: String) {
|
fn send_from_client(&mut self, text: Feedback) {
|
||||||
if text.len() == 0 {
|
match text.clone() {
|
||||||
return;
|
Feedback::Say(s) | Feedback::Send(s) if s.len() > 0 && s.len() < 1000 => {},
|
||||||
}
|
_ => return,
|
||||||
if text.len() > 1000 {
|
};
|
||||||
return;
|
match self.feedback_send_c.send(text) {
|
||||||
}
|
|
||||||
match self.feedback_send_c.send(text.clone()) {
|
|
||||||
Ok(_) => {},
|
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 {
|
loop {
|
||||||
match self.feedback_recv_c.try_recv() {
|
match self.feedback_recv_c.try_recv() {
|
||||||
Ok(msg) => {
|
Ok(msg) => {
|
||||||
self.ntfy_from_server = msg
|
match msg {
|
||||||
|
Feedback::Heard(msg) => self.ntfy_from_server = msg,
|
||||||
|
_ => break,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
_ => return,
|
_ => break,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -212,7 +220,7 @@ impl Application for Main {
|
|||||||
let (sender2, receiver2) = std::sync::mpsc::channel();
|
let (sender2, receiver2) = std::sync::mpsc::channel();
|
||||||
let feedback_cfg = flags.cfg.feedback.clone();
|
let feedback_cfg = flags.cfg.feedback.clone();
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
Feedback{
|
Feedbacker{
|
||||||
send_c: sender1,
|
send_c: sender1,
|
||||||
recv_c: receiver2,
|
recv_c: receiver2,
|
||||||
cfg: feedback_cfg,
|
cfg: feedback_cfg,
|
||||||
@@ -259,13 +267,13 @@ impl Application for Main {
|
|||||||
Message::InputTextEntryUpdate(payload) => {
|
Message::InputTextEntryUpdate(payload) => {
|
||||||
self.input_text_entry_value = payload;
|
self.input_text_entry_value = payload;
|
||||||
},
|
},
|
||||||
Message::InputTextEntrySubmitSay => {
|
Message::InputTextEntrySubmitSend => {
|
||||||
self.send_say(self.input_text_entry_value.clone());
|
self.send_from_client(Feedback::Send(self.input_text_entry_value.clone()));
|
||||||
self.input_text_entry_value = String::from("");
|
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("");
|
self.input_text_entry_value = String::from("");
|
||||||
eprintln!("TODO");
|
|
||||||
},
|
},
|
||||||
Message::EventOccurred(event) if self.configuring.is_some() => {
|
Message::EventOccurred(event) if self.configuring.is_some() => {
|
||||||
match event {
|
match event {
|
||||||
@@ -391,13 +399,13 @@ impl Application for Main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Feedback {
|
struct Feedbacker {
|
||||||
send_c: std::sync::mpsc::Sender<String>,
|
send_c: std::sync::mpsc::Sender<Feedback>,
|
||||||
recv_c: std::sync::mpsc::Receiver<String>,
|
recv_c: std::sync::mpsc::Receiver<Feedback>,
|
||||||
cfg: GUIFeedback,
|
cfg: GUIFeedback,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Feedback {
|
impl Feedbacker {
|
||||||
fn listen(&mut self) {
|
fn listen(&mut self) {
|
||||||
loop {
|
loop {
|
||||||
std::thread::sleep(std::time::Duration::from_secs(2));
|
std::thread::sleep(std::time::Duration::from_secs(2));
|
||||||
@@ -408,9 +416,7 @@ impl Feedback {
|
|||||||
_ => {},
|
_ => {},
|
||||||
};
|
};
|
||||||
match self.read_from_client() {
|
match self.read_from_client() {
|
||||||
Some(msg) if msg.len() > 0 => {
|
Some(msg) => self.write_from_client(msg.clone()),
|
||||||
self.write_from_client(msg.clone());
|
|
||||||
},
|
|
||||||
_ => {},
|
_ => {},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -435,14 +441,14 @@ impl Feedback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn write_from_server(&mut self, msg: String) {
|
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(_) => {},
|
Ok(_) => {},
|
||||||
Err(err) => eprintln!("feedback.listen() failed to display {}: {}", msg, err),
|
Err(err) => eprintln!("feedback.listen() failed to display {}: {}", msg, err),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_from_client(&mut self) -> Option<String> {
|
fn read_from_client(&mut self) -> Option<Feedback> {
|
||||||
let mut last: Option<String> = None;
|
let mut last: Option<Feedback> = None;
|
||||||
loop {
|
loop {
|
||||||
match self.recv_c.try_recv() {
|
match self.recv_c.try_recv() {
|
||||||
Ok(msg) => {
|
Ok(msg) => {
|
||||||
@@ -454,15 +460,29 @@ impl Feedback {
|
|||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_from_client(&mut self, msg: String) {
|
fn write_from_client(&mut self, msg: Feedback) {
|
||||||
match &self.cfg.url_say {
|
match msg {
|
||||||
Some(url) => {
|
Feedback::Send(send) if send.len() > 0 => match &self.cfg.url_send {
|
||||||
match reqwest::blocking::get(format!("{}{}", url, msg)) {
|
Some(url) => {
|
||||||
Err(err) => {
|
match reqwest::blocking::get(format!("{}{}", url, send)) {
|
||||||
eprintln!("feedback.write_from_client: cannot say: {}", err);
|
Err(err) => {
|
||||||
},
|
eprintln!("feedback.write_from_client: cannot send: {}", err);
|
||||||
_ => {},
|
},
|
||||||
};
|
_ => {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
},
|
||||||
|
Feedback::Say(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);
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
},
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user