diff --git a/src/config.rs b/src/config.rs index 296e0b0..5484efa 100644 --- a/src/config.rs +++ b/src/config.rs @@ -126,13 +126,13 @@ fn build_config_std() -> Config { suffix: env::var("INPUT_GUI_PRESS_SUFFIX").unwrap_or(String::from("")), }, release: PreSufFix{ - prefix: env::var("INPUT_GUI_RELEASE_PREFIX").unwrap_or(String::from("!")), + prefix: env::var("INPUT_GUI_RELEASE_PREFIX").unwrap_or(String::from("")), suffix: env::var("INPUT_GUI_RELEASE_SUFFIX").unwrap_or(String::from("")), }, format: match env::var("INPUT_GUI_FORMAT") { Ok(x) => Some(x), Err(_) => match env::var("INPUT_GUI_FORMAT_V01").unwrap_or(String::from("false")) == String::from("true") { - true => Some(String::from("TODO")), + true => Some(String::from("{\"T\":{{ms}},\"U\":\"{{user}}\",\"Y\":\"{{pressed}}\",\"N\":\"{{released}}\"}")), false => None, }, }, diff --git a/src/gui.rs b/src/gui.rs index cbdef09..2295d51 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -5,6 +5,7 @@ use iced::subscription; use iced::{Alignment, Element, Application, Settings, Subscription, Theme, Command}; use iced_futures::backend::native::async_std::time::every; use handlebars::Handlebars; +use serde_json::json; use std::time::{SystemTime, UNIX_EPOCH}; use crate::stream::OutputStream; @@ -117,28 +118,49 @@ impl Main { None => {}, }; } + let mut t = vec![]; self.keys_newly_down.clear(); for key_code in self.keys_up.iter() { match self.key_code_to_string(key_code) { Some(x) => { for c in x.chars() { for c in self.flags.cfg.release.prefix.chars() { - s.push(c); + t.push(c); } - s.push(c); + t.push(c); for c in self.flags.cfg.release.suffix.chars() { - s.push(c); + t.push(c); } } }, None => {}, }; } - if s.len() > 0 { - self.flags.output_stream.put(s); + if t.len() + s.len() > 0 { + self.flags.output_stream.put(self.sprintf(s, t)); } self.keys_up.clear(); } + + fn sprintf(&self, pressed: Vec, released: Vec) -> Vec { + match self.flags.cfg.format.clone() { + Some(x) => { + let reg = Handlebars::new(); + return reg.render_template(&x, &json!({ + "pressed": pressed.iter().collect::(), + "released": released.iter().collect::(), + "ms": SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis(), + "user": String::from(""), + })).unwrap().chars().collect(); + }, + None => { + let mut combo = vec![]; + combo.extend(pressed); + combo.extend(released); + return combo; + }, + } + } } impl Application for Main {