Merge pull request #4979 from nextcloud/bugfix/fixVersionComparisonsOnWindows

use correct version copmparison on NSIS updater: fix update from rc
This commit is contained in:
Matthieu Gallien 2022-10-12 13:43:33 +02:00 committed by GitHub
commit 25c64b0461
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 45 deletions

View file

@ -29,12 +29,12 @@
namespace OCC {
static const char updateAvailableC[] = "Updater/updateAvailable";
static const char updateTargetVersionC[] = "Updater/updateTargetVersion";
static const char updateTargetVersionStringC[] = "Updater/updateTargetVersionString";
static const char seenVersionC[] = "Updater/seenVersion";
static const char autoUpdateAttemptedC[] = "Updater/autoUpdateAttempted";
namespace {
const auto updateAvailableC = QStringLiteral("Updater/updateAvailable");
const auto updateTargetVersionC = QStringLiteral("Updater/updateTargetVersion");
const auto updateTargetVersionStringC = QStringLiteral("Updater/updateTargetVersionString");
const auto autoUpdateAttemptedC = QStringLiteral("Updater/autoUpdateAttempted");
}
UpdaterScheduler::UpdaterScheduler(QObject *parent)
: QObject(parent)
@ -259,6 +259,7 @@ bool OCUpdater::updateSucceeded() const
void OCUpdater::slotVersionInfoArrived()
{
qCDebug(lcUpdater) << "received a reply";
_timeoutWatchdog->stop();
auto *reply = qobject_cast<QNetworkReply *>(sender());
reply->deleteLater();
@ -347,12 +348,9 @@ void NSISUpdater::versionInfoArrived(const UpdateInfo &info)
ConfigFile cfg;
QSettings settings(cfg.configFile(), QSettings::IniFormat);
qint64 infoVersion = Helper::stringVersionToInt(info.version());
auto seenString = settings.value(seenVersionC).toString();
qint64 seenVersion = Helper::stringVersionToInt(seenString);
qint64 currVersion = Helper::currentVersionToInt();
qCInfo(lcUpdater) << "Version info arrived:"
<< "Your version:" << currVersion
<< "Skipped version:" << seenVersion << seenString
<< "Available version:" << infoVersion << info.version()
<< "Available version string:" << info.versionString()
<< "Web url:" << info.web()
@ -361,28 +359,32 @@ void NSISUpdater::versionInfoArrived(const UpdateInfo &info)
{
qCInfo(lcUpdater) << "No version information available at the moment";
setDownloadState(UpToDate);
} else if (infoVersion <= currVersion
|| infoVersion <= seenVersion) {
qCInfo(lcUpdater) << "Client is on latest version!";
setDownloadState(UpToDate);
} else {
QString url = info.downloadUrl();
if (url.isEmpty()) {
showNoUrlDialog(info);
const auto currentVer = Helper::currentVersionToInt();
const auto remoteVer = Helper::stringVersionToInt(info.version());
if (info.version().isEmpty() || currentVer >= remoteVer) {
qCInfo(lcUpdater) << "Client is on latest version!";
setDownloadState(UpToDate);
} else {
_targetFile = cfg.configPath() + url.mid(url.lastIndexOf('/')+1);
if (QFile(_targetFile).exists()) {
setDownloadState(DownloadComplete);
const auto url = info.downloadUrl();
if (url.isEmpty()) {
showNoUrlDialog(info);
} else {
auto request = QNetworkRequest(QUrl(url));
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
QNetworkReply *reply = qnam()->get(request);
connect(reply, &QIODevice::readyRead, this, &NSISUpdater::slotWriteFile);
connect(reply, &QNetworkReply::finished, this, &NSISUpdater::slotDownloadFinished);
setDownloadState(Downloading);
_file.reset(new QTemporaryFile);
_file->setAutoRemove(true);
_file->open();
_targetFile = cfg.configPath() + url.mid(url.lastIndexOf('/')+1);
if (QFile(_targetFile).exists()) {
setDownloadState(DownloadComplete);
} else {
auto request = QNetworkRequest(QUrl(url));
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
QNetworkReply *reply = qnam()->get(request);
connect(reply, &QIODevice::readyRead, this, &NSISUpdater::slotWriteFile);
connect(reply, &QNetworkReply::finished, this, &NSISUpdater::slotDownloadFinished);
setDownloadState(Downloading);
_file.reset(new QTemporaryFile);
_file->setAutoRemove(true);
_file->open();
}
}
}
}
@ -423,15 +425,12 @@ void NSISUpdater::showNoUrlDialog(const UpdateInfo &info)
hlayout->addWidget(lbl);
auto *bb = new QDialogButtonBox;
QPushButton *skip = bb->addButton(tr("Skip this version"), QDialogButtonBox::ResetRole);
QPushButton *reject = bb->addButton(tr("Skip this time"), QDialogButtonBox::AcceptRole);
QPushButton *getupdate = bb->addButton(tr("Get update"), QDialogButtonBox::AcceptRole);
connect(skip, &QAbstractButton::clicked, msgBox, &QDialog::reject);
connect(reject, &QAbstractButton::clicked, msgBox, &QDialog::reject);
connect(getupdate, &QAbstractButton::clicked, msgBox, &QDialog::accept);
connect(skip, &QAbstractButton::clicked, this, &NSISUpdater::slotSetSeenVersion);
connect(getupdate, &QAbstractButton::clicked, this, &NSISUpdater::slotOpenUpdateUrl);
layout->addWidget(bb);
@ -473,20 +472,14 @@ void NSISUpdater::showUpdateErrorDialog(const QString &targetVersion)
hlayout->addWidget(lbl);
auto bb = new QDialogButtonBox;
auto skip = bb->addButton(tr("Skip this version"), QDialogButtonBox::ResetRole);
auto askagain = bb->addButton(tr("Ask again later"), QDialogButtonBox::ResetRole);
auto retry = bb->addButton(tr("Restart and update"), QDialogButtonBox::AcceptRole);
auto getupdate = bb->addButton(tr("Update manually"), QDialogButtonBox::AcceptRole);
connect(skip, &QAbstractButton::clicked, msgBox, &QDialog::reject);
connect(askagain, &QAbstractButton::clicked, msgBox, &QDialog::reject);
connect(retry, &QAbstractButton::clicked, msgBox, &QDialog::accept);
connect(getupdate, &QAbstractButton::clicked, msgBox, &QDialog::accept);
connect(skip, &QAbstractButton::clicked, this, [this]() {
wipeUpdateData();
slotSetSeenVersion();
});
// askagain: do nothing
connect(retry, &QAbstractButton::clicked, this, [this]() {
slotStartInstaller();
@ -531,13 +524,6 @@ bool NSISUpdater::handleStartup()
return false;
}
void NSISUpdater::slotSetSeenVersion()
{
ConfigFile cfg;
QSettings settings(cfg.configFile(), QSettings::IniFormat);
settings.setValue(seenVersionC, updateInfo().version());
}
////////////////////////////////////////////////////////////////////////
PassiveUpdateNotifier::PassiveUpdateNotifier(const QUrl &url)
@ -573,6 +559,7 @@ void PassiveUpdateNotifier::versionInfoArrived(const UpdateInfo &info)
qCInfo(lcUpdater) << "Client is on latest version!";
setDownloadState(UpToDate);
} else {
qCInfo(lcUpdater) << "Client is on older version. We will update!";
setDownloadState(UpdateOnlyAvailableThroughSystem);
}
}

View file

@ -156,7 +156,6 @@ public:
explicit NSISUpdater(const QUrl &url);
bool handleStartup() override;
private slots:
void slotSetSeenVersion();
void slotDownloadFinished();
void slotWriteFile();