diff --git a/main.qml b/main.qml index cd962ca8..18aa154b 100644 --- a/main.qml +++ b/main.qml @@ -821,6 +821,7 @@ ApplicationWindow { // walletManager.walletOpened.connect(onWalletOpened); walletManager.walletClosed.connect(onWalletClosed); + walletManager.checkUpdatesComplete.connect(onWalletCheckUpdatesComplete); if(typeof daemonManager != "undefined") { daemonManager.daemonStarted.connect(onDaemonStarted); @@ -1341,8 +1342,7 @@ ApplicationWindow { Qt.quit(); } - function checkUpdates() { - var update = walletManager.checkUpdates("monero-gui", "gui") + function onWalletCheckUpdatesComplete(update) { if (update === "") return print("Update found: " + update) @@ -1360,6 +1360,10 @@ ApplicationWindow { } } + function checkUpdates() { + walletManager.checkUpdatesAsync("monero-gui", "gui") + } + Timer { id: updatesTimer interval: 3600*1000; running: true; repeat: true diff --git a/src/libwalletqt/WalletManager.cpp b/src/libwalletqt/WalletManager.cpp index 300b3699..396274c6 100644 --- a/src/libwalletqt/WalletManager.cpp +++ b/src/libwalletqt/WalletManager.cpp @@ -331,8 +331,26 @@ bool WalletManager::saveQrCode(const QString &code, const QString &path) const return QRCodeImageProvider::genQrImage(code, &size).scaled(size.expandedTo(QSize(240, 240)), Qt::KeepAspectRatio).save(path, "PNG", 100); } +void WalletManager::checkUpdatesAsync(const QString &software, const QString &subdir) const +{ + QFuture future = QtConcurrent::run(this, &WalletManager::checkUpdates, + software, subdir); + QFutureWatcher * watcher = new QFutureWatcher(); + connect(watcher, &QFutureWatcher::finished, + this, [this, watcher]() { + QFuture future = watcher->future(); + watcher->deleteLater(); + qDebug() << "Checking for updates - done"; + emit checkUpdatesComplete(future.result()); + }); + watcher->setFuture(future); +} + + + QString WalletManager::checkUpdates(const QString &software, const QString &subdir) const { + qDebug() << "Checking for updates"; const std::tuple result = Monero::WalletManager::checkUpdates(software.toStdString(), subdir.toStdString()); if (!std::get<0>(result)) return QString(""); diff --git a/src/libwalletqt/WalletManager.h b/src/libwalletqt/WalletManager.h index 6824d603..bf9bf19a 100644 --- a/src/libwalletqt/WalletManager.h +++ b/src/libwalletqt/WalletManager.h @@ -134,6 +134,7 @@ public: Q_INVOKABLE QString resolveOpenAlias(const QString &address) const; Q_INVOKABLE bool parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector &unknown_parameters, QString &error); Q_INVOKABLE bool saveQrCode(const QString &, const QString &) const; + Q_INVOKABLE void checkUpdatesAsync(const QString &software, const QString &subdir) const; Q_INVOKABLE QString checkUpdates(const QString &software, const QString &subdir) const; // clear/rename wallet cache @@ -143,6 +144,7 @@ signals: void walletOpened(Wallet * wallet); void walletClosed(const QString &walletAddress); + void checkUpdatesComplete(const QString &result) const; public slots: private: