aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2020-04-28 15:14:40 -0500
committerluigi1111 <luigi1111w@gmail.com>2020-04-28 15:14:40 -0500
commit286c75aa5bb29bb54ea8b3b060e925ecfc3c6f69 (patch)
treeb9a5c1519f232da6e27e9a3c258a999200a5fe2b
parent0a4d65dd99b6cf8973f30a32f70f298f52f6cbfe (diff)
parent9b98e0a2f5b28279fa4cbe37be44f4866360a17d (diff)
downloadmonzero-gui-286c75aa5bb29bb54ea8b3b060e925ecfc3c6f69.tar.gz
monzero-gui-286c75aa5bb29bb54ea8b3b060e925ecfc3c6f69.tar.xz
monzero-gui-286c75aa5bb29bb54ea8b3b060e925ecfc3c6f69.zip
Merge pull request #2850
9b98e0a checkUpates: installer support (Win), use GUI buildTag and version (xiphon)
-rw-r--r--main.qml21
-rw-r--r--src/libwalletqt/WalletManager.cpp14
-rw-r--r--src/libwalletqt/WalletManager.h6
-rw-r--r--src/main/oshelper.cpp45
-rw-r--r--src/main/oshelper.h5
5 files changed, 86 insertions, 5 deletions
diff --git a/main.qml b/main.qml
index bb68008d..841dcb22 100644
--- a/main.qml
+++ b/main.qml
@@ -45,6 +45,7 @@ import "pages/merchant" as MoneroMerchant
import "wizard"
import "js/Utils.js" as Utils
import "js/Windows.js" as Windows
+import "version.js" as Version
ApplicationWindow {
id: appWindow
@@ -1988,8 +1989,26 @@ ApplicationWindow {
}
}
+ function getBuildTag() {
+ if (isMac) {
+ return "mac-x64";
+ }
+ if (isWindows) {
+ return oshelper.installed ? "install-win-x64" : "win-x64";
+ }
+ if (isLinux) {
+ return "linux-x64";
+ }
+ return "source";
+ }
+
function checkUpdates() {
- walletManager.checkUpdatesAsync("monero-gui", "gui")
+ const version = Version.GUI_VERSION.match(/\d+\.\d+\.\d+\.\d+/);
+ if (version) {
+ walletManager.checkUpdatesAsync("monero-gui", "gui", getBuildTag(), version[0]);
+ } else {
+ console.error("failed to parse version number", Version.GUI_VERSION);
+ }
}
Timer {
diff --git a/src/libwalletqt/WalletManager.cpp b/src/libwalletqt/WalletManager.cpp
index ed4f5776..a5c9e0ff 100644
--- a/src/libwalletqt/WalletManager.cpp
+++ b/src/libwalletqt/WalletManager.cpp
@@ -463,10 +463,18 @@ 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)
+void WalletManager::checkUpdatesAsync(
+ const QString &software,
+ const QString &subdir,
+ const QString &buildTag,
+ const QString &version)
{
- m_scheduler.run([this, software, subdir] {
- const auto updateInfo = Monero::WalletManager::checkUpdates(software.toStdString(), subdir.toStdString());
+ m_scheduler.run([this, software, subdir, buildTag, version] {
+ const auto updateInfo = Monero::WalletManager::checkUpdates(
+ software.toStdString(),
+ subdir.toStdString(),
+ buildTag.toStdString().c_str(),
+ version.toStdString().c_str());
if (!std::get<0>(updateInfo))
{
return;
diff --git a/src/libwalletqt/WalletManager.h b/src/libwalletqt/WalletManager.h
index 6470152d..01767716 100644
--- a/src/libwalletqt/WalletManager.h
+++ b/src/libwalletqt/WalletManager.h
@@ -175,7 +175,11 @@ public:
Q_INVOKABLE bool parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector<QString> &unknown_parameters, QString &error) const;
Q_INVOKABLE QVariantMap parse_uri_to_object(const QString &uri) const;
Q_INVOKABLE bool saveQrCode(const QString &, const QString &) const;
- Q_INVOKABLE void checkUpdatesAsync(const QString &software, const QString &subdir);
+ Q_INVOKABLE void checkUpdatesAsync(
+ const QString &software,
+ const QString &subdir,
+ const QString &buildTag,
+ const QString &version);
Q_INVOKABLE QString checkUpdates(const QString &software, const QString &subdir) const;
// clear/rename wallet cache
diff --git a/src/main/oshelper.cpp b/src/main/oshelper.cpp
index 75c668f5..c4923f35 100644
--- a/src/main/oshelper.cpp
+++ b/src/main/oshelper.cpp
@@ -27,6 +27,7 @@
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "oshelper.h"
+#include <QCoreApplication>
#include <QFileDialog>
#include <QStandardPaths>
#include <QTemporaryFile>
@@ -164,3 +165,47 @@ QString OSHelper::temporaryPath() const
{
return QDir::tempPath();
}
+
+bool OSHelper::installed() const
+{
+#ifdef Q_OS_WIN
+ static constexpr const wchar_t installKey[] =
+ L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Monero GUI Wallet_is1";
+ static constexpr const wchar_t installValue[] = L"InstallLocation";
+
+ DWORD size;
+ LSTATUS status =
+ ::RegGetValueW(HKEY_LOCAL_MACHINE, installKey, installValue, RRF_RT_REG_SZ, nullptr, nullptr, &size);
+ if (status == ERROR_FILE_NOT_FOUND)
+ {
+ return false;
+ }
+ if (status != ERROR_SUCCESS)
+ {
+ qCritical() << "RegGetValueW failed (get size)" << status;
+ return false;
+ }
+
+ std::wstring installLocation;
+ installLocation.resize(size / sizeof(std::wstring::value_type));
+ size = installLocation.size() * sizeof(std::wstring::value_type);
+ status = ::RegGetValueW(
+ HKEY_LOCAL_MACHINE,
+ installKey,
+ installValue,
+ RRF_RT_REG_SZ,
+ nullptr,
+ &installLocation[0],
+ &size);
+ if (status != ERROR_SUCCESS)
+ {
+ qCritical() << "RegGetValueW Failed (read)" << status;
+ return false;
+ }
+
+ const QDir installDir(QString(reinterpret_cast<const QChar *>(&installLocation[0])));
+ return installDir == QDir(QCoreApplication::applicationDirPath());
+#else
+ return false;
+#endif
+}
diff --git a/src/main/oshelper.h b/src/main/oshelper.h
index ba498554..f3bc4c04 100644
--- a/src/main/oshelper.h
+++ b/src/main/oshelper.h
@@ -36,6 +36,8 @@
class OSHelper : public QObject
{
Q_OBJECT
+ Q_PROPERTY(bool installed READ installed CONSTANT);
+
public:
explicit OSHelper(QObject *parent = 0);
@@ -47,6 +49,9 @@ public:
Q_INVOKABLE bool removeTemporaryWallet(const QString &walletName) const;
Q_INVOKABLE bool isCapsLock() const;
+private:
+ bool installed() const;
+
signals:
public slots: