From 5666649a2dbb78f9b92ad39e4f39d1cafe5e0d5c Mon Sep 17 00:00:00 2001 From: Javier Date: Mon, 11 Apr 2016 12:56:18 -0300 Subject: [PATCH] new version available --- public/views/walletHome.html | 4 ++ src/css/main.css | 20 ++++++++ src/js/controllers/index.js | 14 +++++- src/js/services/configService.js | 4 ++ src/js/services/latestReleaseService.js | 63 +++++++++++++++++++++++++ 5 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 src/js/services/latestReleaseService.js diff --git a/public/views/walletHome.html b/public/views/walletHome.html index f781c6fab..7781e6865 100644 --- a/public/views/walletHome.html +++ b/public/views/walletHome.html @@ -134,6 +134,10 @@ +
+ {{newRelease}} +
+

Payment Proposals

Unsent transactions

diff --git a/src/css/main.css b/src/css/main.css index f1d0d8ee0..d0bdf0f90 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -596,6 +596,26 @@ ul.manage li { padding-top: 0 !important; } +.release { + cursor: pointer; + cursor: hand; + background-color: #E9E9EC; + margin-top: -30px; + margin-bottom: 5px; + padding-top: 30px; + padding-bottom: 20px; + text-align: center; + text-color: #444; + } + + .release span { + margin-left: 15px; + } + + .release i { + margin-right: 15px; + } + .tab-bar h1, .tab-bar h2, .tab-bar h3, .tab-bar h4, .tab-bar h5, .tab-bar h6 { line-height: 2.7rem; } diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index 16afabceb..504637d86 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, bwcService, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettext, gettextCatalog, amMoment, nodeWebkit, addonManager, isChromeApp, bwsError, txFormatService, uxLanguage, $state, glideraService, isMobile, addressbookService) { +angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, latestReleaseService, bwcService, pushNotificationsService, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettext, gettextCatalog, amMoment, nodeWebkit, addonManager, isChromeApp, bwsError, txFormatService, uxLanguage, $state, glideraService, isMobile, addressbookService) { var self = this; var SOFT_CONFIRMATION_LIMIT = 12; var errors = bwcService.getErrors(); @@ -46,6 +46,18 @@ angular.module('copayApp.controllers').controller('indexController', function($r ret.tab = 'walletHome'; var vanillaScope = ret; + if (nodeWebkit.isDefined()) { + latestReleaseService.checkLatestRelease(function(err, newRelease) { + if (err) { + $log.warn(err); + return; + } + + if (newRelease) + $scope.newRelease = gettext('There is a new version of Copay. Please update'); + }); + } + function strip(number) { return (parseFloat(number.toPrecision(12))); }; diff --git a/src/js/services/configService.js b/src/js/services/configService.js index ba19f59f5..2af73c109 100644 --- a/src/js/services/configService.js +++ b/src/js/services/configService.js @@ -42,6 +42,10 @@ angular.module('copayApp.services').factory('configService', function(storageSer url: 'https://insight.bitpay.com:443/api/rates', }, + release: { + url: 'https://api.github.com/repos/bitpay/copay/releases/latest' + }, + pushNotifications: { enabled: true, config: { diff --git a/src/js/services/latestReleaseService.js b/src/js/services/latestReleaseService.js new file mode 100644 index 000000000..be0527d51 --- /dev/null +++ b/src/js/services/latestReleaseService.js @@ -0,0 +1,63 @@ +'use strict'; +angular.module('copayApp.services') + .factory('latestReleaseService', function latestReleaseServiceFactory($log, $http, configService, gettext, nodeWebkit) { + + 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 of Copay 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; + });