diff options
Diffstat (limited to 'src/wallet/api')
-rw-r--r-- | src/wallet/api/address_book.cpp | 23 | ||||
-rw-r--r-- | src/wallet/api/wallet.cpp | 17 |
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()); } |