From cfdba59584d434e38407569441f4f518dd9507fa Mon Sep 17 00:00:00 2001 From: xiphon Date: Sun, 26 Apr 2020 02:23:51 +0000 Subject: Wallet: implement async wallet storing --- src/libwalletqt/Wallet.cpp | 15 ++++++++++++--- src/libwalletqt/Wallet.h | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index 8eacb113..355ce6a9 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -48,7 +48,6 @@ #include #include #include -#include #include namespace { @@ -230,9 +229,19 @@ QString Wallet::path() const return QDir::toNativeSeparators(QString::fromStdString(m_walletImpl->path())); } -bool Wallet::store(const QString &path) +void Wallet::storeAsync(const QJSValue &callback, const QString &path /* = "" */) { - return m_walletImpl->store(path.toStdString()); + const auto future = m_scheduler.run( + [this, path] { + QMutexLocker locker(&m_storeMutex); + + return QJSValueList({m_walletImpl->store(path.toStdString())}); + }, + callback); + if (!future.first) + { + QJSValue(callback).call(QJSValueList({false})); + } } bool Wallet::init(const QString &daemonAddress, bool trustedDaemon, quint64 upperTransactionLimit, bool isRecovering, bool isRecoveringFromDevice, quint64 restoreHeight) diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index 5a408049..3450b1ce 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -144,7 +144,7 @@ public: //! saves wallet to the file by given path //! empty path stores in current location - Q_INVOKABLE bool store(const QString &path = ""); + Q_INVOKABLE void storeAsync(const QJSValue &callback, const QString &path = ""); //! initializes wallet asynchronously Q_INVOKABLE void initAsync(const QString &daemonAddress, bool trustedDaemon = false, quint64 upperTransactionLimit = 0, bool isRecovering = false, bool isRecoveringFromDevice = false, quint64 restoreHeight = 0); @@ -434,6 +434,7 @@ private: QString m_daemonPassword; Monero::WalletListener *m_walletListener; FutureScheduler m_scheduler; + QMutex m_storeMutex; }; -- cgit v1.2.3