|
|
|
|
@ -1,4 +1,5 @@
|
|
|
|
|
import os |
|
|
|
|
import threading |
|
|
|
|
|
|
|
|
|
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex |
|
|
|
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject |
|
|
|
|
@ -118,12 +119,14 @@ class QEDaemon(AuthMixin, QObject):
|
|
|
|
|
_use_single_password = False |
|
|
|
|
_password = None |
|
|
|
|
|
|
|
|
|
_backendWalletLoaded = pyqtSignal([str], arguments=['password']) |
|
|
|
|
|
|
|
|
|
availableWalletsChanged = pyqtSignal() |
|
|
|
|
fxChanged = pyqtSignal() |
|
|
|
|
newWalletWizardChanged = pyqtSignal() |
|
|
|
|
serverConnectWizardChanged = pyqtSignal() |
|
|
|
|
|
|
|
|
|
walletLoaded = pyqtSignal() |
|
|
|
|
walletLoaded = pyqtSignal([str,str], arguments=['name','path']) |
|
|
|
|
walletRequiresPassword = pyqtSignal([str,str], arguments=['name','path']) |
|
|
|
|
walletOpenError = pyqtSignal([str], arguments=["error"]) |
|
|
|
|
walletDeleteError = pyqtSignal([str,str], arguments=['code', 'message']) |
|
|
|
|
@ -132,6 +135,9 @@ class QEDaemon(AuthMixin, QObject):
|
|
|
|
|
super().__init__(parent) |
|
|
|
|
self.daemon = daemon |
|
|
|
|
self.qefx = QEFX(daemon.fx, daemon.config) |
|
|
|
|
|
|
|
|
|
self._backendWalletLoaded.connect(self._on_backend_wallet_loaded) |
|
|
|
|
|
|
|
|
|
self._walletdb = QEWalletDB() |
|
|
|
|
self._walletdb.validPasswordChanged.connect(self.passwordValidityCheck) |
|
|
|
|
|
|
|
|
|
@ -171,14 +177,14 @@ class QEDaemon(AuthMixin, QObject):
|
|
|
|
|
if not self._walletdb.ready: |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
wallet = self.daemon.load_wallet(self._path, password) |
|
|
|
|
if wallet is not None: |
|
|
|
|
self._current_wallet = QEWallet.getInstanceFor(wallet) |
|
|
|
|
if not wallet_already_open: |
|
|
|
|
self.availableWallets.updateWallet(self._path) |
|
|
|
|
self._current_wallet.password = password |
|
|
|
|
self.walletLoaded.emit() |
|
|
|
|
def load_wallet_task(): |
|
|
|
|
try: |
|
|
|
|
wallet = self.daemon.load_wallet(self._path, password) |
|
|
|
|
|
|
|
|
|
if wallet is None: |
|
|
|
|
self._logger.info('could not open wallet') |
|
|
|
|
self.walletOpenError.emit('could not open wallet') |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
if self.daemon.config.get('single_password'): |
|
|
|
|
self._use_single_password = self.daemon.update_password_for_directory(old_password=password, new_password=password) |
|
|
|
|
@ -189,13 +195,26 @@ class QEDaemon(AuthMixin, QObject):
|
|
|
|
|
self._logger.info('use single password disabled by config') |
|
|
|
|
|
|
|
|
|
self.daemon.config.save_last_wallet(wallet) |
|
|
|
|
|
|
|
|
|
run_hook('load_wallet', wallet) |
|
|
|
|
else: |
|
|
|
|
self._logger.info('could not open wallet') |
|
|
|
|
self.walletOpenError.emit('could not open wallet') |
|
|
|
|
except WalletFileException as e: |
|
|
|
|
self._logger.error(str(e)) |
|
|
|
|
self.walletOpenError.emit(str(e)) |
|
|
|
|
|
|
|
|
|
self._backendWalletLoaded.emit(password) |
|
|
|
|
except WalletFileException as e: |
|
|
|
|
self._logger.error(str(e)) |
|
|
|
|
self.walletOpenError.emit(str(e)) |
|
|
|
|
|
|
|
|
|
threading.Thread(target=load_wallet_task).start() |
|
|
|
|
|
|
|
|
|
@pyqtSlot() |
|
|
|
|
@pyqtSlot(str) |
|
|
|
|
def _on_backend_wallet_loaded(self, password = None): |
|
|
|
|
self._logger.debug('_on_backend_wallet_loaded') |
|
|
|
|
wallet = self.daemon._wallets[self._path] |
|
|
|
|
self._current_wallet = QEWallet.getInstanceFor(wallet) |
|
|
|
|
self.availableWallets.updateWallet(self._path) |
|
|
|
|
self._current_wallet.password = password |
|
|
|
|
self.walletLoaded.emit(self._name, self._path) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pyqtSlot(QEWallet) |
|
|
|
|
@pyqtSlot(QEWallet, bool) |
|
|
|
|
|