From 0d30132cc458d1094678b443efabbfc723a83222 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Sun, 10 Dec 2017 23:06:37 +0100 Subject: [PATCH] logic: Fixed crash when start screen was closed while checking for update --- .../qt/element/QtUpdateCheckerWidget.cpp | 28 ++++++++++++------- .../qt/element/QtUpdateCheckerWidget.h | 3 ++ src/lib_gui/qt/network/QtUpdateChecker.cpp | 6 ++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/lib_gui/qt/element/QtUpdateCheckerWidget.cpp b/src/lib_gui/qt/element/QtUpdateCheckerWidget.cpp index 24b74b05..cee39da7 100644 --- a/src/lib_gui/qt/element/QtUpdateCheckerWidget.cpp +++ b/src/lib_gui/qt/element/QtUpdateCheckerWidget.cpp @@ -58,19 +58,31 @@ QtUpdateCheckerWidget::QtUpdateCheckerWidget(QWidget* parent) } } +QtUpdateCheckerWidget::~QtUpdateCheckerWidget() +{ + if (m_deleteCheck) + { + *m_deleteCheck.get() = true; + } +} + void QtUpdateCheckerWidget::checkUpdate(bool force) { - ApplicationSettings* appSettings = ApplicationSettings::getInstance().get(); - appSettings->setUpdateVersion(Version::getApplicationVersion()); - appSettings->setUpdateDownloadUrl(""); - appSettings->save(); - m_button->setText("checking for update..."); m_button->setEnabled(false); + std::shared_ptr deleteCheck = std::make_shared(false); + m_deleteCheck = deleteCheck; + QtUpdateChecker::check(force, - [this, appSettings](QtUpdateChecker::Result result) + [deleteCheck, this](QtUpdateChecker::Result result) { + bool deleted = *deleteCheck.get(); + if (deleted) + { + return; + } + if (!result.success) { m_button->setText("update check failed"); @@ -82,10 +94,6 @@ void QtUpdateCheckerWidget::checkUpdate(bool force) else { setDownloadUrl(result.url); - - appSettings->setUpdateVersion(result.version); - appSettings->setUpdateDownloadUrl(result.url.toStdString()); - appSettings->save(); } } ); diff --git a/src/lib_gui/qt/element/QtUpdateCheckerWidget.h b/src/lib_gui/qt/element/QtUpdateCheckerWidget.h index 0874a800..8caff4c1 100644 --- a/src/lib_gui/qt/element/QtUpdateCheckerWidget.h +++ b/src/lib_gui/qt/element/QtUpdateCheckerWidget.h @@ -10,12 +10,15 @@ class QtUpdateCheckerWidget { public: QtUpdateCheckerWidget(QWidget* parent = nullptr); + virtual ~QtUpdateCheckerWidget(); private: void checkUpdate(bool force); void setDownloadUrl(QString url); QPushButton* m_button; + + std::shared_ptr m_deleteCheck; }; #endif // QT_UPDATE_CHECKER_WIDGET_H diff --git a/src/lib_gui/qt/network/QtUpdateChecker.cpp b/src/lib_gui/qt/network/QtUpdateChecker.cpp index 85498550..dc9c56ee 100644 --- a/src/lib_gui/qt/network/QtUpdateChecker.cpp +++ b/src/lib_gui/qt/network/QtUpdateChecker.cpp @@ -32,6 +32,8 @@ void QtUpdateChecker::check(bool force, std::function callback) ApplicationSettings* appSettings = ApplicationSettings::getInstance().get(); appSettings->setLastUpdateCheck(TimeStamp::now()); + appSettings->setUpdateVersion(Version::getApplicationVersion()); + appSettings->setUpdateDownloadUrl(""); appSettings->save(); QString urlString = "https://www.sourcetrail.com/api/v1/versions/latest"; @@ -128,6 +130,10 @@ void QtUpdateChecker::check(bool force, std::function callback) result.url = url; ApplicationSettings* appSettings = ApplicationSettings::getInstance().get(); + appSettings->setUpdateVersion(updateVersion); + appSettings->setUpdateDownloadUrl(url.toStdString()); + appSettings->save(); + if (!force && appSettings->getSkipUpdateForVersion() == updateVersion) { break;