From bcb5a19bf288021c28b40cfeb3a1457fd8f086bd Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Fri, 24 Jul 2026 18:02:01 +0700 Subject: [PATCH] update --- crates/state/src/lib.rs | 26 +++++-------------------- crates/workspace/src/dialogs/import.rs | 13 +++++++++++-- crates/workspace/src/lib.rs | 27 +++++++------------------- 3 files changed, 23 insertions(+), 43 deletions(-) diff --git a/crates/state/src/lib.rs b/crates/state/src/lib.rs index 9b5dfcf..811d3f1 100644 --- a/crates/state/src/lib.rs +++ b/crates/state/src/lib.rs @@ -47,12 +47,12 @@ impl Global for GlobalNostrRegistry {} /// Signer event. #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub enum StateEvent { + /// The state is busy + Busy, + /// User has no signer + NoSigner, /// The signer has changed SignerChanged, - /// Connecting to the bootstrapping relay - Connecting, - /// Connected to the bootstrapping relay - Connected, /// An error occurred Error(String), } @@ -65,14 +65,6 @@ impl StateEvent { Self::Error(error.into()) } - pub fn is_connecting(&self) -> bool { - matches!(self, StateEvent::Connecting) - } - - pub fn is_connected(&self) -> bool { - matches!(self, StateEvent::Connected) - } - pub fn signer_changed(&self) -> bool { matches!(self, StateEvent::SignerChanged) } @@ -198,9 +190,6 @@ impl NostrRegistry { fn connect_bootstrap_relays(&mut self, cx: &mut Context) { let client = self.client(); - // Emit connecting event - cx.emit(StateEvent::Connecting); - let task: Task> = cx.background_spawn(async move { // Add indexer relay to the relay pool for url in INDEXER_RELAYS.into_iter() { @@ -226,12 +215,7 @@ impl NostrRegistry { this.update(cx, |_this, cx| { cx.emit(StateEvent::error(e.to_string())); })?; - } else { - this.update(cx, |_this, cx| { - cx.emit(StateEvent::Connected); - })?; } - Ok(()) })); } @@ -273,7 +257,7 @@ impl NostrRegistry { } _ => { this.update(cx, |_, cx| { - cx.notify(); + cx.emit(StateEvent::NoSigner); })?; } } diff --git a/crates/workspace/src/dialogs/import.rs b/crates/workspace/src/dialogs/import.rs index c0ba7c4..030c63b 100644 --- a/crates/workspace/src/dialogs/import.rs +++ b/crates/workspace/src/dialogs/import.rs @@ -61,6 +61,9 @@ impl ImportIdentity { let value = self.key_input.read(cx).value(); let password = self.pass_input.read(cx).value(); + // Set loading state + self.set_loading(true, cx); + if value.starts_with("ncryptsec1") { self.ncryptsec(value, password, window, cx); return; @@ -86,7 +89,6 @@ impl ImportIdentity { nostr.update(cx, |this, cx| { this.set_signer(keys, cx); }); - window.close_modal(cx); } else { self.set_error("Invalid key", cx); } @@ -165,10 +167,17 @@ impl ImportIdentity { .detach(); } + fn set_loading(&mut self, status: bool, cx: &mut Context) { + self.loading = status; + cx.notify(); + } + fn set_error(&mut self, message: S, cx: &mut Context) where S: Into, { + self.set_loading(false, cx); + // Update error message self.error.update(cx, |this, cx| { *this = Some(message.into()); @@ -223,7 +232,7 @@ impl Render for ImportIdentity { this.child( div() .text_xs() - .text_color(cx.theme().warning_active) + .text_color(cx.theme().text_warning) .child(MSG), ) }) diff --git a/crates/workspace/src/lib.rs b/crates/workspace/src/lib.rs index bf0593e..6d80c60 100644 --- a/crates/workspace/src/lib.rs +++ b/crates/workspace/src/lib.rs @@ -37,7 +37,6 @@ pub fn init(window: &mut Window, cx: &mut App) -> Entity { } struct DeviceNotifcation; -struct RelayNotifcation; struct MsgRelayNotification; #[derive(Action, Clone, PartialEq, Eq, Deserialize)] @@ -86,8 +85,6 @@ impl Workspace { cx.observe_in(&nostr, window, move |this, nostr, window, cx| { if nostr.read(cx).current_user().is_some() { this.set_center_layout(window, cx); - } else { - this.import_identity(window, cx); } }), ); @@ -103,25 +100,15 @@ impl Workspace { // Subscribe to the nostr events cx.subscribe_in(&nostr, window, move |this, _state, event, window, cx| { match event { - StateEvent::Connecting => { - let note = Notification::new() - .id::() - .message("Connecting to the bootstrap relays...") - .with_kind(NotificationKind::Info); - - window.push_notification(note, cx); - } - StateEvent::Connected => { - let note = Notification::new() - .id::() - .message("Connected to the bootstrap relays") - .with_kind(NotificationKind::Success); - - window.push_notification(note, cx); - } StateEvent::SignerChanged => { this.set_center_layout(window, cx); - window.close_all_modals(cx); + + cx.defer_in(window, |_this, window, cx| { + window.close_all_modals(cx); + }); + } + StateEvent::NoSigner => { + this.import_identity(window, cx); } _ => {} };