aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorj-berman <justinberman@protonmail.com>2023-11-16 16:38:52 -0800
committerj-berman <justinberman@protonmail.com>2025-08-03 10:26:11 -0700
commit5332495c2404ab4b102c98c22419e70143b1dc90 (patch)
tree71c5a543eed50a0c244594afe3fb9028b5650dd4 /src
parent10a184db8b242d4cff97e0f5845342cfccfc2042 (diff)
downloadmonzero-gui-5332495c2404ab4b102c98c22419e70143b1dc90.tar.gz
monzero-gui-5332495c2404ab4b102c98c22419e70143b1dc90.tar.xz
monzero-gui-5332495c2404ab4b102c98c22419e70143b1dc90.zip
Implement background sync when locked
Diffstat (limited to 'src')
-rw-r--r--src/libwalletqt/Wallet.cpp63
-rw-r--r--src/libwalletqt/Wallet.h22
2 files changed, 85 insertions, 0 deletions
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp
index cec4ff63..a5ac6925 100644
--- a/src/libwalletqt/Wallet.cpp
+++ b/src/libwalletqt/Wallet.cpp
@@ -529,6 +529,69 @@ bool Wallet::scanTransactions(const QVector<QString> &txids)
return m_walletImpl->scanTransactions(c);
}
+void Wallet::setupBackgroundSync(const Wallet::BackgroundSyncType background_sync_type, const QString &wallet_password)
+{
+ qDebug() << "Setting up background sync";
+ bool refreshEnabled = m_refreshEnabled;
+ pauseRefresh();
+
+ // run inside scheduler because of lag when stopping/starting refresh
+ m_scheduler.run([this, refreshEnabled, background_sync_type, &wallet_password] {
+ m_walletImpl->setupBackgroundSync(
+ static_cast<Monero::Wallet::BackgroundSyncType>(background_sync_type),
+ wallet_password.toStdString(),
+ Monero::optional<std::string>());
+ if (refreshEnabled)
+ startRefresh();
+ emit backgroundSyncSetup();
+ });
+}
+
+Wallet::BackgroundSyncType Wallet::getBackgroundSyncType() const
+{
+ return static_cast<BackgroundSyncType>(m_walletImpl->getBackgroundSyncType());
+}
+
+bool Wallet::isBackgroundWallet() const
+{
+ return m_walletImpl->isBackgroundWallet();
+}
+
+bool Wallet::isBackgroundSyncing() const
+{
+ return m_walletImpl->isBackgroundSyncing();
+}
+
+void Wallet::startBackgroundSync()
+{
+ qDebug() << "Starting background sync";
+ bool refreshEnabled = m_refreshEnabled;
+ pauseRefresh();
+
+ // run inside scheduler because of lag when stopping/starting refresh
+ m_scheduler.run([this, refreshEnabled] {
+ m_walletImpl->startBackgroundSync();
+ if (refreshEnabled)
+ startRefresh();
+ emit backgroundSyncStarted();
+ });
+}
+
+void Wallet::stopBackgroundSync(const QString &password)
+{
+ qDebug() << "Stopping background sync";
+ bool refreshEnabled = m_refreshEnabled;
+ pauseRefresh();
+
+ // run inside scheduler because of lag when stopping/starting refresh
+ m_scheduler.run([this, password, refreshEnabled] {
+ m_walletImpl->stopBackgroundSync(password.toStdString());
+ if (refreshEnabled)
+ startRefresh();
+ emit backgroundSyncStopped();
+ });
+}
+
bool Wallet::refresh(bool historyAndSubaddresses /* = true */)
{
refreshingSet(true);
diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h
index 398d19c6..a5bb913c 100644
--- a/src/libwalletqt/Wallet.h
+++ b/src/libwalletqt/Wallet.h
@@ -112,6 +112,14 @@ public:
Q_ENUM(ConnectionStatus)
+ enum BackgroundSyncType {
+ BackgroundSync_Off = Monero::Wallet::BackgroundSync_Off,
+ BackgroundSync_ReusePassword = Monero::Wallet::BackgroundSync_ReusePassword,
+ BackgroundSync_CustomPassword = Monero::Wallet::BackgroundSync_CustomPassword
+ };
+
+ Q_ENUM(BackgroundSyncType)
+
//! returns mnemonic seed
QString getSeed() const;
@@ -215,6 +223,17 @@ public:
//! scan transactions
Q_INVOKABLE bool scanTransactions(const QVector<QString> &txids);
+ Q_INVOKABLE void setupBackgroundSync(const BackgroundSyncType background_sync_type, const QString &wallet_password);
+ Q_INVOKABLE BackgroundSyncType getBackgroundSyncType() const;
+ Q_INVOKABLE bool isBackgroundWallet() const;
+ Q_INVOKABLE bool isBackgroundSyncing() const;
+
+ //! scan in the background with just the view key (wipe the spend key)
+ Q_INVOKABLE void startBackgroundSync();
+
+ //! bring the spend key back and process background synced txs
+ Q_INVOKABLE void stopBackgroundSync(const QString &password);
+
//! refreshes the wallet
Q_INVOKABLE bool refresh(bool historyAndSubaddresses = true);
@@ -369,6 +388,9 @@ signals:
void moneyReceived(const QString &txId, quint64 amount);
void unconfirmedMoneyReceived(const QString &txId, quint64 amount);
void newBlock(quint64 height, quint64 targetHeight);
+ void backgroundSyncSetup() const;
+ void backgroundSyncStarted() const;
+ void backgroundSyncStopped() const;
void addressBookChanged() const;
void historyModelChanged() const;
void walletCreationHeightChanged();