63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
'use strict';
|
|
angular.module('copayApp.services')
|
|
.factory('latestReleaseService', function latestReleaseServiceFactory($log, $http, configService) {
|
|
|
|
var root = {};
|
|
|
|
root.checkLatestRelease = function(cb) {
|
|
var releaseURL = configService.getDefaults().release.url;
|
|
|
|
requestLatestRelease(releaseURL, function(err, release) {
|
|
if (err) return cb(err);
|
|
var currentVersion = window.version;
|
|
var latestVersion = release.data.tag_name;
|
|
|
|
if (!verifyTagFormat(currentVersion))
|
|
return cb('Cannot verify the format of version tag: ' + currentVersion);
|
|
if (!verifyTagFormat(latestVersion))
|
|
return cb('Cannot verify the format of latest release tag: ' + latestVersion);
|
|
|
|
var current = formatTagNumber(currentVersion);
|
|
var latest = formatTagNumber(latestVersion);
|
|
|
|
if (latest.major < current.major || (latest.major == current.major && latest.minor <= current.minor))
|
|
return cb(null, false);
|
|
|
|
$log.debug('A new version is available: ' + latestVersion);
|
|
return cb(null, true);
|
|
});
|
|
|
|
function verifyTagFormat(tag) {
|
|
var regex = /^v?\d+\.\d+\.\d+$/i;
|
|
return regex.exec(tag);
|
|
};
|
|
|
|
function formatTagNumber(tag) {
|
|
var formattedNumber = tag.replace(/^v/i, '').split('.');
|
|
return {
|
|
major: +formattedNumber[0],
|
|
minor: +formattedNumber[1],
|
|
patch: +formattedNumber[2]
|
|
};
|
|
};
|
|
};
|
|
|
|
function requestLatestRelease(releaseURL, cb) {
|
|
$log.debug('Retrieving latest relsease information...');
|
|
|
|
var request = {
|
|
url: releaseURL,
|
|
method: 'GET',
|
|
json: true
|
|
};
|
|
|
|
$http(request).then(function(release) {
|
|
$log.debug('Latest release: ' + release.data.name);
|
|
return cb(null, release);
|
|
}, function(err) {
|
|
return cb('Cannot get the release information: ' + err);
|
|
});
|
|
};
|
|
|
|
return root;
|
|
});
|