1
0

invert (in)validPassword property in QEWalletDB, add invalidPassword signal.

This is to better support state in OpenWallet page
This commit is contained in:
Sander van Grieken
2022-07-05 18:30:54 +02:00
parent e289b8b46c
commit 0130e5aecf
3 changed files with 51 additions and 20 deletions

View File

@@ -8,7 +8,7 @@ import "controls"
Pane {
id: openwalletdialog
property string title: qsTr("Open Wallet")
property string name
@@ -39,7 +39,7 @@ Pane {
Layout.columnSpan: 2
Layout.alignment: Qt.AlignHCenter
text: qsTr("Invalid Password")
visible: wallet_db.invalidPassword && _unlockClicked
visible: !wallet_db.validPassword && _unlockClicked
width: parent.width * 2/3
error: true
}
@@ -53,16 +53,24 @@ Pane {
id: password
visible: wallet_db.needsPassword
echoMode: TextInput.Password
inputMethodHints: Qt.ImhSensitiveData
onTextChanged: {
unlockButton.enabled = true
_unlockClicked = false
}
onAccepted: {
unlock()
}
}
Button {
id: unlockButton
Layout.columnSpan: 2
Layout.alignment: Qt.AlignHCenter
visible: wallet_db.needsPassword
text: qsTr("Unlock")
onClicked: {
_unlockClicked = true
wallet_db.password = password.text
unlock()
}
}
@@ -87,8 +95,22 @@ Pane {
text: qsTr('Split wallet')
onClicked: wallet_db.doSplit()
}
BusyIndicator {
id: busy
running: false
Layout.columnSpan: 2
Layout.alignment: Qt.AlignHCenter
}
}
function unlock() {
unlockButton.enabled = false
_unlockClicked = true
wallet_db.password = password.text
openwalletdialog.forceActiveFocus()
}
WalletDB {
id: wallet_db
path: openwalletdialog.path
@@ -99,10 +121,17 @@ Pane {
}
onReadyChanged: {
if (ready) {
busy.running = true
Daemon.load_wallet(openwalletdialog.path, password.text)
app.stack.pop(null)
}
}
onInvalidPassword: {
password.forceActiveFocus()
}
}
Component.onCompleted: {
password.forceActiveFocus()
}
}

View File

@@ -97,7 +97,7 @@ class QEDaemon(AuthMixin, QObject):
self.daemon = daemon
self.qefx = QEFX(daemon.fx, daemon.config)
self._walletdb = QEWalletDB()
self._walletdb.invalidPasswordChanged.connect(self.passwordValidityCheck)
self._walletdb.validPasswordChanged.connect(self.passwordValidityCheck)
_logger = get_logger(__name__)
_loaded_wallets = QEWalletListModel()
@@ -115,7 +115,7 @@ class QEDaemon(AuthMixin, QObject):
@pyqtSlot()
def passwordValidityCheck(self):
if self._walletdb._invalidPassword:
if not self._walletdb._validPassword:
self.walletRequiresPassword.emit()
@pyqtSlot()

View File

@@ -25,20 +25,21 @@ class QEWalletDB(QObject):
needsPasswordChanged = pyqtSignal()
needsHWDeviceChanged = pyqtSignal()
passwordChanged = pyqtSignal()
invalidPasswordChanged = pyqtSignal()
validPasswordChanged = pyqtSignal()
requiresSplitChanged = pyqtSignal()
splitFinished = pyqtSignal()
readyChanged = pyqtSignal()
createError = pyqtSignal([str], arguments=["error"])
createSuccess = pyqtSignal()
invalidPassword = pyqtSignal()
def reset(self):
self._path = None
self._needsPassword = False
self._needsHWDevice = False
self._password = ''
self._requiresSplit = False
self._invalidPassword = False
self._validPassword = True
self._storage = None
self._db = None
@@ -110,15 +111,15 @@ class QEWalletDB(QObject):
def requiresSplit(self):
return self._requiresSplit
@pyqtProperty(bool, notify=invalidPasswordChanged)
def invalidPassword(self):
return self._invalidPassword
@pyqtProperty(bool, notify=validPasswordChanged)
def validPassword(self):
return self._validPassword
@invalidPassword.setter
def invalidPassword(self, invalidPassword):
if self._invalidPassword != invalidPassword:
self._invalidPassword = invalidPassword
self.invalidPasswordChanged.emit()
@validPassword.setter
def validPassword(self, validPassword):
if self._validPassword != validPassword:
self._validPassword = validPassword
self.validPasswordChanged.emit()
@pyqtProperty(bool, notify=readyChanged)
def ready(self):
@@ -148,9 +149,10 @@ class QEWalletDB(QObject):
try:
self._storage.decrypt('' if not self._password else self._password)
self.invalidPassword = False
self.validPassword = True
except InvalidPassword as e:
self.invalidPassword = True
self.validPassword = False
self.invalidPassword.emit()
if not self._storage.is_past_initial_decryption():
self._storage = None