From d1d91a96af3b55194ba94a188d6063eea38f290f Mon Sep 17 00:00:00 2001 From: Just Wonder Date: Tue, 12 May 2020 20:48:48 -0700 Subject: [PATCH] Handled key-value related operations when wallet is locked. --- src/qt/kevadialog.cpp | 13 ++++++++++++- src/qt/walletmodel.cpp | 16 +++++++++++++++- src/qt/walletmodel.h | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/qt/kevadialog.cpp b/src/qt/kevadialog.cpp index 9fe495a3d..d0eabaaae 100644 --- a/src/qt/kevadialog.cpp +++ b/src/qt/kevadialog.cpp @@ -289,7 +289,6 @@ void KevaDialog::kevaView_selectionChanged() bool enable = !ui->kevaView->selectionModel()->selectedRows().isEmpty(); ui->showValueButton->setEnabled(enable); ui->removeButton->setEnabled(enable); - ui->addKVButton->setEnabled(enable); } void KevaDialog::on_showValueButton_clicked() @@ -335,6 +334,11 @@ void KevaDialog::on_removeButton_clicked() case WalletModel::KeyNotFound: msg = tr("Key not found: \"%1\".").arg(keyStr); break; + case WalletModel::InsufficientFund: + msg = tr("Insufficient funds"); + break; + case WalletModel::WalletLocked: + return; default: msg = tr("Unknown error."); } @@ -460,6 +464,8 @@ int KevaDialog::createNamespace(std::string displayName, std::string& namespaceI case WalletModel::InsufficientFund: msg = tr("Insufficient funds"); break; + case WalletModel::WalletLocked: + return 0; default: msg = tr("Unknown error."); } @@ -488,6 +494,11 @@ int KevaDialog::addKeyValue(std::string& namespaceId, std::string& key, std::str case WalletModel::ValueTooLong: msg = tr("Value too long."); break; + case WalletModel::InsufficientFund: + msg = tr("Insufficient funds"); + break; + case WalletModel::WalletLocked: + return 0; default: msg = tr("Unknown error."); } diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 955704e1d..4df36eacc 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -896,6 +896,11 @@ int WalletModel::createNamespace(std::string displayNameStr, std::string& namesp return NamespaceTooLong; } + WalletModel::UnlockContext ctx(requestUnlock()); + if(!ctx.isValid()) { + return WalletLocked; + } + CReserveKey keyName(wallet); CPubKey pubKey; const bool ok = keyName.GetReservedKey(pubKey, true); @@ -929,7 +934,6 @@ int WalletModel::createNamespace(std::string displayNameStr, std::string& namesp } keyName.KeepKey(); - namespaceId = EncodeBase58Check(kevaNamespace); return 0; } @@ -947,6 +951,11 @@ int WalletModel::deleteKevaEntry(std::string namespaceStr, std::string keyStr) return KeyTooLong; } + WalletModel::UnlockContext ctx(requestUnlock()); + if(!ctx.isValid()) { + return WalletLocked; + } + bool hasKey = false; CKevaData data; { @@ -1013,6 +1022,11 @@ int WalletModel::addKeyValue(std::string& namespaceStr, std::string& keyStr, std return ValueTooLong; } + WalletModel::UnlockContext ctx(requestUnlock()); + if(!ctx.isValid()) { + return WalletLocked; + } + COutput output; if (!wallet->FindKevaCoin(output, namespaceStr)) { return CannotUpdate; diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index c4f04a6a4..b74024311 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -132,6 +132,7 @@ public: ValueTooLong, CannotUpdate, InsufficientFund, + WalletLocked, }; enum EncryptionStatus