aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/wallet/api')
-rw-r--r--src/wallet/api/address_book.cpp23
-rw-r--r--src/wallet/api/wallet.cpp17
2 files changed, 23 insertions, 17 deletions
diff --git a/src/wallet/api/address_book.cpp b/src/wallet/api/address_book.cpp
index 198ce17cd..edeb5bb46 100644
--- a/src/wallet/api/address_book.cpp
+++ b/src/wallet/api/address_book.cpp
@@ -79,16 +79,16 @@ void AddressBookImpl::refresh()
LOG_PRINT_L2("Refreshing addressbook");
clearRows();
-
- // Fetch from Wallet2 and create vector
- for (auto const &a : m_wallet->m_wallet->get_address_book() ) {
- auto row = a.second;
- int rowId = a.first;
-
- std::string payment_id = (row.m_payment_id == cryptonote::null_hash)? "" : epee::string_tools::pod_to_hex(row.m_payment_id);
- std::string address = cryptonote::get_account_address_as_str(m_wallet->m_wallet->testnet(),row.m_address);
-
- AddressBookRow * abr = new AddressBookRow(rowId, address, payment_id, row.m_description);
+
+ // Fetch from Wallet2 and create vector of AddressBookRow objects
+ std::vector<tools::wallet2::address_book_row> rows = m_wallet->m_wallet->get_address_book();
+ for (size_t i = 0; i < rows.size(); ++i) {
+ tools::wallet2::address_book_row * row = &rows.at(i);
+
+ std::string payment_id = (row->m_payment_id == cryptonote::null_hash)? "" : epee::string_tools::pod_to_hex(row->m_payment_id);
+ std::string address = cryptonote::get_account_address_as_str(m_wallet->m_wallet->testnet(),row->m_address);
+
+ AddressBookRow * abr = new AddressBookRow(i, address, payment_id, row->m_description);
m_rows.push_back(abr);
}
@@ -98,7 +98,8 @@ bool AddressBookImpl::deleteRow(int rowId)
{
LOG_PRINT_L2("Deleting address book row " << rowId);
bool r = m_wallet->m_wallet->delete_address_book_row(rowId);
- refresh();
+ if (r)
+ refresh();
return r;
}
diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp
index 0a2f0f680..5b7a3e286 100644
--- a/src/wallet/api/wallet.cpp
+++ b/src/wallet/api/wallet.cpp
@@ -248,7 +248,7 @@ bool WalletImpl::create(const std::string &path, const std::string &password, co
if (keys_file_exists || wallet_file_exists) {
m_errorString = "attempting to generate or restore wallet, but specified file(s) exist. Exiting to not risk overwriting.";
LOG_ERROR(m_errorString);
- m_status = Status_Error;
+ m_status = Status_Critical;
return false;
}
// TODO: validate language
@@ -260,7 +260,7 @@ bool WalletImpl::create(const std::string &path, const std::string &password, co
m_status = Status_Ok;
} catch (const std::exception &e) {
LOG_ERROR("Error creating wallet: " << e.what());
- m_status = Status_Error;
+ m_status = Status_Critical;
m_errorString = e.what();
return false;
}
@@ -287,7 +287,7 @@ bool WalletImpl::open(const std::string &path, const std::string &password)
m_password = password;
} catch (const std::exception &e) {
LOG_ERROR("Error opening wallet: " << e.what());
- m_status = Status_Error;
+ m_status = Status_Critical;
m_errorString = e.what();
}
return m_status == Status_Ok;
@@ -319,7 +319,7 @@ bool WalletImpl::recover(const std::string &path, const std::string &seed)
// TODO: wallet->init(daemon_address);
} catch (const std::exception &e) {
- m_status = Status_Error;
+ m_status = Status_Critical;
m_errorString = e.what();
}
return m_status == Status_Ok;
@@ -331,7 +331,12 @@ bool WalletImpl::close()
bool result = false;
LOG_PRINT_L3("closing wallet...");
try {
- m_wallet->store();
+ // Do not store wallet with invalid status
+ // Status Critical refers to errors on opening or creating wallets.
+ if (status() != Status_Critical)
+ m_wallet->store();
+ else
+ LOG_PRINT_L3("Status_Critical - not storing wallet");
LOG_PRINT_L3("wallet::store done");
LOG_PRINT_L3("Calling wallet::stop...");
m_wallet->stop();
@@ -339,7 +344,7 @@ bool WalletImpl::close()
result = true;
clearStatus();
} catch (const std::exception &e) {
- m_status = Status_Error;
+ m_status = Status_Critical;
m_errorString = e.what();
LOG_ERROR("Error closing wallet: " << e.what());
}