fix crash when exporting private keys
This commit is contained in:
@@ -2269,25 +2269,38 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
|||||||
private_keys = {}
|
private_keys = {}
|
||||||
addresses = self.wallet.get_addresses()
|
addresses = self.wallet.get_addresses()
|
||||||
done = False
|
done = False
|
||||||
|
cancelled = False
|
||||||
def privkeys_thread():
|
def privkeys_thread():
|
||||||
for addr in addresses:
|
for addr in addresses:
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
if done:
|
if done or cancelled:
|
||||||
break
|
break
|
||||||
privkey = self.wallet.export_private_key(addr, password)[0]
|
privkey = self.wallet.export_private_key(addr, password)[0]
|
||||||
private_keys[addr] = privkey
|
private_keys[addr] = privkey
|
||||||
self.computing_privkeys_signal.emit()
|
self.computing_privkeys_signal.emit()
|
||||||
self.computing_privkeys_signal.disconnect()
|
if not cancelled:
|
||||||
self.show_privkeys_signal.emit()
|
self.computing_privkeys_signal.disconnect()
|
||||||
|
self.show_privkeys_signal.emit()
|
||||||
|
|
||||||
def show_privkeys():
|
def show_privkeys():
|
||||||
s = "\n".join( map( lambda x: x[0] + "\t"+ x[1], private_keys.items()))
|
s = "\n".join( map( lambda x: x[0] + "\t"+ x[1], private_keys.items()))
|
||||||
e.setText(s)
|
e.setText(s)
|
||||||
b.setEnabled(True)
|
b.setEnabled(True)
|
||||||
self.show_privkeys_signal.disconnect()
|
self.show_privkeys_signal.disconnect()
|
||||||
|
nonlocal done
|
||||||
|
done = True
|
||||||
|
|
||||||
|
def on_dialog_closed(*args):
|
||||||
|
nonlocal done
|
||||||
|
nonlocal cancelled
|
||||||
|
if not done:
|
||||||
|
cancelled = True
|
||||||
|
self.computing_privkeys_signal.disconnect()
|
||||||
|
self.show_privkeys_signal.disconnect()
|
||||||
|
|
||||||
self.computing_privkeys_signal.connect(lambda: e.setText("Please wait... %d/%d"%(len(private_keys),len(addresses))))
|
self.computing_privkeys_signal.connect(lambda: e.setText("Please wait... %d/%d"%(len(private_keys),len(addresses))))
|
||||||
self.show_privkeys_signal.connect(show_privkeys)
|
self.show_privkeys_signal.connect(show_privkeys)
|
||||||
|
d.finished.connect(on_dialog_closed)
|
||||||
threading.Thread(target=privkeys_thread).start()
|
threading.Thread(target=privkeys_thread).start()
|
||||||
|
|
||||||
if not d.exec_():
|
if not d.exec_():
|
||||||
|
|||||||
Reference in New Issue
Block a user