mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-06 21:33:54 +02:00
handle semantic version updates in sandbox
This commit is contained in:
parent
9506e7edbe
commit
8dd268addb
3 changed files with 94 additions and 35 deletions
|
@ -1,5 +1,7 @@
|
|||
{
|
||||
"releaseType": "@RELEASE_TYPE@",
|
||||
"buildNumber": "@BUILD_NUMBER@",
|
||||
"stableBuild": "@STABLE_BUILD@",
|
||||
"buildIdentifier": "@BUILD_VERSION@",
|
||||
"organization": "@BUILD_ORGANIZATION@"
|
||||
"organization": "@BUILD_ORGANIZATION@"
|
||||
}
|
||||
|
|
|
@ -60,7 +60,14 @@ function getBuildInfo() {
|
|||
}
|
||||
}
|
||||
|
||||
const DEFAULT_BUILD_INFO = { releaseType: "", buildIdentifier: "dev" };
|
||||
const DEFAULT_BUILD_INFO = {
|
||||
releaseType: "",
|
||||
buildIdentifier: "dev",
|
||||
buildNumber: "0",
|
||||
stableBuild: "0",
|
||||
organization: "High Fidelity - dev"
|
||||
};
|
||||
|
||||
var buildInfo = DEFAULT_BUILD_INFO;
|
||||
|
||||
if (buildInfoPath) {
|
||||
|
@ -858,33 +865,25 @@ function onContentLoaded() {
|
|||
// maybeShowSplash();
|
||||
|
||||
if (buildInfo.releaseType == 'PRODUCTION' && !argv.noUpdater) {
|
||||
var currentVersion = null;
|
||||
try {
|
||||
currentVersion = parseInt(buildInfo.buildIdentifier);
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
if (currentVersion !== null) {
|
||||
const CHECK_FOR_UPDATES_INTERVAL_SECONDS = 60 * 30;
|
||||
var hasShownUpdateNotification = false;
|
||||
const updateChecker = new updater.UpdateChecker(currentVersion, CHECK_FOR_UPDATES_INTERVAL_SECONDS);
|
||||
updateChecker.on('update-available', function(latestVersion, url) {
|
||||
if (!hasShownUpdateNotification) {
|
||||
notifier.notify({
|
||||
icon: notificationIcon,
|
||||
title: 'An update is available!',
|
||||
message: 'High Fidelity version ' + latestVersion + ' is available',
|
||||
wait: true,
|
||||
url: url
|
||||
});
|
||||
hasShownUpdateNotification = true;
|
||||
}
|
||||
});
|
||||
notifier.on('click', function(notifierObject, options) {
|
||||
log.debug("Got click", options.url);
|
||||
shell.openExternal(options.url);
|
||||
});
|
||||
}
|
||||
const CHECK_FOR_UPDATES_INTERVAL_SECONDS = 60 * 30;
|
||||
var hasShownUpdateNotification = false;
|
||||
const updateChecker = new updater.UpdateChecker(buildInfo, CHECK_FOR_UPDATES_INTERVAL_SECONDS);
|
||||
updateChecker.on('update-available', function(latestVersion, url) {
|
||||
if (!hasShownUpdateNotification) {
|
||||
notifier.notify({
|
||||
icon: notificationIcon,
|
||||
title: 'An update is available!',
|
||||
message: 'High Fidelity version ' + latestVersion + ' is available',
|
||||
wait: true,
|
||||
url: url
|
||||
});
|
||||
hasShownUpdateNotification = true;
|
||||
}
|
||||
});
|
||||
notifier.on('click', function(notifierObject, options) {
|
||||
log.debug("Got click", options.url);
|
||||
shell.openExternal(options.url);
|
||||
});
|
||||
}
|
||||
|
||||
deleteOldFiles(logPath, DELETE_LOG_FILES_OLDER_THAN_X_SECONDS, LOG_FILE_REGEX);
|
||||
|
|
|
@ -8,10 +8,48 @@ const os = require('os');
|
|||
const platform = os.type() == 'Windows_NT' ? 'windows' : 'mac';
|
||||
|
||||
const BUILDS_URL = 'https://highfidelity.com/builds.xml';
|
||||
const DEV_BUILDS_URL = 'https://highfidelity.com/dev-builds.xml';
|
||||
|
||||
function UpdateChecker(currentVersion, checkForUpdatesEveryXSeconds) {
|
||||
this.currentVersion = currentVersion;
|
||||
log.debug('cur', currentVersion);
|
||||
// returns 1 if A is greater, 0 if equal, -1 if A is lesser
|
||||
function semanticVersionCompare(versionA, versionB) {
|
||||
var versionAParts = versionA.split('.');
|
||||
var versionBParts = versionB.split('.');
|
||||
|
||||
// make sure each version has 3 parts
|
||||
var partsLength = versionAParts.length;
|
||||
while (partsLength < 3) {
|
||||
partsLength = versionAParts.push(0);
|
||||
}
|
||||
|
||||
partsLength = versionBParts.length;
|
||||
while (partsLength < 3) {
|
||||
partsLength = versionBParts.push(0);
|
||||
}
|
||||
|
||||
// map all of the parts to numbers
|
||||
versionAParts = versionAParts.map(Number);
|
||||
versionBParts = versionBParts.map(Number);
|
||||
|
||||
for (var i = 0; i < 3; ++i) {
|
||||
if (versionAParts[i] == versionBParts[i]) {
|
||||
continue;
|
||||
} else if (versionAParts[i] > versionBParts[i]) {
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
function UpdateChecker(buildInfo, checkForUpdatesEveryXSeconds) {
|
||||
this.stableBuild = (buildInfo.stableBuild == "1");
|
||||
|
||||
this.buildsURL = this.stableBuild ? BUILDS_URL : DEV_BUILDS_URL;
|
||||
this.currentVersion = this.stableBuild ? buildInfo.buildIdentifier : parseInt(buildInfo.buildNumber);
|
||||
|
||||
log.debug('Current version is', this.currentVersion);
|
||||
|
||||
setInterval(this.checkForUpdates.bind(this), checkForUpdatesEveryXSeconds * 1000);
|
||||
this.checkForUpdates();
|
||||
|
@ -29,12 +67,32 @@ UpdateChecker.prototype = extend(UpdateChecker.prototype, {
|
|||
try {
|
||||
var $ = cheerio.load(body, { xmlMode: true });
|
||||
const latestBuild = $('project[name="interface"] platform[name="' + platform + '"]').children().first();
|
||||
const latestVersion = parseInt(latestBuild.find('version').text());
|
||||
log.debug("Latest version is:", latestVersion, this.currentVersion);
|
||||
if (latestVersion > this.currentVersion) {
|
||||
|
||||
var latestVersion = 0;
|
||||
|
||||
if (this.stableBuild) {
|
||||
latestVersion = latestBuild.find('stable_version').text();
|
||||
} else {
|
||||
latestVersion = parseInt(latestBuild.find('version').text());
|
||||
}
|
||||
|
||||
log.debug("Latest available update version is:", latestVersion);
|
||||
|
||||
updateAvailable = false;
|
||||
|
||||
if (this.stableBuild) {
|
||||
// compare the semantic versions to see if the update is newer
|
||||
updateAvailable = (semanticVersionCompare(latestVersion, this.currentVersion) == 1);
|
||||
} else {
|
||||
// for master builds we just compare the versions as integers
|
||||
updateAvailable = latestVersion > this.currentVersion;
|
||||
}
|
||||
|
||||
if (updateAvailable) {
|
||||
const url = latestBuild.find('url').text();
|
||||
this.emit('update-available', latestVersion, url);
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
log.warn("Error when checking for updates", e);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue