From 24299bfa170c8dc1c8a8de7f6a4cdd8c8ccbcd6d Mon Sep 17 00:00:00 2001 From: shadow cat Date: Tue, 14 Apr 2026 16:26:20 -0400 Subject: [PATCH] don't panic on keyring fail + disable button while connecting --- src/bin/client/data/mod.rs | 7 +++---- src/bin/client/ui/connect.rs | 13 ++++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/bin/client/data/mod.rs b/src/bin/client/data/mod.rs index 2c33ece..001f313 100644 --- a/src/bin/client/data/mod.rs +++ b/src/bin/client/data/mod.rs @@ -29,11 +29,10 @@ impl ClientData { self.data.load::().push(info); } - pub fn password(&self, info: &AccountInfo) -> String { + pub fn password(&self, info: &AccountInfo) -> Result { let user_path = info.path(); - let entry = - keyring_core::Entry::new("openworm", &user_path).expect("failed to open keyring entry"); - entry.get_password().unwrap() + let entry = keyring_core::Entry::new("openworm", &user_path).map_err(|e| e.to_string())?; + entry.get_password().map_err(|e| e.to_string()) } pub fn accounts(&self) -> DataGuard { diff --git a/src/bin/client/ui/connect.rs b/src/bin/client/ui/connect.rs index 926d7be..de02a87 100644 --- a/src/bin/client/ui/connect.rs +++ b/src/bin/client/ui/connect.rs @@ -31,8 +31,7 @@ pub fn start(rsc: &mut Rsc, data: &ClientData) -> WeakWidget { .add(rsc), color::DARK, rsc, - ) - .add(rsc); + ); let account = account.clone(); let cert_hex = data .data @@ -44,14 +43,22 @@ pub fn start(rsc: &mut Rsc, data: &ClientData) -> WeakWidget { let cert = decode_hex(&cert_hex).unwrap(); keyring::use_native_store(true).unwrap(); rsc.events.register(button, Submit, move |ctx, rsc| { + let password = match ctx.state.data.password(&account) { + Ok(v) => v, + Err(err) => { + ctx.state.error(&err, rsc); + return; + } + }; + button.disable(rsc); let account = account.clone(); let cert = cert.clone(); - let password = ctx.state.data.password(&account); let event_sender = rsc.window_event.clone(); rsc.spawn_task(async move |mut ctx| { let mut fail = |reason: &str| { let reason = reason.to_string(); ctx.update(move |ctx, rsc| { + button.enable(rsc); ctx.error(&reason, rsc); }) };