logic: Moved update check setting to preferences and enable automatic update check by default

This commit is contained in:
Eberhard Graether
2017-10-11 13:39:00 +02:00
parent cf984ca245
commit 85ab7d1e96
12 changed files with 198 additions and 54 deletions
+2 -2
View File
@@ -53,9 +53,9 @@
text-decoration: underline;
}
#updateCheckbox {
#updateButton:disabled {
color: black;
font-size: 12px;
text-decoration: none;
}
#licenseHeaderLabel {
@@ -86,6 +86,7 @@
<automatic><!-- BOOL: whether to check automatically for new software updates --></automatic>
<time_stamp><!-- TIME: time of the last update check --></time_stamp>
<skip_version><!-- VERSION: version to skip for update --></skip_version>
<url><!-- STRING: url to new version download --></url>
</update_check>
</user>
+11 -1
View File
@@ -419,7 +419,7 @@ void ApplicationSettings::setUserToken(std::string token)
bool ApplicationSettings::getAutomaticUpdateCheck() const
{
return getValue<bool>("user/update_check/automatic", false);
return getValue<bool>("user/update_check/automatic", true);
}
void ApplicationSettings::setAutomaticUpdateCheck(bool automaticUpdates)
@@ -450,6 +450,16 @@ void ApplicationSettings::setSkipUpdateForVersion(const Version& version)
}
}
std::string ApplicationSettings::getUpdateDownloadUrl() const
{
return getValue<std::string>("user/update_check/url", "");
}
void ApplicationSettings::setUpdateDownloadUrl(const std::string& url)
{
setValue<std::string>("user/update_check/url", url);
}
int ApplicationSettings::getPluginPort() const
{
return getValue<int>("network/plugin_port", 6666);
+3
View File
@@ -132,6 +132,9 @@ public:
Version getSkipUpdateForVersion() const;
void setSkipUpdateForVersion(const Version& version);
std::string getUpdateDownloadUrl() const;
void setUpdateDownloadUrl(const std::string& url);
// network
int getPluginPort() const;
void setPluginPort(const int pluginPort);
+2
View File
@@ -62,6 +62,8 @@ add_files(
qt/element/QtTooltip.h
qt/element/QtUndoRedo.cpp
qt/element/QtUndoRedo.h
qt/element/QtUpdateCheckerWidget.cpp
qt/element/QtUpdateCheckerWidget.h
qt/graphics/QtCountCircleItem.cpp
qt/graphics/QtCountCircleItem.h
@@ -0,0 +1,94 @@
#include "qt/element/QtUpdateCheckerWidget.h"
#include <QDesktopServices>
#include <QHBoxLayout>
#include <QPushButton>
#include <QUrl>
#include "qt/network/QtUpdateChecker.h"
#include "settings/ApplicationSettings.h"
#include "utility/TimeStamp.h"
QtUpdateCheckerWidget::QtUpdateCheckerWidget(QWidget* parent)
: QWidget(parent)
{
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
QHBoxLayout* layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
m_button = new QPushButton("check for new version");
m_button->setObjectName("updateButton");
m_button->setCursor(Qt::PointingHandCursor);
layout->addWidget(m_button);
if (appSettings->getAutomaticUpdateCheck())
{
if (QtUpdateChecker::needsAutomaticCheck())
{
checkUpdate(false);
}
else
{
QString url = QString::fromStdString(appSettings->getUpdateDownloadUrl());
if (!url.isEmpty())
{
setDownloadUrl(url);
}
else
{
m_button->setText("up-to-date");
m_button->setEnabled(false);
}
}
}
else
{
connect(m_button, &QPushButton::clicked, [this](){ checkUpdate(true); });
}
}
void QtUpdateCheckerWidget::checkUpdate(bool force)
{
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
appSettings->setUpdateDownloadUrl("");
appSettings->save();
m_button->setText("checking for update...");
m_button->setEnabled(false);
QtUpdateChecker::check(force,
[this, appSettings](QtUpdateChecker::Result result)
{
if (!result.success)
{
m_button->setText("update check failed");
}
else if (result.url.isEmpty())
{
m_button->setText("up-to-date");
}
else
{
setDownloadUrl(result.url);
appSettings->setUpdateDownloadUrl(result.url.toStdString());
appSettings->save();
}
}
);
}
void QtUpdateCheckerWidget::setDownloadUrl(QString url)
{
m_button->setText("new version available");
m_button->disconnect();
connect(m_button, &QPushButton::clicked, this,
[url]()
{
QDesktopServices::openUrl(QUrl(url, QUrl::TolerantMode));
}
);
m_button->setEnabled(true);
}
@@ -0,0 +1,21 @@
#ifndef QT_UPDATE_CHECKER_WIDGET_H
#define QT_UPDATE_CHECKER_WIDGET_H
#include <QWidget>
class QPushButton;
class QtUpdateCheckerWidget
: public QWidget
{
public:
QtUpdateCheckerWidget(QWidget* parent = nullptr);
private:
void checkUpdate(bool force);
void setDownloadUrl(QString url);
QPushButton* m_button;
};
#endif // QT_UPDATE_CHECKER_WIDGET_H
+26 -9
View File
@@ -14,15 +14,23 @@
#include "utility/utilityApp.h"
#include "utility/utilityUuid.h"
void QtUpdateChecker::check(bool force)
bool QtUpdateChecker::needsAutomaticCheck()
{
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
return TimeStamp::now().deltaHours(appSettings->getLastUpdateCheck()) >= 24;
}
if (!force && TimeStamp::now().deltaHours(appSettings->getLastUpdateCheck()) < 24)
void QtUpdateChecker::check(bool force, std::function<void(Result)> callback)
{
Result result;
if (!force && !needsAutomaticCheck())
{
callback(result);
return;
}
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
appSettings->setLastUpdateCheck(TimeStamp::now());
appSettings->save();
@@ -43,6 +51,7 @@ void QtUpdateChecker::check(bool force)
osString = "linux";
break;
default:
callback(result);
return;
}
@@ -90,8 +99,10 @@ void QtUpdateChecker::check(bool force)
// send request
QtRequest* request = new QtRequest();
QObject::connect(request, &QtRequest::receivedData,
[force, request](QByteArray bytes)
[force, callback, request](QByteArray bytes)
{
Result result;
do
{
QJsonDocument doc = QJsonDocument::fromJson(bytes);
@@ -111,14 +122,18 @@ void QtUpdateChecker::check(bool force)
break;
}
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
if (!force && appSettings->getSkipUpdateForVersion() == updateVersion)
{
break;
}
result.success = true;
if (updateVersion > Version::getApplicationVersion())
{
result.url = url;
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
if (!force && appSettings->getSkipUpdateForVersion() == updateVersion)
{
break;
}
QMessageBox msgBox;
msgBox.setText("Update Check");
msgBox.setInformativeText(
@@ -154,6 +169,8 @@ void QtUpdateChecker::check(bool force)
while (false);
request->deleteLater();
callback(result);
}
);
@@ -165,7 +182,7 @@ void QtUpdateChecker::checkUpdate()
m_onQtThread(
[this]()
{
check();
check(false, [](Result){});
}
);
}
+8 -1
View File
@@ -8,7 +8,14 @@ class QtUpdateChecker
: public UpdateChecker
{
public:
static void check(bool force = false);
struct Result
{
bool success = false;
QString url;
};
static bool needsAutomaticCheck();
static void check(bool force, std::function<void(Result)> callback);
virtual void checkUpdate() override;
+3 -28
View File
@@ -14,7 +14,7 @@
#include "License.h"
#include "PublicKey.h"
#include "qt/network/QtUpdateChecker.h"
#include "qt/element/QtUpdateCheckerWidget.h"
#include "qt/utility/utilityQt.h"
#include "settings/ApplicationSettings.h"
#include "settings/ProjectSettings.h"
@@ -163,33 +163,8 @@ void QtStartScreen::setupStartScreen()
versionLabel->setObjectName("versionLabel");
col->addWidget(versionLabel);
QPushButton* updateButton = new QPushButton("check for new version", this);
updateButton->setObjectName("updateButton");
updateButton->setCursor(Qt::PointingHandCursor);
connect(updateButton, &QPushButton::clicked,
[]()
{
QtUpdateChecker::check(true);
}
);
col->addWidget(updateButton);
QCheckBox* updateCheckbox = new QCheckBox("automatic update check");
updateCheckbox->setObjectName("updateCheckbox");
updateCheckbox->setChecked(ApplicationSettings::getInstance()->getAutomaticUpdateCheck());
connect(updateCheckbox, &QCheckBox::stateChanged,
[updateCheckbox]()
{
ApplicationSettings::getInstance()->setAutomaticUpdateCheck(updateCheckbox->isChecked());
ApplicationSettings::getInstance()->save();
if (updateCheckbox->isChecked())
{
QtUpdateChecker::check();
}
}
);
col->addWidget(updateCheckbox);
QtUpdateCheckerWidget* checker = new QtUpdateCheckerWidget(this);
col->addWidget(checker);
if (!licenseValid)
{
@@ -91,13 +91,33 @@ void QtProjectWizzardContentPreferences::populate(QGridLayout* layout, int& row)
QString modifierName =utility::getOsType() == OS_MAC ? "Cmd" : "Ctrl";
m_graphZooming = addCheckBox(
"Graph Zoom",
"Zoom on mouse wheel",
"Zoom graph on mouse wheel",
"<p>Enable graph zoom using mouse wheel only, instead of using " + modifierName + " + Mouse Wheel.</p>",
layout, row
);
addGap(layout, row);
// Network
addTitle("NETWORK", layout, row);
// Update check
m_automaticUpdateCheck = addCheckBox("Automatic<br />Update Check", "Check automatically for updates",
"<p>Check automatically for a new releases once a day.</p>", layout, row);
addGap(layout, row);
// Plugins
addTitle("PLUGIN", layout, row);
// Sourcetrail port
m_sourcetrailPort = addLineEdit("Sourcetrail Port",
"<p>Port number that Sourcetrail uses to listen for incoming messages from plugins.</p>", layout, row);
// Sourcetrail port
m_pluginPort = addLineEdit("Plugin Port", "<p>Port number that Sourcetrail uses to sends outgoing messages to plugins.</p>", layout, row);
addGap(layout, row);
// indexing
addTitle("INDEXING", layout, row);
@@ -140,18 +160,6 @@ void QtProjectWizzardContentPreferences::populate(QGridLayout* layout, int& row)
addGap(layout, row);
// Plugins
addTitle("PLUGIN", layout, row);
// Sourcetrail port
m_sourcetrailPort = addLineEdit("Sourcetrail Port",
"<p>Port number that Sourcetrail uses to listen for incoming messages from plugins.</p>", layout, row);
// Sourcetrail port
m_pluginPort = addLineEdit("Plugin Port", "<p>Port number that Sourcetrail uses to sends outgoing messages to plugins.</p>", layout, row);
addGap(layout, row);
// Java
addTitle("JAVA", layout, row);
@@ -301,6 +309,8 @@ void QtProjectWizzardContentPreferences::load()
m_scrollSpeed->setText(QString::number(appSettings->getScrollSpeed(), 'f', 1));
m_graphZooming->setChecked(appSettings->getControlsGraphZoomOnMouseWheel());
m_automaticUpdateCheck->setChecked(appSettings->getAutomaticUpdateCheck());
m_sourcetrailPort->setText(QString::number(appSettings->getSourcetrailPort()));
m_pluginPort->setText(QString::number(appSettings->getPluginPort()));
@@ -345,6 +355,8 @@ void QtProjectWizzardContentPreferences::save()
appSettings->setControlsGraphZoomOnMouseWheel(m_graphZooming->isChecked());
appSettings->setAutomaticUpdateCheck(m_automaticUpdateCheck->isChecked());
int sourcetrailPort = m_sourcetrailPort->text().toInt();
if (sourcetrailPort) appSettings->setSourcetrailPort(sourcetrailPort);
@@ -66,6 +66,8 @@ private:
QLineEdit* m_scrollSpeed;
QCheckBox* m_graphZooming;
QCheckBox* m_automaticUpdateCheck;
QLineEdit* m_sourcetrailPort;
QLineEdit* m_pluginPort;