2015-04-23 16:07:22 +00:00
|
|
|
// Copyright (c) 2011-2015 The Cryptonote developers
|
|
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
#include "TransfersSubscription.h"
|
2015-07-30 15:22:07 +00:00
|
|
|
#include "IWalletLegacy.h"
|
|
|
|
|
|
|
|
using namespace Crypto;
|
2015-04-23 16:07:22 +00:00
|
|
|
|
|
|
|
namespace CryptoNote {
|
|
|
|
|
2015-05-27 12:08:46 +00:00
|
|
|
TransfersSubscription::TransfersSubscription(const CryptoNote::Currency& currency, const AccountSubscription& sub)
|
2015-07-30 15:22:07 +00:00
|
|
|
: subscription(sub), transfers(currency, sub.transactionSpendableAge) {}
|
2015-04-23 16:07:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
SynchronizationStart TransfersSubscription::getSyncStart() {
|
2015-07-30 15:22:07 +00:00
|
|
|
return subscription.syncStart;
|
2015-04-23 16:07:22 +00:00
|
|
|
}
|
|
|
|
|
2015-07-30 15:22:07 +00:00
|
|
|
void TransfersSubscription::onBlockchainDetach(uint32_t height) {
|
|
|
|
std::vector<Hash> deletedTransactions = transfers.detach(height);
|
2015-04-23 16:07:22 +00:00
|
|
|
for (auto& hash : deletedTransactions) {
|
|
|
|
m_observerManager.notify(&ITransfersObserver::onTransactionDeleted, this, hash);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-30 15:22:07 +00:00
|
|
|
void TransfersSubscription::onError(const std::error_code& ec, uint32_t height) {
|
|
|
|
if (height != WALLET_LEGACY_UNCONFIRMED_TRANSACTION_HEIGHT) {
|
|
|
|
transfers.detach(height);
|
2015-04-23 16:07:22 +00:00
|
|
|
}
|
|
|
|
m_observerManager.notify(&ITransfersObserver::onError, this, height, ec);
|
|
|
|
}
|
|
|
|
|
2015-07-30 15:22:07 +00:00
|
|
|
bool TransfersSubscription::advanceHeight(uint32_t height) {
|
|
|
|
return transfers.advanceHeight(height);
|
2015-04-23 16:07:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const AccountKeys& TransfersSubscription::getKeys() const {
|
2015-07-30 15:22:07 +00:00
|
|
|
return subscription.keys;
|
2015-04-23 16:07:22 +00:00
|
|
|
}
|
|
|
|
|
2015-08-11 14:33:19 +00:00
|
|
|
void TransfersSubscription::addTransaction(const TransactionBlockInfo& blockInfo, const ITransactionReader& tx,
|
2015-07-30 15:22:07 +00:00
|
|
|
const std::vector<TransactionOutputInformationIn>& transfersList) {
|
|
|
|
bool added = transfers.addTransaction(blockInfo, tx, transfersList);
|
2015-04-23 16:07:22 +00:00
|
|
|
if (added) {
|
|
|
|
m_observerManager.notify(&ITransfersObserver::onTransactionUpdated, this, tx.getTransactionHash());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-30 15:22:07 +00:00
|
|
|
AccountPublicAddress TransfersSubscription::getAddress() {
|
|
|
|
return subscription.keys.address;
|
2015-04-23 16:07:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ITransfersContainer& TransfersSubscription::getContainer() {
|
2015-07-30 15:22:07 +00:00
|
|
|
return transfers;
|
2015-04-23 16:07:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void TransfersSubscription::deleteUnconfirmedTransaction(const Hash& transactionHash) {
|
2015-07-30 15:22:07 +00:00
|
|
|
transfers.deleteUnconfirmedTransaction(transactionHash);
|
2015-04-23 16:07:22 +00:00
|
|
|
m_observerManager.notify(&ITransfersObserver::onTransactionDeleted, this, transactionHash);
|
|
|
|
}
|
|
|
|
|
2015-08-11 14:33:19 +00:00
|
|
|
void TransfersSubscription::markTransactionConfirmed(const TransactionBlockInfo& block, const Hash& transactionHash,
|
2015-07-30 15:22:07 +00:00
|
|
|
const std::vector<uint32_t>& globalIndices) {
|
|
|
|
transfers.markTransactionConfirmed(block, transactionHash, globalIndices);
|
2015-04-23 16:07:22 +00:00
|
|
|
m_observerManager.notify(&ITransfersObserver::onTransactionUpdated, this, transactionHash);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|