From 07452a6a7ad0dabf07606c810d534ed07ee4b079 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Tue, 8 Mar 2022 15:24:02 +0100 Subject: [PATCH] seed generation can take some time, do it in a background thread and show a busy indicator while we wait --- .../gui/qml/components/WizardComponents.qml | 41 ++++++++++++------- electrum/gui/qml/qebitcoin.py | 13 ++++-- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/electrum/gui/qml/components/WizardComponents.qml b/electrum/gui/qml/components/WizardComponents.qml index e367dcc50..62da140b3 100644 --- a/electrum/gui/qml/components/WizardComponents.qml +++ b/electrum/gui/qml/components/WizardComponents.qml @@ -112,7 +112,7 @@ Item { property Component createseed: Component { WizardComponent { - valid: true + valid: seedtext.text != '' onAccept: { wizard_data['seed'] = seedtext.text @@ -121,6 +121,22 @@ Item { wizard_data['seed_extra_words'] = extendcb.checked ? customwordstext.text : '' } + function setWarningText(numwords) { + var t = [ + "

", + qsTr("Please save these %1 words on paper (order is important). ").arg(numwords), + qsTr("This seed will allow you to recover your wallet in case of computer failure."), + "

", + "" + qsTr("WARNING") + ":", + "" + ] + warningtext.text = t.join("") + } + GridLayout { width: parent.width columns: 1 @@ -145,6 +161,13 @@ Item { } leftInset: -5 rightInset: -5 + + BusyIndicator { + anchors.centerIn: parent + height: parent.height *2/3 + visible: seedtext.text == '' + } + } CheckBox { id: extendcb @@ -158,6 +181,7 @@ Item { echoMode: TextInput.Password } Component.onCompleted : { + setWarningText(12) bitcoin.generate_seed() } } @@ -166,20 +190,7 @@ Item { id: bitcoin onGeneratedSeedChanged: { seedtext.text = generated_seed - - var t = [ - "

", - qsTr("Please save these %1 words on paper (order is important). ").arg(generated_seed.split(" ").length), - qsTr("This seed will allow you to recover your wallet in case of computer failure."), - "

", - "" + qsTr("WARNING") + ":", - "" - ] - warningtext.text = t.join("") + setWarningText(generated_seed.split(" ").length) } } } diff --git a/electrum/gui/qml/qebitcoin.py b/electrum/gui/qml/qebitcoin.py index 13a0b0513..d4f602235 100644 --- a/electrum/gui/qml/qebitcoin.py +++ b/electrum/gui/qml/qebitcoin.py @@ -1,3 +1,5 @@ +import asyncio + from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject from electrum.logging import get_logger @@ -25,9 +27,14 @@ class QEBitcoin(QObject): @pyqtSlot(str,str) def generate_seed(self, seed_type='segwit', language='en'): self._logger.debug('generating seed of type ' + str(seed_type)) - self.generatedSeed = mnemonic.Mnemonic(language).make_seed(seed_type=seed_type) - self._logger.debug('seed generated') - self.generatedSeedChanged.emit() + + async def co_gen_seed(seed_type, language): + self.generatedSeed = mnemonic.Mnemonic(language).make_seed(seed_type=seed_type) + self._logger.debug('seed generated') + self.generatedSeedChanged.emit() + + loop = asyncio.get_event_loop() + asyncio.run_coroutine_threadsafe(co_gen_seed(seed_type, language), loop) @pyqtProperty(bool, notify=seedValidChanged) def seed_valid(self):