diff --git a/CMakeLists.txt b/CMakeLists.txt index 08f8ed3..8e80393 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 d4257af..bdd284b 160000 --- a/monero +++ b/monero @@ -1 +1 @@ -Subproject commit d4257af2e7503fc6dc09fc704606230d353a0a02 +Subproject commit bdd284b35d2e2c9c6ac733b4bc5ce8bd3b1162dd diff --git a/src/dialog/UpdateDialog.cpp b/src/dialog/UpdateDialog.cpp index af673d8..5ed8fa4 100644 --- a/src/dialog/UpdateDialog.cpp +++ b/src/dialog/UpdateDialog.cpp @@ -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(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); } diff --git a/src/dialog/UpdateDialog.h b/src/dialog/UpdateDialog.h index 2739666..b64332c 100644 --- a/src/dialog/UpdateDialog.h +++ b/src/dialog/UpdateDialog.h @@ -33,6 +33,7 @@ signals: private: void setStatus(const QString &msg, bool success = false); + void installUpdateMac(); QScopedPointer ui; diff --git a/src/utils/Utils.cpp b/src/utils/Utils.cpp index f754c0f..9be92c5 100644 --- a/src/utils/Utils.cpp +++ b/src/utils/Utils.cpp @@ -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); diff --git a/src/utils/Utils.h b/src/utils/Utils.h index 2df870f..ea20f7a 100644 --- a/src/utils/Utils.h +++ b/src/utils/Utils.h @@ -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);