invert (in)validPassword property in QEWalletDB, add invalidPassword signal.
This is to better support state in OpenWallet page
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user