diff options
| author | Ilya Kitaev <mbg033@gmail.com> | 2016-08-18 21:55:34 +0300 |
|---|---|---|
| committer | Ilya Kitaev <mbg033@gmail.com> | 2016-08-18 21:55:34 +0300 |
| commit | d3234bb91564ee8327b111e0acf2a83153929c25 (patch) | |
| tree | 8831398e88dfcefe8656486a227105e84a58bb7c /src/libwalletqt | |
| parent | c1269301f7c19a849b0fae7ddbe9afd38aaf71d3 (diff) | |
| download | monzero-gui-d3234bb91564ee8327b111e0acf2a83153929c25.tar.gz monzero-gui-d3234bb91564ee8327b111e0acf2a83153929c25.tar.xz monzero-gui-d3234bb91564ee8327b111e0acf2a83153929c25.zip | |
WalletManager::openWalletAsync in progress
Diffstat (limited to 'src/libwalletqt')
| -rw-r--r-- | src/libwalletqt/WalletManager.cpp | 34 | ||||
| -rw-r--r-- | src/libwalletqt/WalletManager.h | 33 |
2 files changed, 62 insertions, 5 deletions
diff --git a/src/libwalletqt/WalletManager.cpp b/src/libwalletqt/WalletManager.cpp index a7742bca..50a61553 100644 --- a/src/libwalletqt/WalletManager.cpp +++ b/src/libwalletqt/WalletManager.cpp @@ -6,6 +6,7 @@ #include <QDir> #include <QDebug> #include <QUrl> +#include <QtConcurrent/QtConcurrent> @@ -42,6 +43,20 @@ Wallet *WalletManager::openWallet(const QString &path, const QString &password, return wallet; } +void WalletManager::openWalletAsync(const QString &path, const QString &password, bool testnet) +{ + QFuture<Wallet*> future = QtConcurrent::run(this, &WalletManager::openWallet, + path, password, testnet); + QFutureWatcher<Wallet*> * watcher = new QFutureWatcher<Wallet*>(); + watcher->setFuture(future); + connect(watcher, &QFutureWatcher<Wallet*>::finished, + this, [this, watcher]() { + QFuture<Wallet*> future = watcher->future(); + watcher->deleteLater(); + emit walletOpened(future.result()); + }); +} + Wallet *WalletManager::recoveryWallet(const QString &path, const QString &memo, bool testnet) { @@ -51,9 +66,26 @@ Wallet *WalletManager::recoveryWallet(const QString &path, const QString &memo, } -void WalletManager::closeWallet(Wallet *wallet) +QString WalletManager::closeWallet(Wallet *wallet) { + QString result = wallet->address(); delete wallet; + return result; +} + +void WalletManager::closeWalletAsync(Wallet *wallet) +{ + QFuture<QString> future = QtConcurrent::run(this, &WalletManager::closeWallet, + wallet); + QFutureWatcher<QString> * watcher = new QFutureWatcher<QString>(); + watcher->setFuture(future); + + connect(watcher, &QFutureWatcher<QString>::finished, + this, [this, watcher]() { + QFuture<QString> future = watcher->future(); + watcher->deleteLater(); + emit future.result(); + }); } bool WalletManager::walletExists(const QString &path) const diff --git a/src/libwalletqt/WalletManager.h b/src/libwalletqt/WalletManager.h index 29df9048..27224b5f 100644 --- a/src/libwalletqt/WalletManager.h +++ b/src/libwalletqt/WalletManager.h @@ -16,15 +16,38 @@ public: // wizard: createWallet path; Q_INVOKABLE Wallet * createWallet(const QString &path, const QString &password, const QString &language, bool testnet = false); - // just for future use + + /*! + * \brief openWallet - opens wallet by given path + * \param path - wallet filename + * \param password - wallet password. Empty string in wallet isn't password protected + * \param testnet - determines if we running testnet + * \return wallet object pointer + */ Q_INVOKABLE Wallet * openWallet(const QString &path, const QString &password, bool testnet = false); + /*! + * \brief openWalletAsync - asynchronous version of "openWallet". Returns immediately. "walletOpened" signal + * emitted when wallet opened; + */ + Q_INVOKABLE void openWalletAsync(const QString &path, const QString &password, bool testnet = false); + // wizard: recoveryWallet path; hint: internally it recorvers wallet and set password = "" Q_INVOKABLE Wallet * recoveryWallet(const QString &path, const QString &memo, bool testnet = false); - //! utils: close wallet to free memory - Q_INVOKABLE void closeWallet(Wallet * wallet); + /*! + * \brief closeWallet - closes wallet and frees memory + * \param wallet + * \return wallet address + */ + Q_INVOKABLE QString closeWallet(Wallet * wallet); + + /*! + * \brief closeWalletAsync - asynchronous version of "closeWallet" + * \param wallet - wallet pointer; + */ + Q_INVOKABLE void closeWalletAsync(Wallet * wallet); //! checks is given filename is a wallet; Q_INVOKABLE bool walletExists(const QString &path) const; @@ -50,8 +73,10 @@ public: signals: -public slots: + void walletOpened(Wallet * wallet); + void walletClosed(const QString &walletAddress); +public slots: private: explicit WalletManager(QObject *parent = 0); |
