From c79414012c229cce53cc5b315dd075b40cc53271 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Thu, 10 Mar 2022 14:29:24 +0100 Subject: [PATCH] fix bug where undefined wallet instance crashes app --- electrum/gui/qml/components/main.qml | 1 + electrum/gui/qml/qedaemon.py | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/electrum/gui/qml/components/main.qml b/electrum/gui/qml/components/main.qml index 03852f8b5..7fe2e5156 100644 --- a/electrum/gui/qml/components/main.qml +++ b/electrum/gui/qml/components/main.qml @@ -198,6 +198,7 @@ ApplicationWindow Connections { target: Daemon function onWalletRequiresPassword() { + console.log('wallet requires password') app.stack.push(Qt.resolvedUrl("OpenWallet.qml"), {"path": Daemon.path}) // var dialog = _openWallet.createObject(app) //dialog.open() diff --git a/electrum/gui/qml/qedaemon.py b/electrum/gui/qml/qedaemon.py index 1a4751efa..e98e7dd90 100644 --- a/electrum/gui/qml/qedaemon.py +++ b/electrum/gui/qml/qedaemon.py @@ -6,6 +6,7 @@ from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex from electrum.util import register_callback, get_new_wallet_name from electrum.logging import get_logger from electrum.wallet import Wallet, Abstract_Wallet +from electrum.storage import WalletStorage from .qewallet import QEWallet @@ -89,26 +90,34 @@ class QEDaemon(QObject): walletRequiresPassword = pyqtSignal() activeWalletsChanged = pyqtSignal() availableWalletsChanged = pyqtSignal() + couldNotOpenFile = pyqtSignal() @pyqtSlot() @pyqtSlot(str) @pyqtSlot(str, str) def load_wallet(self, path=None, password=None): - self._logger.debug('load wallet ' + str(path)) if path == None: - path = self.daemon.config.get('gui_last_wallet') - self._path = path - self._logger.debug('load wallet #2 ' + str(path)) - if path is not None: - wallet = self.daemon.load_wallet(path, password) - self._logger.debug('load wallet #3 ' + str(path)) + self._path = self.daemon.config.get('gui_last_wallet') + else: + self._path = path + if self._path is None: + return + + self._logger.debug('load wallet ' + str(self._path)) + try: + storage = WalletStorage(self._path) + except StorageReadWriteError as e: + self.couldNotOpenFile.emit() + return + + wallet = self.daemon.load_wallet(self._path, password) if wallet != None: self._loaded_wallets.add_wallet(wallet=wallet) self._current_wallet = QEWallet(wallet) self.walletLoaded.emit() self.daemon.config.save_last_wallet(wallet) else: - self._logger.info('fail open wallet') + self._logger.info('password required but unset or incorrect') self.walletRequiresPassword.emit() @pyqtProperty('QString')