diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 318fcece2..a7332cb76 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -43,20 +43,19 @@ angular.module('copayApp.controllers').controller('tabHomeController', }); } - if ($scope.isNW) { - latestReleaseService.checkLatestRelease(function(err, newRelease) { - if (err) { - $log.warn(err); - return; - } - if (newRelease) { - $scope.newRelease = true; - $scope.updateText = gettextCatalog.getString('There is a new version of {{appName}} available', { - appName: $scope.name - }); - } - }); - } + latestReleaseService.checkLatestRelease(function(err, newReleaseData) { + if (err) { + $log.warn(err); + return; + } + if (newReleaseData) { + $scope.newRelease = true; + $scope.newReleaseText = gettextCatalog.getString('There is a new version of {{appName}} available', { + appName: $scope.name + }); + $scope.newReleaseNotes = newReleaseData.releaseNotes; + } + }); }; function onEnter(event, data) { diff --git a/src/js/services/latestReleaseService.js b/src/js/services/latestReleaseService.js index 87aace87f..96614715d 100644 --- a/src/js/services/latestReleaseService.js +++ b/src/js/services/latestReleaseService.js @@ -1,16 +1,16 @@ 'use strict'; angular.module('copayApp.services') - .factory('latestReleaseService', function latestReleaseServiceFactory($log, $http, configService) { + .factory('latestReleaseService', function latestReleaseServiceFactory($log, $http, configService, platformInfo) { var root = {}; root.checkLatestRelease = function(cb) { var releaseURL = configService.getDefaults().release.url; - requestLatestRelease(releaseURL, function(err, release) { + requestLatestRelease(releaseURL, function(err, releaseData) { if (err) return cb(err); var currentVersion = window.version; - var latestVersion = release.data.tag_name; + var latestVersion = releaseData.tag_name; if (!verifyTagFormat(currentVersion)) return cb('Cannot verify the format of version tag: ' + currentVersion); @@ -20,30 +20,72 @@ angular.module('copayApp.services') var current = formatTagNumber(currentVersion); 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); + } + + 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); - 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] = ""+releaseLines[lineNum].substring(2)+""; + } 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) { - var regex = /^v?\d+\.\d+\.\d+$/i; + var regex = /^v?\d+\.\d+(\.\d+)?(-rc\d)?$/i; return regex.exec(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('.'); return { - major: +formattedNumber[0], - minor: +formattedNumber[1], - patch: +formattedNumber[2] + major: +(formattedNumber[0]?+formattedNumber[0]:0), + minor: +(formattedNumber[1]?+formattedNumber[1]:0), + 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) { - $log.debug('Retrieving latest relsease information...'); + $log.debug('Retrieving latest release information...'); var request = { url: releaseURL, @@ -53,7 +95,7 @@ angular.module('copayApp.services') $http(request).then(function(release) { $log.debug('Latest release: ' + release.data.name); - return cb(null, release); + return cb(null, release.data); }, function(err) { return cb('Cannot get the release information: ' + err); }); diff --git a/src/sass/views/tab-home.scss b/src/sass/views/tab-home.scss index 55080ab7b..4cc5ce5ed 100644 --- a/src/sass/views/tab-home.scss +++ b/src/sass/views/tab-home.scss @@ -173,6 +173,11 @@ font-weight: 700; color: #444; } + .release-notes { + white-space: pre; + white-space: pre-line; + text-align: left; + } .button { width: 100%; border: none; diff --git a/www/views/tab-home.html b/www/views/tab-home.html index 8ef922918..01182f09d 100644 --- a/www/views/tab-home.html +++ b/www/views/tab-home.html @@ -15,7 +15,9 @@ -
{{updateText}}
+
{{newReleaseText}}
+
+
Download