#6535 Version URL and added stage check to version check

This commit is contained in:
Jamie Newbon 2019-08-22 14:02:40 +01:00 committed by Jnewbon
parent af08223dae
commit d376ad3feb
3 changed files with 62 additions and 19 deletions

View File

@ -24,8 +24,11 @@
#include <QProcess> #include <QProcess>
#include <QLocale> #include <QLocale>
#define VERSION_REGEX "(\\d+\\.\\d+\\.\\d+)" #define VERSION_REGEX "(\\d+\\.\\d+\\.\\d+-[a-z1-9]*)"
#define VERSION_URL "http://symless.com/version/" #define VERSION_REGEX_SECTIONED "(\\d+)\\.(\\d+)\\.(\\d+)-([a-z1-9]*)"
#define VERSION_SEGMENT_COUNT 4
#define VERSION_URL "http://version.symless.com/synergy"
VersionChecker::VersionChecker() VersionChecker::VersionChecker()
{ {
@ -58,31 +61,64 @@ void VersionChecker::replyFinished(QNetworkReply* reply)
} }
} }
int VersionChecker::getStageVersion(QString stage)
{
const int valueStable = INT_MAX; //Stable will always be considered the highest value
const int valueRC = 2;
const int valueSnapshot = 1;
const int valueOther = 0;
//Stable should always be considered highest, followed by rc[0-9] then snapshots with everything else at the end
//HACK There is probably a much better way of doing this
if (stage == "stable")
{
return valueStable;
}
else if (stage.startsWith("rc") || stage.startsWith("RC"))
{
QRegExp rx("\\d*", Qt::CaseInsensitive);
if (rx.indexIn(stage) != -1)
{
//Return the RC value plus the RC version as in int
return valueRC + rx.cap(1).toInt();
}
}
else if (stage == "snapshot")
{
return valueSnapshot;
}
return valueOther;
}
int VersionChecker::compareVersions(const QString& left, const QString& right) int VersionChecker::compareVersions(const QString& left, const QString& right)
{ {
if (left.compare(right) == 0) if (left.compare(right) == 0)
return 0; // versions are same. return 0; // versions are same.
QStringList leftSplit = left.split(QRegExp("\\.")); QStringList leftSplit = left.split(QRegExp("[\\.-]"));
if (leftSplit.size() != 3) if (leftSplit.size() != VERSION_SEGMENT_COUNT)
return 1; // assume right wins. return 1; // assume right wins.
QStringList rightSplit = right.split(QRegExp("\\.")); QStringList rightSplit = right.split(QRegExp("[\\.-]"));
if (rightSplit.size() != 3) if (rightSplit.size() != VERSION_SEGMENT_COUNT)
return -1; // assume left wins. return -1; // assume left wins.
int leftMajor = leftSplit.at(0).toInt(); const int leftMajor = leftSplit.at(0).toInt();
int leftMinor = leftSplit.at(1).toInt(); const int leftMinor = leftSplit.at(1).toInt();
int leftRev = leftSplit.at(2).toInt(); const int leftRev = leftSplit.at(2).toInt();
const int leftStage = getStageVersion(leftSplit.at(3));
int rightMajor = rightSplit.at(0).toInt(); const int rightMajor = rightSplit.at(0).toInt();
int rightMinor = rightSplit.at(1).toInt(); const int rightMinor = rightSplit.at(1).toInt();
int rightRev = rightSplit.at(2).toInt(); const int rightRev = rightSplit.at(2).toInt();
const int rightStage = getStageVersion(rightSplit.at(3));
bool rightWins = const bool rightWins =
(rightMajor > leftMajor) || ( rightMajor > leftMajor) ||
((rightMajor >= leftMajor) && (rightMinor > leftMinor)) || ((rightMajor >= leftMajor) && (rightMinor > leftMinor)) ||
((rightMajor >= leftMajor) && (rightMinor >= leftMinor) && (rightRev > leftRev)); ((rightMajor >= leftMajor) && (rightMinor >= leftMinor) && (rightRev > leftRev)) ||
((rightMajor >= leftMajor) && (rightMinor >= leftMinor) && (rightRev >= leftRev) && (rightStage > leftStage));
return rightWins ? 1 : -1; return rightWins ? 1 : -1;
} }
@ -95,7 +131,7 @@ QString VersionChecker::getVersion()
process.setReadChannel(QProcess::StandardOutput); process.setReadChannel(QProcess::StandardOutput);
if (process.waitForStarted() && process.waitForFinished()) if (process.waitForStarted() && process.waitForFinished())
{ {
QRegExp rx(VERSION_REGEX); QRegExp rx(VERSION_REGEX,Qt::CaseInsensitive);
QString text = process.readLine(); QString text = process.readLine();
if (rx.indexIn(text) != -1) if (rx.indexIn(text) != -1)
{ {

View File

@ -1,6 +1,6 @@
/* /*
* synergy -- mouse and keyboard sharing utility * synergy -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2012-2019 Symless Ltd.
* Copyright (C) 2012 Nick Bolton * Copyright (C) 2012 Nick Bolton
* *
* This package is free software; you can redistribute it and/or * This package is free software; you can redistribute it and/or
@ -41,4 +41,11 @@ signals:
private: private:
QNetworkAccessManager* m_manager; QNetworkAccessManager* m_manager;
QString m_app; QString m_app;
/**
* \brief Converts a string stage to a integer value
* \param stage The string containing the stage version
* \return An integer representation of the stage, the higher the number the more recent the version
*/
int getStageVersion(QString stage);
}; };

View File

@ -19,10 +19,10 @@
#include "common/Version.h" #include "common/Version.h"
const char* kApplication = "Synergy"; const char* kApplication = "Synergy";
const char* kCopyright = "Copyright (C) 2012-2016 Symless Ltd.\n" const char* kCopyright = "Copyright (C) 2012-2019 Symless Ltd.\n"
"Copyright (C) 2008-2014 Nick Bolton\n" "Copyright (C) 2008-2014 Nick Bolton\n"
"Copyright (C) 2002-2014 Chris Schoeneman"; "Copyright (C) 2002-2014 Chris Schoeneman";
const char* kContact = "Email: engineering@symless.com"; const char* kContact = "Email: engineering@symless.com";
const char* kWebsite = "https://symless.com/"; const char* kWebsite = "https://symless.com/";
const char* kVersion = SYNERGY_VERSION; const char* kVersion = SYNERGY_VERSION_STRING;
const char* kAppVersion = "Synergy " SYNERGY_VERSION; const char* kAppVersion = "Synergy " SYNERGY_VERSION;