From d550b01e65153203e1c10742e8afd2d7e6ddd8f2 Mon Sep 17 00:00:00 2001 From: Sale Djenic Date: Fri, 7 Jul 2023 17:24:02 +0200 Subject: [PATCH] fix(@desktop/onboarding): app loading screen displayed forever when creating a new Status account Fixes: #11454 --- src/app/core/signals/remote_signals/base.nim | 6 ----- src/app/core/signals/remote_signals/node.nim | 28 ++++++++++++++++++++ src/app/core/signals/signals_manager.nim | 11 +++++--- src/app/core/signals/types.nim | 4 +-- src/app/modules/startup/controller.nim | 2 +- 5 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 src/app/core/signals/remote_signals/node.nim diff --git a/src/app/core/signals/remote_signals/base.nim b/src/app/core/signals/remote_signals/base.nim index bc7624adf3..786bb857dd 100644 --- a/src/app/core/signals/remote_signals/base.nim +++ b/src/app/core/signals/remote_signals/base.nim @@ -8,9 +8,3 @@ export signal_type type Signal* = ref object of Args signalType* {.serializedFieldName("type").}: SignalType signalTypeStr*: string - -type SignalError* = object - error*: string - -type NodeSignal* = ref object of Signal - event*: SignalError diff --git a/src/app/core/signals/remote_signals/node.nim b/src/app/core/signals/remote_signals/node.nim new file mode 100644 index 0000000000..4fa13f3a27 --- /dev/null +++ b/src/app/core/signals/remote_signals/node.nim @@ -0,0 +1,28 @@ +import json + +import base + +import ../../../../app_service/service/accounts/dto/[accounts] +import ../../../../app_service/service/settings/dto/[settings] + +type NodeSignal* = ref object of Signal + error*: string + account*: AccountDto + settings*: SettingsDto + +proc fromEvent*(T: type NodeSignal, event: JsonNode): NodeSignal = + result = NodeSignal() + + if not event.contains("event") or event["event"].kind == JNull: + return + + let e = event["event"] + + if e.contains("error"): + result.error = e["error"].getStr + + if e.contains("account") and e["account"].kind != JNull: + result.account = e["account"].toAccountDto() + + if e.contains("settings") and e["settings"].kind != JNull: + result.settings = e["settings"].toSettingsDto() \ No newline at end of file diff --git a/src/app/core/signals/signals_manager.nim b/src/app/core/signals/signals_manager.nim index 643e64a274..5694cafa40 100644 --- a/src/app/core/signals/signals_manager.nim +++ b/src/app/core/signals/signals_manager.nim @@ -49,8 +49,8 @@ QtObject: return if(signal.signalType == SignalType.NodeLogin): - if(NodeSignal(signal).event.error != ""): - error "node.login", error=NodeSignal(signal).event.error + if NodeSignal(signal).error != "": + error "node.login", error=NodeSignal(signal).error if(signal.signalType == SignalType.NodeCrashed): error "node.crashed", error=statusSignal @@ -83,7 +83,12 @@ QtObject: of SignalType.EnvelopeExpired: EnvelopeExpiredSignal.fromEvent(jsonSignal) of SignalType.WhisperFilterAdded: WhisperFilterSignal.fromEvent(jsonSignal) of SignalType.Wallet: WalletSignal.fromEvent(jsonSignal) - of SignalType.NodeLogin: Json.decode($jsonSignal, NodeSignal) + of SignalType.NodeReady, + SignalType.NodeCrashed, + SignalType.NodeStarted, + SignalType.NodeStopped, + SignalType.NodeLogin: + NodeSignal.fromEvent(jsonSignal) of SignalType.PeerStats: PeerStatsSignal.fromEvent(jsonSignal) of SignalType.DiscoverySummary: DiscoverySummarySignal.fromEvent(jsonSignal) of SignalType.MailserverRequestCompleted: MailserverRequestCompletedSignal.fromEvent(jsonSignal) diff --git a/src/app/core/signals/types.nim b/src/app/core/signals/types.nim index 95eb773ab0..d481aa7e8a 100644 --- a/src/app/core/signals/types.nim +++ b/src/app/core/signals/types.nim @@ -3,9 +3,9 @@ import ./remote_signals/[base, chronicles_logs, community, discovery_summary, envelope, expired, mailserver, messages, peerstats, signal_type, stats, wallet, whisper_filter, update_available, status_updates, waku_backed_up_profile, waku_backed_up_settings, waku_backed_up_keypair, waku_backed_up_watch_only_account, - waku_fetching_backup_progress, pairing] + waku_fetching_backup_progress, pairing, node] export base, chronicles_logs, community, discovery_summary, envelope, expired, mailserver, messages, peerstats, signal_type, stats, wallet, whisper_filter, update_available, status_updates, waku_backed_up_profile, waku_backed_up_settings, waku_backed_up_keypair, waku_backed_up_watch_only_account, - waku_fetching_backup_progress, pairing \ No newline at end of file + waku_fetching_backup_progress, pairing, node \ No newline at end of file diff --git a/src/app/modules/startup/controller.nim b/src/app/modules/startup/controller.nim index 8e12a466b4..528840b8b0 100644 --- a/src/app/modules/startup/controller.nim +++ b/src/app/modules/startup/controller.nim @@ -133,7 +133,7 @@ proc delete*(self: Controller) = proc init*(self: Controller) = var handlerId = self.events.onWithUUID(SignalType.NodeLogin.event) do(e:Args): let signal = NodeSignal(e) - self.delegate.onNodeLogin(signal.event.error) + self.delegate.onNodeLogin(signal.error) self.cleanTmpData() self.connectionIds.add(handlerId)