|
|
|
|
@@ -53,6 +53,8 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
|
|
|
|
|
NewWalletWizard.__init__(self, daemon, plugins)
|
|
|
|
|
QEAbstractWizard.__init__(self, config, app)
|
|
|
|
|
|
|
|
|
|
self.setWindowTitle(_('Create/Restore wallet'))
|
|
|
|
|
|
|
|
|
|
self._path = path
|
|
|
|
|
|
|
|
|
|
# attach gui classes to views
|
|
|
|
|
@@ -77,7 +79,19 @@ class QENewWalletWizard(NewWalletWizard, QEAbstractWizard):
|
|
|
|
|
'wallet_password_hardware': { 'gui': WCWalletPasswordHardware }
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# modify default flow, insert seed extension entry/confirm as separate views
|
|
|
|
|
# add open existing wallet from wizard, incl hw unlock
|
|
|
|
|
self.navmap_merge({
|
|
|
|
|
'wallet_name': {
|
|
|
|
|
'next': lambda d: 'hw_unlock' if d['wallet_needs_hw_unlock'] else 'wallet_type',
|
|
|
|
|
'last': lambda d: d['wallet_exists'] and not d['wallet_needs_hw_unlock']
|
|
|
|
|
},
|
|
|
|
|
'hw_unlock': {
|
|
|
|
|
'last': True,
|
|
|
|
|
'gui': WCChooseHWDevice
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# insert seed extension entry/confirm as separate views
|
|
|
|
|
self.navmap_merge({
|
|
|
|
|
'create_seed': {
|
|
|
|
|
'next': lambda d: 'create_ext' if self.wants_ext(d) else 'confirm_seed'
|
|
|
|
|
@@ -164,6 +178,10 @@ class WCWalletName(WizardComponent):
|
|
|
|
|
if os.path.isdir(path):
|
|
|
|
|
raise Exception("wallet path cannot point to a directory")
|
|
|
|
|
|
|
|
|
|
self.wallet_exists = False
|
|
|
|
|
self.wallet_is_open = False
|
|
|
|
|
self.wallet_needs_hw_unlock = False
|
|
|
|
|
|
|
|
|
|
hbox = QHBoxLayout()
|
|
|
|
|
hbox.addWidget(QLabel(_('Wallet') + ':'))
|
|
|
|
|
self.name_e = QLineEdit()
|
|
|
|
|
@@ -175,11 +193,11 @@ class WCWalletName(WizardComponent):
|
|
|
|
|
msg_label = WWLabel('')
|
|
|
|
|
self.layout().addWidget(msg_label)
|
|
|
|
|
hbox2 = QHBoxLayout()
|
|
|
|
|
pw_e = PasswordLineEdit('', self)
|
|
|
|
|
pw_e.setFixedWidth(17 * char_width_in_lineedit())
|
|
|
|
|
self.pw_e = PasswordLineEdit('', self)
|
|
|
|
|
self.pw_e.setFixedWidth(17 * char_width_in_lineedit())
|
|
|
|
|
pw_label = QLabel(_('Password') + ':')
|
|
|
|
|
hbox2.addWidget(pw_label)
|
|
|
|
|
hbox2.addWidget(pw_e)
|
|
|
|
|
hbox2.addWidget(self.pw_e)
|
|
|
|
|
hbox2.addStretch()
|
|
|
|
|
self.layout().addLayout(hbox2)
|
|
|
|
|
|
|
|
|
|
@@ -208,15 +226,19 @@ class WCWalletName(WizardComponent):
|
|
|
|
|
nonlocal temp_storage
|
|
|
|
|
temp_storage = None
|
|
|
|
|
msg = None
|
|
|
|
|
self.wallet_exists = False
|
|
|
|
|
self.wallet_is_open = False
|
|
|
|
|
self.wallet_needs_hw_unlock = False
|
|
|
|
|
if filename:
|
|
|
|
|
path = os.path.join(wallet_folder, filename)
|
|
|
|
|
# wallet_from_memory = get_wallet_from_daemon(path)
|
|
|
|
|
wallet_from_memory = self.wizard._daemon.get_wallet(path)
|
|
|
|
|
try:
|
|
|
|
|
if wallet_from_memory:
|
|
|
|
|
temp_storage = wallet_from_memory.storage # type: Optional[WalletStorage]
|
|
|
|
|
self.wallet_is_open = True
|
|
|
|
|
else:
|
|
|
|
|
temp_storage = WalletStorage(path)
|
|
|
|
|
self.wallet_exists = temp_storage.file_exists()
|
|
|
|
|
except (StorageReadWriteError, WalletFileException) as e:
|
|
|
|
|
msg = _('Cannot read file') + f'\n{repr(e)}'
|
|
|
|
|
except Exception as e:
|
|
|
|
|
@@ -224,12 +246,11 @@ class WCWalletName(WizardComponent):
|
|
|
|
|
msg = _('Cannot read file') + f'\n{repr(e)}'
|
|
|
|
|
else:
|
|
|
|
|
msg = ""
|
|
|
|
|
# self.next_button.setEnabled(temp_storage is not None)
|
|
|
|
|
self.valid = temp_storage is not None
|
|
|
|
|
user_needs_to_enter_password = False
|
|
|
|
|
if temp_storage:
|
|
|
|
|
if not temp_storage.file_exists():
|
|
|
|
|
msg =_("This file does not exist.") + '\n' \
|
|
|
|
|
msg = _("This file does not exist.") + '\n' \
|
|
|
|
|
+ _("Press 'Next' to create this wallet, or choose another file.")
|
|
|
|
|
elif not wallet_from_memory:
|
|
|
|
|
if temp_storage.is_encrypted_with_user_pw():
|
|
|
|
|
@@ -239,22 +260,23 @@ class WCWalletName(WizardComponent):
|
|
|
|
|
elif temp_storage.is_encrypted_with_hw_device():
|
|
|
|
|
msg = _("This file is encrypted using a hardware device.") + '\n' \
|
|
|
|
|
+ _("Press 'Next' to choose device to decrypt.")
|
|
|
|
|
self.wallet_needs_hw_unlock = True
|
|
|
|
|
else:
|
|
|
|
|
msg = _("Press 'Next' to open this wallet.")
|
|
|
|
|
else:
|
|
|
|
|
msg = _("This file is already open in memory.") + "\n" \
|
|
|
|
|
+ _("Press 'Next' to create/focus window.")
|
|
|
|
|
+ _("Press 'Next' to create/focus window.")
|
|
|
|
|
if msg is None:
|
|
|
|
|
msg = _('Cannot read file')
|
|
|
|
|
msg_label.setText(msg)
|
|
|
|
|
widget_create_new.setVisible(bool(temp_storage and temp_storage.file_exists()))
|
|
|
|
|
if user_needs_to_enter_password:
|
|
|
|
|
pw_label.show()
|
|
|
|
|
pw_e.show()
|
|
|
|
|
pw_e.setFocus()
|
|
|
|
|
self.pw_e.show()
|
|
|
|
|
else:
|
|
|
|
|
pw_label.hide()
|
|
|
|
|
pw_e.hide()
|
|
|
|
|
self.pw_e.hide()
|
|
|
|
|
self.on_updated()
|
|
|
|
|
|
|
|
|
|
button.clicked.connect(on_choose)
|
|
|
|
|
button_create_new.clicked.connect(
|
|
|
|
|
@@ -263,7 +285,17 @@ class WCWalletName(WizardComponent):
|
|
|
|
|
self.name_e.setText(os.path.basename(path))
|
|
|
|
|
|
|
|
|
|
def apply(self):
|
|
|
|
|
self.wizard_data['wallet_name'] = self.name_e.text()
|
|
|
|
|
if self.wallet_exists:
|
|
|
|
|
# use full path
|
|
|
|
|
path = self.wizard._path
|
|
|
|
|
wallet_folder = os.path.dirname(path)
|
|
|
|
|
self.wizard_data['wallet_name'] = os.path.join(wallet_folder, self.name_e.text())
|
|
|
|
|
else:
|
|
|
|
|
self.wizard_data['wallet_name'] = self.name_e.text()
|
|
|
|
|
self.wizard_data['wallet_exists'] = self.wallet_exists
|
|
|
|
|
self.wizard_data['wallet_is_open'] = self.wallet_is_open
|
|
|
|
|
self.wizard_data['wallet_open_password'] = self.pw_e.text()
|
|
|
|
|
self.wizard_data['wallet_needs_hw_unlock'] = self.wallet_needs_hw_unlock
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WCWalletType(WizardComponent):
|
|
|
|
|
@@ -1103,4 +1135,3 @@ class WCWalletPasswordHardware(WizardComponent):
|
|
|
|
|
# client.handler = self.plugin.create_handler(self.wizard)
|
|
|
|
|
self.wizard_data['password'] = client.get_password_for_storage_encryption()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|