From bb29f0c6052c18533ce5c5d1a5227a92ce729605 Mon Sep 17 00:00:00 2001 From: woodser Date: Fri, 31 May 2019 21:07:35 -0400 Subject: [PATCH] support getting all subaddresses iff no subaddress indices given --- src/wallet/MoneroWallet.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/wallet/MoneroWallet.cpp b/src/wallet/MoneroWallet.cpp index fa41941..4181555 100644 --- a/src/wallet/MoneroWallet.cpp +++ b/src/wallet/MoneroWallet.cpp @@ -300,7 +300,7 @@ namespace monero { throw runtime_error("Not implemented"); } - vector MoneroWallet::getSubaddresses(const uint32_t accountIdx) const { + vector MoneroWallet::getSubaddresses(const uint32_t accountIdx) const { // TODO: this should call one below vector transfers; wallet2->get_transfers(transfers); return getSubaddressesAux(accountIdx, vector(), transfers); @@ -317,17 +317,23 @@ namespace monero { vector MoneroWallet::getSubaddressesAux(const uint32_t accountIdx, vector subaddressIndices, vector transfers) const { vector subaddresses; - // TODO implement - if (!subaddressIndices.empty()) throw runtime_error("getting by subaddress index not yet supported"); - // get balances per subaddress as maps map balancePerSubaddress = wallet2->balance_per_subaddress(accountIdx); map> unlockedBalancePerSubaddress = wallet2->unlocked_balance_per_subaddress(accountIdx); - // initialize subaddresses - for (uint32_t subaddressIdx = 0; subaddressIdx < wallet2->get_num_subaddresses(accountIdx); subaddressIdx++) { + // get all indices if no indices given + if (subaddressIndices.empty()) { + subaddressIndices = vector(); + for (uint32_t subaddressIdx = 0; subaddressIdx < wallet2->get_num_subaddresses(accountIdx); subaddressIdx++) { + subaddressIndices.push_back(subaddressIdx); + } + } + + // initialize subaddresses at indices + for (uint32_t subaddressIndicesIdx = 0; subaddressIndicesIdx < subaddressIndices.size(); subaddressIndicesIdx++) { MoneroSubaddress subaddress; subaddress.accountIndex = accountIdx; + uint32_t subaddressIdx = subaddressIndices.at(subaddressIndicesIdx); subaddress.index = subaddressIdx; subaddress.address = getAddress(accountIdx, subaddressIdx); auto iter1 = balancePerSubaddress.find(subaddressIdx); @@ -340,6 +346,7 @@ namespace monero { subaddress.isUsed = find_if(transfers.begin(), transfers.end(), [&](const tools::wallet2::transfer_details& td) { return td.m_subaddr_index == index; }) != transfers.end(); subaddresses.push_back(subaddress); } + return subaddresses; }