commit b21cfc274649cea9fc5bfa4e97e51446afdd9d55
parent 8f19f9bf28f654fafa2d8a78d5f3fdb9a5a805be
Author: ThomasV <thomasv@gitorious>
Date: Thu, 1 May 2014 16:33:56 +0200
export_privkeys_dialog
Diffstat:
M | gui/qt/main_window.py | | | 87 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------- |
1 file changed, 71 insertions(+), 16 deletions(-)
diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
@@ -294,7 +294,7 @@ class ElectrumWindow(QMainWindow):
self.private_keys_menu = wallet_menu.addMenu(_("&Private keys"))
self.private_keys_menu.addAction(_("&Import"), self.do_import_privkey)
- self.private_keys_menu.addAction(_("&Export"), self.do_export_privkeys)
+ self.private_keys_menu.addAction(_("&Export"), self.export_privkeys_dialog)
wallet_menu.addAction(_("&Export History"), self.do_export_history)
@@ -1881,36 +1881,91 @@ class ElectrumWindow(QMainWindow):
@protected
- def do_export_privkeys(self, password):
+ def export_privkeys_dialog(self, password):
if self.wallet.is_watching_only():
self.show_message(_("This is a watching-only wallet"))
return
- self.show_message("%s\n%s\n%s" % (_("WARNING: ALL your private keys are secret."), _("Exposing a single private key can compromise your entire wallet!"), _("In particular, DO NOT use 'redeem private key' services proposed by third parties.")))
+ d = QDialog(self)
+ d.setWindowTitle(_('Private keys'))
+ d.setMinimumSize(850, 300)
+ vbox = QVBoxLayout(d)
- try:
+ msg = "%s\n%s\n%s" % (_("WARNING: ALL your private keys are secret."),
+ _("Exposing a single private key can compromise your entire wallet!"),
+ _("In particular, DO NOT use 'redeem private key' services proposed by third parties."))
+ vbox.addWidget(QLabel(msg))
+
+ e = QTextEdit()
+ e.setReadOnly(True)
+ vbox.addWidget(e)
+
+ hbox = QHBoxLayout()
+ vbox.addLayout(hbox)
+
+ defaultname = 'electrum-private-keys.csv'
+ directory = self.config.get('io_dir', os.path.expanduser('~'))
+ path = os.path.join( directory, defaultname )
+ filename_e = QLineEdit()
+ filename_e.setText(path)
+ def func():
select_export = _('Select file to export your private keys to')
- fileName = self.getSaveFileName(select_export, 'electrum-private-keys.csv', "*.csv")
- if fileName:
- with open(fileName, "w+") as csvfile:
- transaction = csv.writer(csvfile)
- transaction.writerow(["address", "private_key"])
+ p = self.getSaveFileName(select_export, defaultname, "*.csv")
+ if p:
+ filename_e.setText(p)
+
+ button = QPushButton(_('File'))
+ button.clicked.connect(func)
+ hbox.addWidget(button)
+ hbox.addWidget(filename_e)
+
+ h, b = ok_cancel_buttons2(d, _('Export'))
+ b.setEnabled(False)
+ vbox.addLayout(h)
+
+ private_keys = {}
+ addresses = self.wallet.addresses(True)
+ def privkeys_thread():
+ time.sleep(0.1)
+ for addr in addresses:
+ private_keys[addr] = "\n".join(self.wallet.get_private_key(addr, password))
+ d.emit(SIGNAL('computing_privkeys'))
+ d.emit(SIGNAL('show_privkeys'))
- addresses = self.wallet.addresses(True)
+ def show_privkeys():
+ s = "\n".join( map( lambda x: x[0] + "\t"+ x[1], private_keys.items()))
+ e.setText(s)
+ b.setEnabled(True)
- for addr in addresses:
- pk = "".join(self.wallet.get_private_key(addr, password))
- transaction.writerow(["%34s"%addr,pk])
+ d.connect(d, QtCore.SIGNAL('computing_privkeys'), lambda: e.setText("Please wait... %d/%d"%(len(private_keys),len(addresses))))
+ d.connect(d, QtCore.SIGNAL('show_privkeys'), show_privkeys)
+ threading.Thread(target=privkeys_thread).start()
+
+ if not d.exec_():
+ return
+
+ filename = filename_e.text()
+ if not filename:
+ return
+ self.do_export_privkeys(filename, private_keys)
- self.show_message(_("Private keys exported."))
+ def do_export_privkeys(self, fileName, pklist):
+ try:
+ with open(fileName, "w+") as csvfile:
+ transaction = csv.writer(csvfile)
+ transaction.writerow(["address", "private_key"])
+ for addr, pk in pklist.items():
+ transaction.writerow(["%34s"%addr,pk])
except (IOError, os.error), reason:
export_error_label = _("Electrum was unable to produce a private key-export.")
QMessageBox.critical(None, _("Unable to create csv"), export_error_label + "\n" + str(reason))
except Exception as e:
- self.show_message(str(e))
- return
+ self.show_message(str(e))
+ return
+
+ self.show_message(_("Private keys exported."))
def do_import_labels(self):