mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-17 02:57:33 +02:00
gui: Use wallet name for wallet migration rather than WalletModel
To prepare for migrating wallets that are not loaded, when migration occurs in the GUI, it should not rely on a WalletModel existing. Co-authored-by: furszy <matiasfurszyfer@protonmail.com>
This commit is contained in:
@@ -437,12 +437,12 @@ void RestoreWalletActivity::finish()
|
||||
Q_EMIT finished();
|
||||
}
|
||||
|
||||
void MigrateWalletActivity::migrate(WalletModel* wallet_model)
|
||||
void MigrateWalletActivity::migrate(const std::string& name)
|
||||
{
|
||||
// Warn the user about migration
|
||||
QMessageBox box(m_parent_widget);
|
||||
box.setWindowTitle(tr("Migrate wallet"));
|
||||
box.setText(tr("Are you sure you wish to migrate the wallet <i>%1</i>?").arg(GUIUtil::HtmlEscape(wallet_model->getDisplayName())));
|
||||
box.setText(tr("Are you sure you wish to migrate the wallet <i>%1</i>?").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(name))));
|
||||
box.setInformativeText(tr("Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made.\n"
|
||||
"If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts.\n"
|
||||
"If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts.\n\n"
|
||||
@@ -453,29 +453,25 @@ void MigrateWalletActivity::migrate(WalletModel* wallet_model)
|
||||
box.setDefaultButton(QMessageBox::Yes);
|
||||
if (box.exec() != QMessageBox::Yes) return;
|
||||
|
||||
// Get the passphrase if it is encrypted regardless of it is locked or unlocked. We need the passphrase itself.
|
||||
SecureString passphrase;
|
||||
WalletModel::EncryptionStatus enc_status = wallet_model->getEncryptionStatus();
|
||||
if (enc_status == WalletModel::EncryptionStatus::Locked || enc_status == WalletModel::EncryptionStatus::Unlocked) {
|
||||
AskPassphraseDialog dlg(AskPassphraseDialog::Unlock, m_parent_widget, &passphrase);
|
||||
dlg.setModel(wallet_model);
|
||||
dlg.exec();
|
||||
if (node().walletLoader().isEncrypted(name)) {
|
||||
// Get the passphrase for the wallet
|
||||
AskPassphraseDialog dlg(AskPassphraseDialog::UnlockMigration, m_parent_widget, &passphrase);
|
||||
if (dlg.exec() == QDialog::Rejected) return;
|
||||
}
|
||||
|
||||
// GUI needs to remove the wallet so that it can actually be unloaded by migration
|
||||
const std::string name = wallet_model->wallet().getWalletName();
|
||||
showProgressDialog(tr("Migrate Wallet"), tr("Migrating Wallet <b>%1</b>…").arg(GUIUtil::HtmlEscape(name)));
|
||||
|
||||
QTimer::singleShot(0, worker(), [this, name, passphrase] {
|
||||
auto res{node().walletLoader().migrateWallet(name, passphrase)};
|
||||
|
||||
if (res) {
|
||||
m_success_message = tr("The wallet '%1' was migrated successfully.").arg(GUIUtil::HtmlEscape(res->wallet->getWalletName()));
|
||||
m_success_message = tr("The wallet '%1' was migrated successfully.").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(res->wallet->getWalletName())));
|
||||
if (res->watchonly_wallet_name) {
|
||||
m_success_message += QChar(' ') + tr("Watchonly scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(res->watchonly_wallet_name.value()));
|
||||
m_success_message += QChar(' ') + tr("Watchonly scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(res->watchonly_wallet_name.value())));
|
||||
}
|
||||
if (res->solvables_wallet_name) {
|
||||
m_success_message += QChar(' ') + tr("Solvable but not watched scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(res->solvables_wallet_name.value()));
|
||||
m_success_message += QChar(' ') + tr("Solvable but not watched scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(res->solvables_wallet_name.value())));
|
||||
}
|
||||
m_wallet_model = m_wallet_controller->getOrCreateWallet(std::move(res->wallet));
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user