// Copyright (c) 2012-2015, The CryptoNote developers, The Bytecoin developers // // This file is part of Bytecoin. // // Bytecoin is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Bytecoin is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with Bytecoin. If not, see . #include "TransfersSubscription.h" #include "IWalletLegacy.h" using namespace Crypto; namespace CryptoNote { TransfersSubscription::TransfersSubscription(const CryptoNote::Currency& currency, const AccountSubscription& sub) : subscription(sub), transfers(currency, sub.transactionSpendableAge) {} SynchronizationStart TransfersSubscription::getSyncStart() { return subscription.syncStart; } void TransfersSubscription::onBlockchainDetach(uint32_t height) { std::vector deletedTransactions = transfers.detach(height); for (auto& hash : deletedTransactions) { m_observerManager.notify(&ITransfersObserver::onTransactionDeleted, this, hash); } } void TransfersSubscription::onError(const std::error_code& ec, uint32_t height) { if (height != WALLET_LEGACY_UNCONFIRMED_TRANSACTION_HEIGHT) { transfers.detach(height); } m_observerManager.notify(&ITransfersObserver::onError, this, height, ec); } bool TransfersSubscription::advanceHeight(uint32_t height) { return transfers.advanceHeight(height); } const AccountKeys& TransfersSubscription::getKeys() const { return subscription.keys; } void TransfersSubscription::addTransaction(const TransactionBlockInfo& blockInfo, const ITransactionReader& tx, const std::vector& transfersList) { bool added = transfers.addTransaction(blockInfo, tx, transfersList); if (added) { m_observerManager.notify(&ITransfersObserver::onTransactionUpdated, this, tx.getTransactionHash()); } } AccountPublicAddress TransfersSubscription::getAddress() { return subscription.keys.address; } ITransfersContainer& TransfersSubscription::getContainer() { return transfers; } void TransfersSubscription::deleteUnconfirmedTransaction(const Hash& transactionHash) { transfers.deleteUnconfirmedTransaction(transactionHash); m_observerManager.notify(&ITransfersObserver::onTransactionDeleted, this, transactionHash); } void TransfersSubscription::markTransactionConfirmed(const TransactionBlockInfo& block, const Hash& transactionHash, const std::vector& globalIndices) { transfers.markTransactionConfirmed(block, transactionHash, globalIndices); m_observerManager.notify(&ITransfersObserver::onTransactionUpdated, this, transactionHash); } }