Update notifications now able to parse "rc"'s and also show release notes from GitHub.
This commit is contained in:
parent
4deeb80a14
commit
2c2c21bcdf
4 changed files with 74 additions and 26 deletions
|
|
@ -43,20 +43,19 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($scope.isNW) {
|
latestReleaseService.checkLatestRelease(function(err, newReleaseData) {
|
||||||
latestReleaseService.checkLatestRelease(function(err, newRelease) {
|
if (err) {
|
||||||
if (err) {
|
$log.warn(err);
|
||||||
$log.warn(err);
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if (newReleaseData) {
|
||||||
if (newRelease) {
|
$scope.newRelease = true;
|
||||||
$scope.newRelease = true;
|
$scope.newReleaseText = gettextCatalog.getString('There is a new version of {{appName}} available', {
|
||||||
$scope.updateText = gettextCatalog.getString('There is a new version of {{appName}} available', {
|
appName: $scope.name
|
||||||
appName: $scope.name
|
});
|
||||||
});
|
$scope.newReleaseNotes = newReleaseData.releaseNotes;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function onEnter(event, data) {
|
function onEnter(event, data) {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
angular.module('copayApp.services')
|
angular.module('copayApp.services')
|
||||||
.factory('latestReleaseService', function latestReleaseServiceFactory($log, $http, configService) {
|
.factory('latestReleaseService', function latestReleaseServiceFactory($log, $http, configService, platformInfo) {
|
||||||
|
|
||||||
var root = {};
|
var root = {};
|
||||||
|
|
||||||
root.checkLatestRelease = function(cb) {
|
root.checkLatestRelease = function(cb) {
|
||||||
var releaseURL = configService.getDefaults().release.url;
|
var releaseURL = configService.getDefaults().release.url;
|
||||||
|
|
||||||
requestLatestRelease(releaseURL, function(err, release) {
|
requestLatestRelease(releaseURL, function(err, releaseData) {
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
var currentVersion = window.version;
|
var currentVersion = window.version;
|
||||||
var latestVersion = release.data.tag_name;
|
var latestVersion = releaseData.tag_name;
|
||||||
|
|
||||||
if (!verifyTagFormat(currentVersion))
|
if (!verifyTagFormat(currentVersion))
|
||||||
return cb('Cannot verify the format of version tag: ' + currentVersion);
|
return cb('Cannot verify the format of version tag: ' + currentVersion);
|
||||||
|
|
@ -20,30 +20,72 @@ angular.module('copayApp.services')
|
||||||
var current = formatTagNumber(currentVersion);
|
var current = formatTagNumber(currentVersion);
|
||||||
var latest = formatTagNumber(latestVersion);
|
var latest = formatTagNumber(latestVersion);
|
||||||
|
|
||||||
if (latest.major < current.major || (latest.major == current.major && latest.minor <= current.minor))
|
if (latest.major < current.major || (latest.major === current.major && latest.minor <= current.minor)) {
|
||||||
return cb(null, false);
|
return cb(null, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
var releaseSearchTerm = "";
|
||||||
|
if (platformInfo.isNW) { // XX SP: DESKTOP: Check if the latest release is already available for current OS
|
||||||
|
var platform = process.platform;
|
||||||
|
if (platform === "darwin") {
|
||||||
|
releaseSearchTerm = "osx";
|
||||||
|
} else if (platform === "win32") {
|
||||||
|
releaseSearchTerm = "win";
|
||||||
|
} else if (platform === "linux") {
|
||||||
|
releaseSearchTerm = "linux";
|
||||||
|
}
|
||||||
|
var foundNewVersion = false;
|
||||||
|
for (var i in releaseData.assets) {
|
||||||
|
if (releaseData.assets[i].name.indexOf(releaseSearchTerm) !== -1) {
|
||||||
|
foundNewVersion = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$log.debug('A new version is available: ' + latestVersion);
|
$log.debug('A new version is available: ' + latestVersion);
|
||||||
return cb(null, true);
|
|
||||||
|
//
|
||||||
|
var releaseNotes = false;
|
||||||
|
if (releaseData.body) {
|
||||||
|
var releaseLines = releaseData.body.split('\n');
|
||||||
|
for (var lineNum in releaseLines) {
|
||||||
|
if (releaseLines[lineNum].substring(0, 2) === "# ") {
|
||||||
|
releaseLines[lineNum] = "<strong>"+releaseLines[lineNum].substring(2)+"</strong>";
|
||||||
|
} else if (releaseLines[lineNum].substring(0, 2) === "- ") {
|
||||||
|
releaseLines[lineNum] = "• "+releaseLines[lineNum].substring(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
releaseNotes = releaseLines.join('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
return cb(null, {latestVersion: latestVersion, releaseNotes: releaseNotes});
|
||||||
});
|
});
|
||||||
|
|
||||||
function verifyTagFormat(tag) {
|
function verifyTagFormat(tag) {
|
||||||
var regex = /^v?\d+\.\d+\.\d+$/i;
|
var regex = /^v?\d+\.\d+(\.\d+)?(-rc\d)?$/i;
|
||||||
return regex.exec(tag);
|
return regex.exec(tag);
|
||||||
};
|
};
|
||||||
|
|
||||||
function formatTagNumber(tag) {
|
function formatTagNumber(tag) {
|
||||||
|
var label = false;
|
||||||
|
if (tag.split("-")[1]) { // Move postfixes like "-rc2" to a variable
|
||||||
|
label = tag.split("-")[1];
|
||||||
|
tag = tag.split("-")[0];
|
||||||
|
}
|
||||||
|
|
||||||
var formattedNumber = tag.replace(/^v/i, '').split('.');
|
var formattedNumber = tag.replace(/^v/i, '').split('.');
|
||||||
return {
|
return {
|
||||||
major: +formattedNumber[0],
|
major: +(formattedNumber[0]?+formattedNumber[0]:0),
|
||||||
minor: +formattedNumber[1],
|
minor: +(formattedNumber[1]?+formattedNumber[1]:0),
|
||||||
patch: +formattedNumber[2]
|
patch: +(formattedNumber[2]?+formattedNumber[2]:0),
|
||||||
|
label: label /* XX SP: we can use this in a later stage (with for example 1.0.0-rc2 the value will be "rc2" and false if there is no label) */
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function requestLatestRelease(releaseURL, cb) {
|
function requestLatestRelease(releaseURL, cb) {
|
||||||
$log.debug('Retrieving latest relsease information...');
|
$log.debug('Retrieving latest release information...');
|
||||||
|
|
||||||
var request = {
|
var request = {
|
||||||
url: releaseURL,
|
url: releaseURL,
|
||||||
|
|
@ -53,7 +95,7 @@ angular.module('copayApp.services')
|
||||||
|
|
||||||
$http(request).then(function(release) {
|
$http(request).then(function(release) {
|
||||||
$log.debug('Latest release: ' + release.data.name);
|
$log.debug('Latest release: ' + release.data.name);
|
||||||
return cb(null, release);
|
return cb(null, release.data);
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
return cb('Cannot get the release information: ' + err);
|
return cb('Cannot get the release information: ' + err);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,11 @@
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
color: #444;
|
color: #444;
|
||||||
}
|
}
|
||||||
|
.release-notes {
|
||||||
|
white-space: pre;
|
||||||
|
white-space: pre-line;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
.button {
|
.button {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: none;
|
border: none;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,9 @@
|
||||||
<img src="img/icon-update.svg" class="bg"/>
|
<img src="img/icon-update.svg" class="bg"/>
|
||||||
</i>
|
</i>
|
||||||
|
|
||||||
<div class="item title">{{updateText}}</div>
|
<div class="item title">{{newReleaseText}}</div>
|
||||||
|
<div class="item release-notes" ng-if="newReleaseNotes"><span ng-bind-html="newReleaseNotes"></span></div>
|
||||||
|
|
||||||
|
|
||||||
<div class="button" ng-click="openExternalLink()">
|
<div class="button" ng-click="openExternalLink()">
|
||||||
<span translate>Download</span>
|
<span translate>Download</span>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue