// Copyright (c) 2011-2016 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #pragma once #include #include #include #include "crypto/hash.h" #include "IWalletLegacy.h" namespace CryptoNote { namespace WalletHelper { class SaveWalletResultObserver : public CryptoNote::IWalletLegacyObserver { public: std::promise saveResult; virtual void saveCompleted(std::error_code result) override { saveResult.set_value(result); } }; class InitWalletResultObserver : public CryptoNote::IWalletLegacyObserver { public: std::promise initResult; virtual void initCompleted(std::error_code result) override { initResult.set_value(result); } }; class SendCompleteResultObserver : public CryptoNote::IWalletLegacyObserver { public: virtual void sendTransactionCompleted(CryptoNote::TransactionId transactionId, std::error_code result) override; std::error_code wait(CryptoNote::TransactionId transactionId); private: std::mutex m_mutex; std::condition_variable m_condition; std::map m_finishedTransactions; std::error_code m_result; }; class IWalletRemoveObserverGuard { public: IWalletRemoveObserverGuard(CryptoNote::IWalletLegacy& wallet, CryptoNote::IWalletLegacyObserver& observer); ~IWalletRemoveObserverGuard(); void removeObserver(); private: CryptoNote::IWalletLegacy& m_wallet; CryptoNote::IWalletLegacyObserver& m_observer; bool m_removed; }; void prepareFileNames(const std::string& file_path, std::string& keys_file, std::string& wallet_file); void storeWallet(CryptoNote::IWalletLegacy& wallet, const std::string& walletFilename); } }