From fc87d2e1aab01f18c522e1246dcb72735932ba19 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 5 Sep 2017 23:26:34 +0200 Subject: [PATCH] ui: Added "Skip this Version" option to update dialog --- bin/app/user/ApplicationSettings_template.xml | 2 + src/lib/settings/ApplicationSettings.cpp | 14 +++ src/lib/settings/ApplicationSettings.h | 4 + src/lib_gui/qt/network/QtUpdateChecker.cpp | 16 ++- src/lib_license/utility/Version.cpp | 113 +++++++++--------- src/lib_license/utility/Version.h | 4 +- 6 files changed, 96 insertions(+), 57 deletions(-) diff --git a/bin/app/user/ApplicationSettings_template.xml b/bin/app/user/ApplicationSettings_template.xml index 93dd72c4..280bf12e 100644 --- a/bin/app/user/ApplicationSettings_template.xml +++ b/bin/app/user/ApplicationSettings_template.xml @@ -6,6 +6,7 @@ + @@ -84,6 +85,7 @@ + diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp index 8183a2ca..973fef42 100644 --- a/src/lib/settings/ApplicationSettings.cpp +++ b/src/lib/settings/ApplicationSettings.cpp @@ -7,6 +7,7 @@ #include "utility/TimeStamp.h" #include "utility/utility.h" #include "utility/UserPaths.h" +#include "utility/Version.h" const size_t ApplicationSettings::VERSION = 2; @@ -436,6 +437,19 @@ void ApplicationSettings::setLastUpdateCheck(const TimeStamp& time) setValue("user/update_check/last", time.toString()); } +Version ApplicationSettings::getSkipUpdateForVersion() const +{ + return Version::fromString(getValue("user/update_check/skip_version", "2017.1.0")); +} + +void ApplicationSettings::setSkipUpdateForVersion(const Version& version) +{ + if (version.isValid()) + { + setValue("user/update_check/skip_version", version.toDisplayString()); + } +} + int ApplicationSettings::getPluginPort() const { return getValue("network/plugin_port", 6666); diff --git a/src/lib/settings/ApplicationSettings.h b/src/lib/settings/ApplicationSettings.h index 36e02426..3cb9a63f 100644 --- a/src/lib/settings/ApplicationSettings.h +++ b/src/lib/settings/ApplicationSettings.h @@ -6,6 +6,7 @@ #include "settings/Settings.h" class TimeStamp; +class Version; class ApplicationSettings : public Settings @@ -128,6 +129,9 @@ public: TimeStamp getLastUpdateCheck() const; void setLastUpdateCheck(const TimeStamp& time); + Version getSkipUpdateForVersion() const; + void setSkipUpdateForVersion(const Version& version); + // network int getPluginPort() const; void setPluginPort(const int pluginPort); diff --git a/src/lib_gui/qt/network/QtUpdateChecker.cpp b/src/lib_gui/qt/network/QtUpdateChecker.cpp index 0cb8f460..4b46d009 100644 --- a/src/lib_gui/qt/network/QtUpdateChecker.cpp +++ b/src/lib_gui/qt/network/QtUpdateChecker.cpp @@ -111,6 +111,12 @@ void QtUpdateChecker::check(bool force) break; } + ApplicationSettings* appSettings = ApplicationSettings::getInstance().get(); + if (!force && appSettings->getSkipUpdateForVersion() == updateVersion) + { + break; + } + if (updateVersion > Version::getApplicationVersion()) { QMessageBox msgBox; @@ -118,10 +124,18 @@ void QtUpdateChecker::check(bool force) msgBox.setInformativeText( "Sourcetrial " + version + " is available for download: " + url + ""); msgBox.addButton("Close", QMessageBox::ButtonRole::NoRole); + msgBox.addButton("Skip this Version", QMessageBox::ButtonRole::NoRole); QPushButton* but = msgBox.addButton("Download", QMessageBox::ButtonRole::YesRole); msgBox.setDefaultButton(but); - if (msgBox.exec() == 1) + int val = msgBox.exec(); + + if (val == 1) + { + appSettings->setSkipUpdateForVersion(updateVersion); + appSettings->save(); + } + else if (val == 2) { QDesktopServices::openUrl(QUrl(url, QUrl::TolerantMode)); } diff --git a/src/lib_license/utility/Version.cpp b/src/lib_license/utility/Version.cpp index b892a81c..a129af6d 100644 --- a/src/lib_license/utility/Version.cpp +++ b/src/lib_license/utility/Version.cpp @@ -67,6 +67,60 @@ Version Version::fromString(const std::string& versionString) return Version(); } +void Version::setApplicationVersion(const Version& version) +{ + s_version = version; +} + +const Version& Version::getApplicationVersion() +{ + return s_version; +} + +Version::Version(int year, int minor, int commit, const std::string& hash) + : m_year(year) + , m_minorNumber(minor) + , m_commitNumber(commit) + , m_commitHash(hash) +{ +} + +bool Version::isEmpty() const +{ + return m_year == 0 && m_minorNumber == 0 && m_commitNumber == 0; +} + +bool Version::isValid() const +{ + if (m_minorNumber < 5 && m_minorNumber > 0 + && m_year > 2016) + { + return true; + } + return false; +} + +std::string Version::toShortString() const +{ + std::stringstream ss; + ss << m_year << '.' << m_minorNumber; + return ss.str(); +} + +std::string Version::toString() const +{ + std::stringstream ss; + ss << m_year << '.' << m_minorNumber << '-' << m_commitNumber << '-' << m_commitHash; + return ss.str(); +} + +std::string Version::toDisplayString() const +{ + std::stringstream ss; + ss << m_year << '.' << m_minorNumber << '.' << m_commitNumber; + return ss.str(); +} + bool Version::operator<(const Version& other) const { if (m_year != other.m_year) @@ -99,6 +153,11 @@ bool Version::operator>(const Version& other) const } } +bool Version::operator==(const Version& other) const +{ + return m_year == other.m_year && m_minorNumber == other.m_minorNumber && m_commitNumber == other.m_commitNumber; +} + Version& Version::operator+=(const int& number) { int minor = this->m_minorNumber - 1 + number; @@ -106,57 +165,3 @@ Version& Version::operator+=(const int& number) this->m_minorNumber = (minor%4) + 1; return *this; } - -bool Version::isValid() -{ - if (m_minorNumber < 5 && m_minorNumber > 0 - && m_year > 2016) - { - return true; - } - return false; -} - -void Version::setApplicationVersion(const Version& version) -{ - s_version = version; -} - -const Version& Version::getApplicationVersion() -{ - return s_version; -} - -Version::Version(int year, int minor, int commit, const std::string& hash) - : m_year(year) - , m_minorNumber(minor) - , m_commitNumber(commit) - , m_commitHash(hash) -{ -} - -bool Version::isEmpty() const -{ - return m_year == 0 && m_minorNumber == 0 && m_commitNumber == 0; -} - -std::string Version::toShortString() const -{ - std::stringstream ss; - ss << m_year << '.' << m_minorNumber; - return ss.str(); -} - -std::string Version::toString() const -{ - std::stringstream ss; - ss << m_year << '.' << m_minorNumber << '-' << m_commitNumber << '-' << m_commitHash; - return ss.str(); -} - -std::string Version::toDisplayString() const -{ - std::stringstream ss; - ss << m_year << '.' << m_minorNumber << '.' << m_commitNumber; - return ss.str(); -} diff --git a/src/lib_license/utility/Version.h b/src/lib_license/utility/Version.h index 8dc73959..0cfc1225 100644 --- a/src/lib_license/utility/Version.h +++ b/src/lib_license/utility/Version.h @@ -7,7 +7,6 @@ class Version { public: static Version fromString(const std::string& versionString); - static Version fromShortString(const std::string& versionString); static void setApplicationVersion(const Version& version); static const Version& getApplicationVersion(); @@ -15,6 +14,7 @@ public: Version(int year = 0, int minor = 0, int commit = 0, const std::string& hash = ""); bool isEmpty() const; + bool isValid() const; std::string toString() const; std::string toShortString() const; @@ -22,8 +22,8 @@ public: bool operator<(const Version& other) const; bool operator>(const Version& other) const; + bool operator==(const Version& other) const; Version& operator+=(const int& number); - bool isValid(); private: static Version s_version;