diff --git a/examples/worf-warden/src/main.rs b/examples/worf-warden/src/main.rs index 52cabe7..3232291 100644 --- a/examples/worf-warden/src/main.rs +++ b/examples/worf-warden/src/main.rs @@ -1,15 +1,15 @@ +use enigo::{Enigo, Keyboard}; use std::process::Command; use std::thread::sleep; use std::time::Duration; -use enigo::{Enigo, Keyboard}; -use worf_lib::{config, gui, Error}; use worf_lib::config::Config; -use worf_lib::gui::{KeyBinding, ItemProvider, MenuItem, Modifier, Key}; +use worf_lib::gui::{ItemProvider, Key, KeyBinding, MenuItem, Modifier}; +use worf_lib::{Error, config, gui}; #[derive(Clone)] struct PasswordProvider { -items: Vec> + items: Vec>, } impl PasswordProvider { @@ -22,20 +22,29 @@ impl PasswordProvider { let stdout = String::from_utf8_lossy(&output.stdout); // todo the own solution should support images. - let mut items: Vec<_>= stdout.lines().map(|line| - MenuItem::new(line.to_owned(), None, None, vec![], None, 0.0, Some(String::new())) - ).collect(); + let mut items: Vec<_> = stdout + .lines() + .map(|line| { + MenuItem::new( + line.to_owned(), + None, + None, + vec![], + None, + 0.0, + Some(String::new()), + ) + }) + .collect(); gui::apply_sort(&mut items, &config.sort_order()); - Self { - items - } + Self { items } } } impl ItemProvider for PasswordProvider { fn get_elements(&mut self, _: Option<&str>) -> (bool, Vec>) { - (false, self.items.clone()) + (false, self.items.clone()) } fn get_sub_elements(&mut self, _: &MenuItem) -> (bool, Option>>) { @@ -52,10 +61,12 @@ fn rbw_get(name: &str, field: &str) -> String { .output() .expect("Failed to execute command"); - String::from_utf8_lossy(&output.stdout).trim_end().to_string() + String::from_utf8_lossy(&output.stdout) + .trim_end() + .to_string() } -fn rbw_get_user(name: &str) -> String{ +fn rbw_get_user(name: &str) -> String { rbw_get(name, "user") } @@ -77,7 +88,7 @@ fn main() -> anyhow::Result<()> { }; let type_user = KeyBinding { - key: Key::Num2, + key: Key::Num2, modifiers: Modifier::Alt, label: "Alt+2 Type All".to_string(), }; @@ -89,25 +100,25 @@ fn main() -> anyhow::Result<()> { }; let reload = KeyBinding { - key: Key::R, + key: Key::R, modifiers: Modifier::Alt, label: "Alt+r Sync".to_string(), }; let urls = KeyBinding { - key: Key::U, // switch view to urls + key: Key::U, // switch view to urls modifiers: Modifier::Alt, label: "Alt+u Sync".to_string(), }; let names = KeyBinding { - key: Key::N, // switch view to names + key: Key::N, // switch view to names modifiers: Modifier::Alt, label: "Alt+n Sync".to_string(), }; let folders = KeyBinding { - key: Key::C, // switch view to folders + key: Key::C, // switch view to folders modifiers: Modifier::Alt, label: "Alt+c Sync".to_string(), }; @@ -124,23 +135,37 @@ fn main() -> anyhow::Result<()> { label: "Alt+l Sync".to_string(), }; - match gui::show(config, provider, false, None, Some(vec![type_all.clone(), type_user, type_totp, reload, urls, names, folders, totp, lock])) { + match gui::show( + config, + provider, + false, + None, + Some(vec![ + type_all.clone(), + type_user, + type_totp, + reload, + urls, + names, + folders, + totp, + lock, + ]), + ) { Ok(selection) => { let mut enigo = Enigo::new(&enigo::Settings::default())?; let id = selection.menu.label.replace("\n", ""); sleep(Duration::from_millis(250)); - if let Some(key) = selection.custom_key { - if key.label == type_all.label { - enigo.text(&rbw_get_user(&id))?; - enigo.key(enigo::Key::Tab, enigo::Direction::Press)?; - enigo.key(enigo::Key::Tab, enigo::Direction::Release)?; - enigo.text(&rbw_get_password(&id))?; - } + if let Some(key) = selection.custom_key { + if key.label == type_all.label { + enigo.text(&rbw_get_user(&id))?; + enigo.key(enigo::Key::Tab, enigo::Direction::Press)?; + enigo.key(enigo::Key::Tab, enigo::Direction::Release)?; + enigo.text(&rbw_get_password(&id))?; } + } } - Err(e) => { - return Err(anyhow::anyhow!(e)) - } + Err(e) => return Err(anyhow::anyhow!(e)), } Ok(()) } diff --git a/worf/src/lib/gui.rs b/worf/src/lib/gui.rs index 127342c..0d59e7e 100644 --- a/worf/src/lib/gui.rs +++ b/worf/src/lib/gui.rs @@ -793,7 +793,7 @@ fn handle_key_press( Some(&search_lock), None, meta.new_on_empty, - Some(&custom_key), + Some(custom_key), ) { log::error!("{e}"); } @@ -953,14 +953,16 @@ where T: Clone + Send, { if let Some(selected_item) = item { - send_selected_item(&ui, meta, custom_key, &selected_item); + send_selected_item(ui, meta, custom_key, &selected_item); return Ok(()); } else if let Some(s) = ui.main_box.selected_children().into_iter().next() { let list_items = ui.menu_rows.lock().unwrap(); let item = list_items.get(&s); if let Some(selected_item) = item { - send_selected_item(&ui, meta, custom_key, selected_item); - return Ok(()); + if selected_item.visible { + send_selected_item(ui, meta, custom_key, selected_item); + return Ok(()); + } } } @@ -984,9 +986,13 @@ where } } -fn send_selected_item(ui: &&UiElements, meta: &MetaData, custom_key: Option<&KeyBinding>, selected_item: &MenuItem) -where - T: Clone + Send +fn send_selected_item( + ui: &UiElements, + meta: &MetaData, + custom_key: Option<&KeyBinding>, + selected_item: &MenuItem, +) where + T: Clone + Send, { close_gui(&ui.app); if let Err(e) = meta.selected_sender.send(Ok(Selection { diff --git a/worf/src/main.rs b/worf/src/main.rs index a583877..fbf9d25 100644 --- a/worf/src/main.rs +++ b/worf/src/main.rs @@ -38,6 +38,7 @@ fn main() -> anyhow::Result<()> { Ok(()) } else { - Err(anyhow!("No mode provided")) + log::error!("No mode provided"); + Ok(()) } }