From dec4a8e2c712ba7c442eda86c3c48b95521c795e Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 14 Aug 2023 16:24:48 +0200 Subject: [PATCH] qml: wizard fixes --- electrum/gui/qml/qeapp.py | 8 +++++--- electrum/gui/qml/qedaemon.py | 14 ++++++++++---- electrum/gui/qml/qewizard.py | 21 ++++++++++++--------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/electrum/gui/qml/qeapp.py b/electrum/gui/qml/qeapp.py index 20de321b0..99ac72123 100644 --- a/electrum/gui/qml/qeapp.py +++ b/electrum/gui/qml/qeapp.py @@ -5,10 +5,9 @@ import os import sys import html import threading -import asyncio from typing import TYPE_CHECKING, Set -from PyQt5.QtCore import (pyqtSlot, pyqtSignal, pyqtProperty, QObject, QUrl, QLocale, +from PyQt5.QtCore import (pyqtSlot, pyqtSignal, pyqtProperty, QObject, qInstallMessageHandler, QTimer, QSortFilterProxyModel) from PyQt5.QtGui import QGuiApplication, QFontDatabase from PyQt5.QtQml import qmlRegisterType, qmlRegisterUncreatableType, QQmlApplicationEngine @@ -61,6 +60,7 @@ if 'ANDROID_DATA' in os.environ: notification = None + class QEAppController(BaseCrashReporter, QObject): _dummy = pyqtSignal() userNotify = pyqtSignal(str, str) @@ -319,6 +319,7 @@ class QEAppController(BaseCrashReporter, QObject): self._secureWindow = secure self.secureWindowChanged.emit() + class ElectrumQmlApplication(QGuiApplication): _valid = True @@ -376,7 +377,7 @@ class ElectrumQmlApplication(QGuiApplication): self.plugins = plugins self._qeconfig = QEConfig(config) self._qenetwork = QENetwork(daemon.network, self._qeconfig) - self.daemon = QEDaemon(daemon) + self.daemon = QEDaemon(daemon, self.plugins) self.appController = QEAppController(self, self.daemon, self.plugins) self._maxAmount = QEAmount(is_max=True) self.context.setContextProperty('AppController', self.appController) @@ -413,6 +414,7 @@ class ElectrumQmlApplication(QGuiApplication): return self.logger.warning(file) + class Exception_Hook(QObject, Logger): _report_exception = pyqtSignal(object, object, object, object) diff --git a/electrum/gui/qml/qedaemon.py b/electrum/gui/qml/qedaemon.py index 5c38e0b12..b728cbf36 100644 --- a/electrum/gui/qml/qedaemon.py +++ b/electrum/gui/qml/qedaemon.py @@ -1,5 +1,6 @@ import os import threading +from typing import TYPE_CHECKING from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject @@ -7,10 +8,8 @@ from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject from electrum.i18n import _ from electrum.logging import get_logger from electrum.util import WalletFileException, standardize_path -from electrum.wallet import Abstract_Wallet from electrum.plugin import run_hook from electrum.lnchannel import ChannelState -from electrum.daemon import Daemon from .auth import AuthMixin, auth_protect from .qefx import QEFX @@ -18,6 +17,11 @@ from .qewallet import QEWallet from .qewalletdb import QEWalletDB from .qewizard import QENewWalletWizard, QEServerConnectWizard +if TYPE_CHECKING: + from electrum.daemon import Daemon + from electrum.plugin import Plugins + + # wallet list model. supports both wallet basenames (wallet file basenames) # and whole Wallet instances (loaded wallets) class QEWalletListModel(QAbstractListModel): @@ -108,6 +112,7 @@ class QEWalletListModel(QAbstractListModel): return i += 1 + class QEDaemon(AuthMixin, QObject): _logger = get_logger(__name__) @@ -135,9 +140,10 @@ class QEDaemon(AuthMixin, QObject): walletOpenError = pyqtSignal([str], arguments=["error"]) walletDeleteError = pyqtSignal([str,str], arguments=['code', 'message']) - def __init__(self, daemon: 'Daemon', parent=None): + def __init__(self, daemon: 'Daemon', plugins: 'Plugins', parent=None): super().__init__(parent) self.daemon = daemon + self.plugins = plugins self.qefx = QEFX(daemon.fx, daemon.config) self._backendWalletLoaded.connect(self._on_backend_wallet_loaded) @@ -334,7 +340,7 @@ class QEDaemon(AuthMixin, QObject): @pyqtProperty(QENewWalletWizard, notify=newWalletWizardChanged) def newWalletWizard(self): if not self._new_wallet_wizard: - self._new_wallet_wizard = QENewWalletWizard(self) + self._new_wallet_wizard = QENewWalletWizard(self, self.plugins) return self._new_wallet_wizard diff --git a/electrum/gui/qml/qewizard.py b/electrum/gui/qml/qewizard.py index 5de1a9d8d..9884a881f 100644 --- a/electrum/gui/qml/qewizard.py +++ b/electrum/gui/qml/qewizard.py @@ -1,12 +1,16 @@ import os +from typing import TYPE_CHECKING from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject -from PyQt5.QtQml import QQmlApplicationEngine from electrum.logging import get_logger from electrum import mnemonic from electrum.wizard import NewWalletWizard, ServerConnectWizard +if TYPE_CHECKING: + from electrum.gui.qml.qedaemon import QEDaemon + from electrum.plugin import Plugins + class QEAbstractWizard(QObject): _logger = get_logger(__name__) @@ -45,10 +49,10 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard): createError = pyqtSignal([str], arguments=["error"]) createSuccess = pyqtSignal() - def __init__(self, daemon, parent = None): - NewWalletWizard.__init__(self, daemon) + def __init__(self, daemon: 'QEDaemon', plugins: 'Plugins', parent = None): + NewWalletWizard.__init__(self, daemon.daemon, plugins) QEAbstractWizard.__init__(self, parent) - self._daemon = daemon + self._qedaemon = daemon # attach view names and accept handlers self.navmap_merge({ @@ -80,7 +84,7 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard): self.pathChanged.emit() def is_single_password(self): - return self._daemon.singlePasswordEnabled + return self._qedaemon.singlePasswordEnabled @pyqtSlot('QJSValue', result=bool) def hasDuplicateMasterKeys(self, js_data): @@ -107,7 +111,7 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard): data['encrypt'] = True data['password'] = single_password - path = os.path.join(os.path.dirname(self._daemon.daemon.config.get_wallet_path()), data['wallet_name']) + path = os.path.join(os.path.dirname(self._qedaemon.daemon.config.get_wallet_path()), data['wallet_name']) try: self.create_storage(path, data) @@ -124,10 +128,9 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard): class QEServerConnectWizard(ServerConnectWizard, QEAbstractWizard): - def __init__(self, daemon, parent = None): - ServerConnectWizard.__init__(self, daemon) + def __init__(self, daemon: 'QEDaemon', parent=None): + ServerConnectWizard.__init__(self, daemon.daemon) QEAbstractWizard.__init__(self, parent) - self._daemon = daemon # attach view names self.navmap_merge({