wallet-rpc: get transfers for all accounts and subaddresses

This commit is contained in:
Jethro Grassie 2019-02-17 13:29:19 -05:00
parent 31bdf7bd11
commit 8a1ff079ea
No known key found for this signature in database
GPG key ID: DE8ED755616565BB
2 changed files with 15 additions and 5 deletions

View file

@ -2287,10 +2287,18 @@ namespace tools
max_height = req.max_height <= max_height ? req.max_height : max_height; max_height = req.max_height <= max_height ? req.max_height : max_height;
} }
boost::optional<uint32_t> account_index = req.account_index;
std::set<uint32_t> subaddr_indices = req.subaddr_indices;
if (req.all_accounts)
{
account_index = boost::none;
subaddr_indices.clear();
}
if (req.in) if (req.in)
{ {
std::list<std::pair<crypto::hash, tools::wallet2::payment_details>> payments; std::list<std::pair<crypto::hash, tools::wallet2::payment_details>> payments;
m_wallet->get_payments(payments, min_height, max_height, req.account_index, req.subaddr_indices); m_wallet->get_payments(payments, min_height, max_height, account_index, subaddr_indices);
for (std::list<std::pair<crypto::hash, tools::wallet2::payment_details>>::const_iterator i = payments.begin(); i != payments.end(); ++i) { for (std::list<std::pair<crypto::hash, tools::wallet2::payment_details>>::const_iterator i = payments.begin(); i != payments.end(); ++i) {
res.in.push_back(wallet_rpc::transfer_entry()); res.in.push_back(wallet_rpc::transfer_entry());
fill_transfer_entry(res.in.back(), i->second.m_tx_hash, i->first, i->second); fill_transfer_entry(res.in.back(), i->second.m_tx_hash, i->first, i->second);
@ -2300,7 +2308,7 @@ namespace tools
if (req.out) if (req.out)
{ {
std::list<std::pair<crypto::hash, tools::wallet2::confirmed_transfer_details>> payments; std::list<std::pair<crypto::hash, tools::wallet2::confirmed_transfer_details>> payments;
m_wallet->get_payments_out(payments, min_height, max_height, req.account_index, req.subaddr_indices); m_wallet->get_payments_out(payments, min_height, max_height, account_index, subaddr_indices);
for (std::list<std::pair<crypto::hash, tools::wallet2::confirmed_transfer_details>>::const_iterator i = payments.begin(); i != payments.end(); ++i) { for (std::list<std::pair<crypto::hash, tools::wallet2::confirmed_transfer_details>>::const_iterator i = payments.begin(); i != payments.end(); ++i) {
res.out.push_back(wallet_rpc::transfer_entry()); res.out.push_back(wallet_rpc::transfer_entry());
fill_transfer_entry(res.out.back(), i->first, i->second); fill_transfer_entry(res.out.back(), i->first, i->second);
@ -2309,7 +2317,7 @@ namespace tools
if (req.pending || req.failed) { if (req.pending || req.failed) {
std::list<std::pair<crypto::hash, tools::wallet2::unconfirmed_transfer_details>> upayments; std::list<std::pair<crypto::hash, tools::wallet2::unconfirmed_transfer_details>> upayments;
m_wallet->get_unconfirmed_payments_out(upayments, req.account_index, req.subaddr_indices); m_wallet->get_unconfirmed_payments_out(upayments, account_index, subaddr_indices);
for (std::list<std::pair<crypto::hash, tools::wallet2::unconfirmed_transfer_details>>::const_iterator i = upayments.begin(); i != upayments.end(); ++i) { for (std::list<std::pair<crypto::hash, tools::wallet2::unconfirmed_transfer_details>>::const_iterator i = upayments.begin(); i != upayments.end(); ++i) {
const tools::wallet2::unconfirmed_transfer_details &pd = i->second; const tools::wallet2::unconfirmed_transfer_details &pd = i->second;
bool is_failed = pd.m_state == tools::wallet2::unconfirmed_transfer_details::failed; bool is_failed = pd.m_state == tools::wallet2::unconfirmed_transfer_details::failed;
@ -2326,7 +2334,7 @@ namespace tools
m_wallet->update_pool_state(); m_wallet->update_pool_state();
std::list<std::pair<crypto::hash, tools::wallet2::pool_payment_details>> payments; std::list<std::pair<crypto::hash, tools::wallet2::pool_payment_details>> payments;
m_wallet->get_unconfirmed_payments(payments, req.account_index, req.subaddr_indices); m_wallet->get_unconfirmed_payments(payments, account_index, subaddr_indices);
for (std::list<std::pair<crypto::hash, tools::wallet2::pool_payment_details>>::const_iterator i = payments.begin(); i != payments.end(); ++i) { for (std::list<std::pair<crypto::hash, tools::wallet2::pool_payment_details>>::const_iterator i = payments.begin(); i != payments.end(); ++i) {
res.pool.push_back(wallet_rpc::transfer_entry()); res.pool.push_back(wallet_rpc::transfer_entry());
fill_transfer_entry(res.pool.back(), i->first, i->second); fill_transfer_entry(res.pool.back(), i->first, i->second);

View file

@ -47,7 +47,7 @@
// advance which version they will stop working with // advance which version they will stop working with
// Don't go over 32767 for any of these // Don't go over 32767 for any of these
#define WALLET_RPC_VERSION_MAJOR 1 #define WALLET_RPC_VERSION_MAJOR 1
#define WALLET_RPC_VERSION_MINOR 7 #define WALLET_RPC_VERSION_MINOR 8
#define MAKE_WALLET_RPC_VERSION(major,minor) (((major)<<16)|(minor)) #define MAKE_WALLET_RPC_VERSION(major,minor) (((major)<<16)|(minor))
#define WALLET_RPC_VERSION MAKE_WALLET_RPC_VERSION(WALLET_RPC_VERSION_MAJOR, WALLET_RPC_VERSION_MINOR) #define WALLET_RPC_VERSION MAKE_WALLET_RPC_VERSION(WALLET_RPC_VERSION_MAJOR, WALLET_RPC_VERSION_MINOR)
namespace tools namespace tools
@ -1418,6 +1418,7 @@ namespace wallet_rpc
uint64_t max_height; uint64_t max_height;
uint32_t account_index; uint32_t account_index;
std::set<uint32_t> subaddr_indices; std::set<uint32_t> subaddr_indices;
bool all_accounts;
BEGIN_KV_SERIALIZE_MAP() BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(in); KV_SERIALIZE(in);
@ -1430,6 +1431,7 @@ namespace wallet_rpc
KV_SERIALIZE_OPT(max_height, (uint64_t)CRYPTONOTE_MAX_BLOCK_NUMBER); KV_SERIALIZE_OPT(max_height, (uint64_t)CRYPTONOTE_MAX_BLOCK_NUMBER);
KV_SERIALIZE(account_index); KV_SERIALIZE(account_index);
KV_SERIALIZE(subaddr_indices); KV_SERIALIZE(subaddr_indices);
KV_SERIALIZE_OPT(all_accounts, false);
END_KV_SERIALIZE_MAP() END_KV_SERIALIZE_MAP()
}; };