]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
fix macOS built-in updater
authortobtoht <thotbot@protonmail.com>
Thu, 28 Oct 2021 16:55:47 +0000 (18:55 +0200)
committertobtoht <thotbot@protonmail.com>
Thu, 28 Oct 2021 16:55:47 +0000 (18:55 +0200)
CMakeLists.txt
monero
src/dialog/UpdateDialog.cpp
src/dialog/UpdateDialog.h
src/utils/Utils.cpp
src/utils/Utils.h

index 08f8ed3893526f13ae88a9ac627bf6e55cdabc8a..8e803939d40744dd6a422f5a990749515e3c51ce 100644 (file)
@@ -32,7 +32,7 @@ if(DEBUG)
     set(CMAKE_VERBOSE_MAKEFILE ON)
 endif()
 
-set(MONERO_HEAD "eba8ce661ce289df99f507225dbb1aaf58125e85")
+set(MONERO_HEAD "bdd284b35d2e2c9c6ac733b4bc5ce8bd3b1162dd")
 set(BUILD_GUI_DEPS ON)
 option(ARCH "Target architecture" "x86-64")
 set(BUILD_64 ON)
diff --git a/monero b/monero
index d4257af2e7503fc6dc09fc704606230d353a0a02..bdd284b35d2e2c9c6ac733b4bc5ce8bd3b1162dd 160000 (submodule)
--- a/monero
+++ b/monero
@@ -1 +1 @@
-Subproject commit d4257af2e7503fc6dc09fc704606230d353a0a02
+Subproject commit bdd284b35d2e2c9c6ac733b4bc5ce8bd3b1162dd
index af673d855fa0bcc07ad2801e64b60b73af35bf2e..5ed8fa4248305fe300688dc8c6f4a3935e5b7515 100644 (file)
@@ -117,6 +117,11 @@ void UpdateDialog::onInstallUpdate() {
     ui->btn_installUpdate->hide();
     this->setStatus("Unzipping archive...");
 
+#ifdef Q_OS_MACOS
+    this->installUpdateMac();
+    return;
+#endif
+
     zip_error_t err;
     zip_error_init(&err);
 
@@ -172,14 +177,7 @@ void UpdateDialog::onInstallUpdate() {
     zip_fclose(zf);
     zip_close(zip_archive);
 
-    QString applicationPath = qgetenv("APPIMAGE");
-    if (!applicationPath.isEmpty()) {
-        applicationPath = QFileInfo(applicationPath).absoluteDir().path();
-    } else {
-        applicationPath = QCoreApplication::applicationDirPath();
-    }
-
-    QDir applicationDir(applicationPath);
+    QDir applicationDir(Utils::applicationPath());
     QString filePath = applicationDir.filePath(name);
     m_updatePath = filePath;
 
@@ -206,6 +204,41 @@ void UpdateDialog::onInstallUpdate() {
     ui->btn_restart->show();
 }
 
+void UpdateDialog::installUpdateMac() {
+    QString appPath = Utils::applicationPath();
+    QDir appDir(appPath);
+    if (appPath.endsWith("Contents/MacOS")) {
+        appDir.cd("../../..");
+    }
+    QString appName = QString("feather-%1").arg(m_version);
+    QString zipName = QString("%1.zip").arg(appName);
+    QString fPath = appDir.filePath(zipName);
+
+    QFile file(fPath);
+    qDebug() << "Writing zip file to " << fPath;
+    if (!file.open(QIODevice::WriteOnly))
+    {
+        this->onInstallError(QString("Error: Could not write to application path: %1").arg(fPath));
+        return;
+    }
+
+    if (static_cast<size_t>(file.write(&m_updateZipArchive[0], m_updateZipArchive.size())) != m_updateZipArchive.size()) {
+        this->onInstallError("Error: Unable to write file");
+        return;
+    }
+
+    QProcess unzip;
+    unzip.start("/usr/bin/unzip", {"-n", fPath, "-d", appDir.path()});
+    unzip.waitForFinished();
+
+    m_updatePath = QString("%1.app/Contents/MacOS/feather").arg(appDir.filePath(appName));
+
+    file.remove();
+
+    this->setStatus("Installation successful. Do you want to restart Feather now?");
+    ui->btn_restart->show();
+}
+
 void UpdateDialog::onInstallError(const QString &errMsg) {
     this->setStatus(errMsg);
 }
index 27396665bc945c7872cd285617bc15533a4177a0..b64332c8e7951238fe1634268a02bebf8de7be69 100644 (file)
@@ -33,6 +33,7 @@ signals:
 
 private:
     void setStatus(const QString &msg, bool success = false);
+    void installUpdateMac();
 
     QScopedPointer<Ui::UpdateDialog> ui;
 
index f754c0fbcdea634bf6236479fa481f59df1c5e5f..9be92c5f358b6357201e256fbf278ec9903e07eb 100644 (file)
@@ -126,6 +126,16 @@ QString defaultWalletDir() {
 #endif
 }
 
+QString applicationPath() {
+    QString applicationPath = qgetenv("APPIMAGE");
+    if (!applicationPath.isEmpty()) {
+        applicationPath = QFileInfo(applicationPath).absoluteDir().path();
+    } else {
+        applicationPath = QCoreApplication::applicationDirPath();
+    }
+    return applicationPath;
+}
+
 bool validateJSON(const QByteArray &blob) {
     QJsonDocument doc = QJsonDocument::fromJson(blob);
     QString jsonString = doc.toJson(QJsonDocument::Indented);
index 2df870ffa57cc8d5b1748981fd7904fd36af0308..ea20f7ac59c66c22c74eb04703b20a3a71a7f228 100644 (file)
@@ -23,6 +23,7 @@ namespace Utils
 
     bool dirExists(const QString &path);
     QString defaultWalletDir();
+    QString applicationPath();
 
     bool validateJSON(const QByteArray &blob);
     bool readJsonFile(QIODevice &device, QSettings::SettingsMap &map);