Browse Source

qml: wizard fixes

master
Sander van Grieken 2 years ago
parent
commit
dec4a8e2c7
  1. 8
      electrum/gui/qml/qeapp.py
  2. 14
      electrum/gui/qml/qedaemon.py
  3. 21
      electrum/gui/qml/qewizard.py

8
electrum/gui/qml/qeapp.py

@ -5,10 +5,9 @@ import os
import sys import sys
import html import html
import threading import threading
import asyncio
from typing import TYPE_CHECKING, Set 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) qInstallMessageHandler, QTimer, QSortFilterProxyModel)
from PyQt5.QtGui import QGuiApplication, QFontDatabase from PyQt5.QtGui import QGuiApplication, QFontDatabase
from PyQt5.QtQml import qmlRegisterType, qmlRegisterUncreatableType, QQmlApplicationEngine from PyQt5.QtQml import qmlRegisterType, qmlRegisterUncreatableType, QQmlApplicationEngine
@ -61,6 +60,7 @@ if 'ANDROID_DATA' in os.environ:
notification = None notification = None
class QEAppController(BaseCrashReporter, QObject): class QEAppController(BaseCrashReporter, QObject):
_dummy = pyqtSignal() _dummy = pyqtSignal()
userNotify = pyqtSignal(str, str) userNotify = pyqtSignal(str, str)
@ -319,6 +319,7 @@ class QEAppController(BaseCrashReporter, QObject):
self._secureWindow = secure self._secureWindow = secure
self.secureWindowChanged.emit() self.secureWindowChanged.emit()
class ElectrumQmlApplication(QGuiApplication): class ElectrumQmlApplication(QGuiApplication):
_valid = True _valid = True
@ -376,7 +377,7 @@ class ElectrumQmlApplication(QGuiApplication):
self.plugins = plugins self.plugins = plugins
self._qeconfig = QEConfig(config) self._qeconfig = QEConfig(config)
self._qenetwork = QENetwork(daemon.network, self._qeconfig) 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.appController = QEAppController(self, self.daemon, self.plugins)
self._maxAmount = QEAmount(is_max=True) self._maxAmount = QEAmount(is_max=True)
self.context.setContextProperty('AppController', self.appController) self.context.setContextProperty('AppController', self.appController)
@ -413,6 +414,7 @@ class ElectrumQmlApplication(QGuiApplication):
return return
self.logger.warning(file) self.logger.warning(file)
class Exception_Hook(QObject, Logger): class Exception_Hook(QObject, Logger):
_report_exception = pyqtSignal(object, object, object, object) _report_exception = pyqtSignal(object, object, object, object)

14
electrum/gui/qml/qedaemon.py

@ -1,5 +1,6 @@
import os import os
import threading import threading
from typing import TYPE_CHECKING
from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex from PyQt5.QtCore import Qt, QAbstractListModel, QModelIndex
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject 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.i18n import _
from electrum.logging import get_logger from electrum.logging import get_logger
from electrum.util import WalletFileException, standardize_path from electrum.util import WalletFileException, standardize_path
from electrum.wallet import Abstract_Wallet
from electrum.plugin import run_hook from electrum.plugin import run_hook
from electrum.lnchannel import ChannelState from electrum.lnchannel import ChannelState
from electrum.daemon import Daemon
from .auth import AuthMixin, auth_protect from .auth import AuthMixin, auth_protect
from .qefx import QEFX from .qefx import QEFX
@ -18,6 +17,11 @@ from .qewallet import QEWallet
from .qewalletdb import QEWalletDB from .qewalletdb import QEWalletDB
from .qewizard import QENewWalletWizard, QEServerConnectWizard 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) # wallet list model. supports both wallet basenames (wallet file basenames)
# and whole Wallet instances (loaded wallets) # and whole Wallet instances (loaded wallets)
class QEWalletListModel(QAbstractListModel): class QEWalletListModel(QAbstractListModel):
@ -108,6 +112,7 @@ class QEWalletListModel(QAbstractListModel):
return return
i += 1 i += 1
class QEDaemon(AuthMixin, QObject): class QEDaemon(AuthMixin, QObject):
_logger = get_logger(__name__) _logger = get_logger(__name__)
@ -135,9 +140,10 @@ class QEDaemon(AuthMixin, QObject):
walletOpenError = pyqtSignal([str], arguments=["error"]) walletOpenError = pyqtSignal([str], arguments=["error"])
walletDeleteError = pyqtSignal([str,str], arguments=['code', 'message']) 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) super().__init__(parent)
self.daemon = daemon self.daemon = daemon
self.plugins = plugins
self.qefx = QEFX(daemon.fx, daemon.config) self.qefx = QEFX(daemon.fx, daemon.config)
self._backendWalletLoaded.connect(self._on_backend_wallet_loaded) self._backendWalletLoaded.connect(self._on_backend_wallet_loaded)
@ -334,7 +340,7 @@ class QEDaemon(AuthMixin, QObject):
@pyqtProperty(QENewWalletWizard, notify=newWalletWizardChanged) @pyqtProperty(QENewWalletWizard, notify=newWalletWizardChanged)
def newWalletWizard(self): def newWalletWizard(self):
if not self._new_wallet_wizard: 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 return self._new_wallet_wizard

21
electrum/gui/qml/qewizard.py

@ -1,12 +1,16 @@
import os import os
from typing import TYPE_CHECKING
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
from PyQt5.QtQml import QQmlApplicationEngine
from electrum.logging import get_logger from electrum.logging import get_logger
from electrum import mnemonic from electrum import mnemonic
from electrum.wizard import NewWalletWizard, ServerConnectWizard from electrum.wizard import NewWalletWizard, ServerConnectWizard
if TYPE_CHECKING:
from electrum.gui.qml.qedaemon import QEDaemon
from electrum.plugin import Plugins
class QEAbstractWizard(QObject): class QEAbstractWizard(QObject):
_logger = get_logger(__name__) _logger = get_logger(__name__)
@ -45,10 +49,10 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
createError = pyqtSignal([str], arguments=["error"]) createError = pyqtSignal([str], arguments=["error"])
createSuccess = pyqtSignal() createSuccess = pyqtSignal()
def __init__(self, daemon, parent = None): def __init__(self, daemon: 'QEDaemon', plugins: 'Plugins', parent = None):
NewWalletWizard.__init__(self, daemon) NewWalletWizard.__init__(self, daemon.daemon, plugins)
QEAbstractWizard.__init__(self, parent) QEAbstractWizard.__init__(self, parent)
self._daemon = daemon self._qedaemon = daemon
# attach view names and accept handlers # attach view names and accept handlers
self.navmap_merge({ self.navmap_merge({
@ -80,7 +84,7 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
self.pathChanged.emit() self.pathChanged.emit()
def is_single_password(self): def is_single_password(self):
return self._daemon.singlePasswordEnabled return self._qedaemon.singlePasswordEnabled
@pyqtSlot('QJSValue', result=bool) @pyqtSlot('QJSValue', result=bool)
def hasDuplicateMasterKeys(self, js_data): def hasDuplicateMasterKeys(self, js_data):
@ -107,7 +111,7 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
data['encrypt'] = True data['encrypt'] = True
data['password'] = single_password 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: try:
self.create_storage(path, data) self.create_storage(path, data)
@ -124,10 +128,9 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
class QEServerConnectWizard(ServerConnectWizard, QEAbstractWizard): class QEServerConnectWizard(ServerConnectWizard, QEAbstractWizard):
def __init__(self, daemon, parent = None): def __init__(self, daemon: 'QEDaemon', parent=None):
ServerConnectWizard.__init__(self, daemon) ServerConnectWizard.__init__(self, daemon.daemon)
QEAbstractWizard.__init__(self, parent) QEAbstractWizard.__init__(self, parent)
self._daemon = daemon
# attach view names # attach view names
self.navmap_merge({ self.navmap_merge({

Loading…
Cancel
Save