From ce1be698a6547d78510eb0ea84fdba2fdecd0049 Mon Sep 17 00:00:00 2001 From: Michele Balistreri Date: Thu, 30 Sep 2021 14:52:46 +0300 Subject: [PATCH] handle signals and card states --- src/app/keycard/core.nim | 15 ++++++--- src/app/keycard/view.nim | 21 ++++++++---- ui/onboarding/Keycard.qml | 52 ++++++++++++++++++++++++++++-- ui/shared/keycard/PairingModal.qml | 5 ++- 4 files changed, 79 insertions(+), 14 deletions(-) diff --git a/src/app/keycard/core.nim b/src/app/keycard/core.nim index a011ad6d73..7d24aecf9e 100644 --- a/src/app/keycard/core.nim +++ b/src/app/keycard/core.nim @@ -2,6 +2,9 @@ import NimQml, chronicles, std/wrapnils import status/[signals, status, keycard] import view +logScope: + topics = "keycard-model" + type KeycardController* = ref object view*: KeycardView variant*: QVariant @@ -29,18 +32,22 @@ proc getCardState(self: KeycardController) = if not appInfo.installed: self.view.cardState = NotKeycard + self.view.cardNotKeycard() elif not appInfo.initialized: self.view.cardState = PreInit + self.view.cardPreInit() elif self.attemptOpenSecureChannel(): + # here we will also be able to check if the card is Frozen/Blocked self.view.cardState = Paired + self.view.cardPaired() elif appInfo.availableSlots > 0: self.view.cardState = Unpaired + self.view.cardUnpaired() else: self.view.cardState = NoFreeSlots + self.view.cardNoFreeSlots() proc init*(self: KeycardController) = - discard """ self.status.events.on(SignalType.KeycardConnected.event) do(e:Args): - getCardState() - self.view.cardConnected() - """ \ No newline at end of file + self.getCardState() + self.view.cardConnected() \ No newline at end of file diff --git a/src/app/keycard/view.nim b/src/app/keycard/view.nim index 530f4bea65..4a1c24793e 100644 --- a/src/app/keycard/view.nim +++ b/src/app/keycard/view.nim @@ -35,10 +35,15 @@ QtObject: result.setup proc cardConnected*(self: KeycardView) {.signal.} - proc cardDisconnected*(self: KeycardView) {.signal.} - - proc cardStateChanged*(self: KeycardView, cardState: int) {.signal.} + proc cardNotKeycard*(self: KeycardView) {.signal.} + proc cardPreInit*(self: KeycardView) {.signal.} + proc cardUnpaired*(self: KeycardView) {.signal.} + proc cardNoFreeSlots*(self: KeycardView) {.signal.} + proc cardPaired*(self: KeycardView) {.signal.} + proc cardFrozen*(self: KeycardView) {.signal.} + proc cardBlocked*(self: KeycardView) {.signal.} + proc cardAuthenticated*(self: KeycardView) {.signal.} proc startConnection*(self: KeycardView) {.slot.} = discard self.status.keycard.start() @@ -47,6 +52,10 @@ QtObject: self.cardState = Disconnected discard self.status.keycard.stop() - proc `cardState=`*(self: KeycardView, cardState: CardState) = - self.cardState = cardState - self.cardStateChanged(int(cardState)) \ No newline at end of file + proc pair*(self: KeycardView, password: string) {.slot.} = + discard """ + on succesful pairing, save and change card state + otherwise throw error + + self.status.keycard.pair(password) + """ \ No newline at end of file diff --git a/ui/onboarding/Keycard.qml b/ui/onboarding/Keycard.qml index d1176285b5..e8b90fdabc 100644 --- a/ui/onboarding/Keycard.qml +++ b/ui/onboarding/Keycard.qml @@ -17,21 +17,23 @@ Item { CreatePINModal { id: createPinModal onClosed: function () { - pairingModal.open() + keycardView.onClosed() } } PairingModal { id: pairingModal onClosed: function () { - pinModal.open() + if (!pairingModal.submitted) { + keycardView.onClosed() + } } } PINModal { id: pinModal onClosed: function () { - keycardView.open() + keycardView.onClosed() } } @@ -41,4 +43,48 @@ Item { keycardView.onClosed() } } + + Connections { + id: connection + target: keycardModel + ignoreUnknownSignals: true + + onCardUnpaired: { + pairingModal.open() + } + + onCardPaired: { + + } + + //TODO: support the states below + + onCardPreInit: { + keycardView.onClosed() + } + + onCardFrozen: { + keycardView.onClosed() + + } + + onCardBlocked: { + keycardView.onClosed() + } + + // TODO: handle these by showing an error an prompting for another card + // later add factory reset option for the NoFreeSlots case + + onCardNoFreeSlots: { + //status-lib currently always returns availableSlots = 0 so we end up here + //keycardView.onClosed() + pairingModal.open() + } + + onCardNotKeycard: { + keycardView.onClosed() + + } + + } } \ No newline at end of file diff --git a/ui/shared/keycard/PairingModal.qml b/ui/shared/keycard/PairingModal.qml index 092198fff2..ddfacb74e6 100644 --- a/ui/shared/keycard/PairingModal.qml +++ b/ui/shared/keycard/PairingModal.qml @@ -7,6 +7,7 @@ import "../../shared" ModalPopup { property bool pairingPasswordFieldValid: false + property bool submitted: false id: popup title: qsTr("Insert pairing code") @@ -57,7 +58,9 @@ ModalPopup { enabled: pairingPasswordFieldValid onClicked: { - + submitted = true + keycardModel.pair(pairingPasswordField.text) + popup.close() } } }