Browse Source

qml: report wallet open problems when walletdb cannot open a wallet (WalletFileException)

master
Sander van Grieken 3 years ago
parent
commit
fe540200a9
  1. 2
      electrum/gui/qml/components/Wallets.qml
  2. 5
      electrum/gui/qml/qedaemon.py
  3. 45
      electrum/gui/qml/qewalletdb.py

2
electrum/gui/qml/components/Wallets.qml

@ -56,7 +56,7 @@ Pane {
height: row.height
onClicked: {
if (Daemon.currentWallet.name != model.name)
if (!Daemon.currentWallet || Daemon.currentWallet.name != model.name)
Daemon.load_wallet(model.path)
else
app.stack.pop()

5
electrum/gui/qml/qedaemon.py

@ -142,12 +142,17 @@ class QEDaemon(AuthMixin, QObject):
self._walletdb = QEWalletDB()
self._walletdb.validPasswordChanged.connect(self.passwordValidityCheck)
self._walletdb.walletOpenProblem.connect(self.on_wallet_open_problem)
@pyqtSlot()
def passwordValidityCheck(self):
if not self._walletdb._validPassword:
self.walletRequiresPassword.emit(self._name, self._path)
@pyqtSlot(str)
def on_wallet_open_problem(self, error):
self.walletOpenError.emit(error)
@pyqtSlot()
@pyqtSlot(str)
@pyqtSlot(str, str)

45
electrum/gui/qml/qewalletdb.py

@ -6,14 +6,15 @@ from electrum.logging import get_logger
from electrum.storage import WalletStorage, StorageEncryptionVersion
from electrum.wallet_db import WalletDB
from electrum.bip32 import normalize_bip32_derivation, xpub_type
from electrum.util import InvalidPassword
from electrum.util import InvalidPassword, WalletFileException
from electrum import keystore
class QEWalletDB(QObject):
_logger = get_logger(__name__)
fileNotFound = pyqtSignal()
pathChanged = pyqtSignal([bool], arguments=["ready"])
walletOpenProblem = pyqtSignal([str], arguments=['error'])
pathChanged = pyqtSignal([bool], arguments=['ready'])
needsPasswordChanged = pyqtSignal()
needsHWDeviceChanged = pyqtSignal()
passwordChanged = pyqtSignal()
@ -149,21 +150,25 @@ class QEWalletDB(QObject):
def load_db(self):
# needs storage accessible
self._db = WalletDB(self._storage.read(), manual_upgrades=True)
if self._db.requires_split():
self._logger.warning('wallet requires split')
self._requiresSplit = True
self.requiresSplitChanged.emit()
return
if self._db.get_action():
self._logger.warning('action pending. QML version doesn\'t support continuation of wizard')
return
if self._db.requires_upgrade():
self._logger.warning('wallet requires upgrade, upgrading')
self._db.upgrade()
self._db.write(self._storage)
self._ready = True
self.readyChanged.emit()
try:
self._db = WalletDB(self._storage.read(), manual_upgrades=True)
if self._db.requires_split():
self._logger.warning('wallet requires split')
self._requiresSplit = True
self.requiresSplitChanged.emit()
return
if self._db.get_action():
self._logger.warning('action pending. QML version doesn\'t support continuation of wizard')
return
if self._db.requires_upgrade():
self._logger.warning('wallet requires upgrade, upgrading')
self._db.upgrade()
self._db.write(self._storage)
self._ready = True
self.readyChanged.emit()
except WalletFileException as e:
self._logger.error(f'{repr(e)}')
self._storage = None
self.walletOpenProblem.emit(str(e))

Loading…
Cancel
Save