qml: report wallet open problems when walletdb cannot open a wallet (WalletFileException)
This commit is contained in:
@@ -56,7 +56,7 @@ Pane {
|
|||||||
height: row.height
|
height: row.height
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (Daemon.currentWallet.name != model.name)
|
if (!Daemon.currentWallet || Daemon.currentWallet.name != model.name)
|
||||||
Daemon.load_wallet(model.path)
|
Daemon.load_wallet(model.path)
|
||||||
else
|
else
|
||||||
app.stack.pop()
|
app.stack.pop()
|
||||||
|
|||||||
@@ -142,12 +142,17 @@ class QEDaemon(AuthMixin, QObject):
|
|||||||
|
|
||||||
self._walletdb = QEWalletDB()
|
self._walletdb = QEWalletDB()
|
||||||
self._walletdb.validPasswordChanged.connect(self.passwordValidityCheck)
|
self._walletdb.validPasswordChanged.connect(self.passwordValidityCheck)
|
||||||
|
self._walletdb.walletOpenProblem.connect(self.on_wallet_open_problem)
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def passwordValidityCheck(self):
|
def passwordValidityCheck(self):
|
||||||
if not self._walletdb._validPassword:
|
if not self._walletdb._validPassword:
|
||||||
self.walletRequiresPassword.emit(self._name, self._path)
|
self.walletRequiresPassword.emit(self._name, self._path)
|
||||||
|
|
||||||
|
@pyqtSlot(str)
|
||||||
|
def on_wallet_open_problem(self, error):
|
||||||
|
self.walletOpenError.emit(error)
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
@pyqtSlot(str, str)
|
@pyqtSlot(str, str)
|
||||||
|
|||||||
@@ -6,14 +6,15 @@ from electrum.logging import get_logger
|
|||||||
from electrum.storage import WalletStorage, StorageEncryptionVersion
|
from electrum.storage import WalletStorage, StorageEncryptionVersion
|
||||||
from electrum.wallet_db import WalletDB
|
from electrum.wallet_db import WalletDB
|
||||||
from electrum.bip32 import normalize_bip32_derivation, xpub_type
|
from electrum.bip32 import normalize_bip32_derivation, xpub_type
|
||||||
from electrum.util import InvalidPassword
|
from electrum.util import InvalidPassword, WalletFileException
|
||||||
from electrum import keystore
|
from electrum import keystore
|
||||||
|
|
||||||
class QEWalletDB(QObject):
|
class QEWalletDB(QObject):
|
||||||
_logger = get_logger(__name__)
|
_logger = get_logger(__name__)
|
||||||
|
|
||||||
fileNotFound = pyqtSignal()
|
fileNotFound = pyqtSignal()
|
||||||
pathChanged = pyqtSignal([bool], arguments=["ready"])
|
walletOpenProblem = pyqtSignal([str], arguments=['error'])
|
||||||
|
pathChanged = pyqtSignal([bool], arguments=['ready'])
|
||||||
needsPasswordChanged = pyqtSignal()
|
needsPasswordChanged = pyqtSignal()
|
||||||
needsHWDeviceChanged = pyqtSignal()
|
needsHWDeviceChanged = pyqtSignal()
|
||||||
passwordChanged = pyqtSignal()
|
passwordChanged = pyqtSignal()
|
||||||
@@ -149,21 +150,25 @@ class QEWalletDB(QObject):
|
|||||||
|
|
||||||
def load_db(self):
|
def load_db(self):
|
||||||
# needs storage accessible
|
# needs storage accessible
|
||||||
self._db = WalletDB(self._storage.read(), manual_upgrades=True)
|
try:
|
||||||
if self._db.requires_split():
|
self._db = WalletDB(self._storage.read(), manual_upgrades=True)
|
||||||
self._logger.warning('wallet requires split')
|
if self._db.requires_split():
|
||||||
self._requiresSplit = True
|
self._logger.warning('wallet requires split')
|
||||||
self.requiresSplitChanged.emit()
|
self._requiresSplit = True
|
||||||
return
|
self.requiresSplitChanged.emit()
|
||||||
if self._db.get_action():
|
return
|
||||||
self._logger.warning('action pending. QML version doesn\'t support continuation of wizard')
|
if self._db.get_action():
|
||||||
return
|
self._logger.warning('action pending. QML version doesn\'t support continuation of wizard')
|
||||||
|
return
|
||||||
|
|
||||||
if self._db.requires_upgrade():
|
if self._db.requires_upgrade():
|
||||||
self._logger.warning('wallet requires upgrade, upgrading')
|
self._logger.warning('wallet requires upgrade, upgrading')
|
||||||
self._db.upgrade()
|
self._db.upgrade()
|
||||||
self._db.write(self._storage)
|
self._db.write(self._storage)
|
||||||
|
|
||||||
self._ready = True
|
|
||||||
self.readyChanged.emit()
|
|
||||||
|
|
||||||
|
self._ready = True
|
||||||
|
self.readyChanged.emit()
|
||||||
|
except WalletFileException as e:
|
||||||
|
self._logger.error(f'{repr(e)}')
|
||||||
|
self._storage = None
|
||||||
|
self.walletOpenProblem.emit(str(e))
|
||||||
|
|||||||
Reference in New Issue
Block a user