diff --git a/app/partials/upgradeV4.pug b/app/partials/upgradeV4.pug new file mode 100644 index 0000000000..911f26115b --- /dev/null +++ b/app/partials/upgradeV4.pug @@ -0,0 +1,9 @@ +.alert-in-app + uib-alert(type="danger", close="insist = false", ng-show="insist") + span(translate="NEED_SECOND_PASSWORD_FOR_UPGRADE") +.modal-header.flex-center.upgrade-header(data-preflight-tag="Upgrade") + h3(translate="Upgrade to V4") +.modal-body + span(translate="Upgrade for segwitP2SH support 🏄‍") +.modal-footer.pal.flex-end + button.button-primary(ui-ladda="busy", ng-click="upgradeV4()" ng-disabled="waiting", ladda-translate="CONTINUE", data-style="expand-left") diff --git a/assets/js/controllers/upgradeV4.controller.js b/assets/js/controllers/upgradeV4.controller.js new file mode 100644 index 0000000000..7fa4196dbd --- /dev/null +++ b/assets/js/controllers/upgradeV4.controller.js @@ -0,0 +1,26 @@ +angular + .module('walletApp') + .controller('UpgradeCtrlV4', UpgradeCtrlV4); + +function UpgradeCtrlV4 ($scope, Wallet, $uibModalInstance, $log, $window, $translate, $timeout, $rootScope) { + $scope.waiting = true; + $scope.busy = false; + + $scope.upgradeV4 = () => { + const secondPasswordCancelled = () => { + $scope.insist = true; + $scope.busy = false; + }; + + const success = () => { + $scope.busy = false; + $uibModalInstance.close(); + }; + + $scope.insist = false; + $scope.busy = true; + Wallet.upgradeV4(success, secondPasswordCancelled); + }; + + $timeout(() => $scope.waiting = false, 3000); +} diff --git a/assets/js/controllers/wallet.controller.js b/assets/js/controllers/wallet.controller.js index 492787d843..813259c9a1 100644 --- a/assets/js/controllers/wallet.controller.js +++ b/assets/js/controllers/wallet.controller.js @@ -169,6 +169,16 @@ function WalletCtrl ($scope, $rootScope, Wallet, $uibModal, $timeout, Alerts, $i $scope.checkGoals = () => { if ($scope.status.isLoggedIn) { + if (Wallet.goal.upgradeV4) { + $uibModal.open({ + templateUrl: 'partials/upgradeV4.pug', + controller: 'UpgradeCtrlV4', + backdrop: 'static', + windowClass: 'bc-modal', + keyboard: false + }); + Wallet.goal.upgradeV4 = void 0; + } if (Wallet.goal.upgrade) { $uibModal.open({ templateUrl: 'partials/upgrade.pug', diff --git a/assets/js/services/wallet.service.js b/assets/js/services/wallet.service.js index f6f86d8ea3..02d5409c68 100644 --- a/assets/js/services/wallet.service.js +++ b/assets/js/services/wallet.service.js @@ -11,7 +11,8 @@ function Wallet ($http, $window, $timeout, $location, $injector, Alerts, MyWalle const wallet = { goal: { auth: false, - upgrade: false + upgrade: false, + upgradeV4: false }, status: { isLoggedIn: false, @@ -352,6 +353,31 @@ function Wallet ($http, $window, $timeout, $location, $injector, Alerts, MyWalle .then(proceed).catch(cancelSecondPasswordCallback); }; + wallet.upgradeV4 = (successCallback, cancelSecondPasswordCallback) => { + let success = () => { + wallet.status.didUpgradeToV4 = true; + wallet.my.wallet.getHistory().then(() => { + wallet.status.didLoadBalances = true; + // Montitored by e.g. acticity feed: + wallet.status.didLoadTransactions = true; + }); + successCallback(); + AngularHelper.$safeApply(); + }; + + let error = (e) => { + wallet.store.enableLogout(); + wallet.store.setIsSynchronizedWithServer(true); + $window.location.reload(); + }; + + let proceed = (password) => { + wallet.my.wallet.upgradeToV4(password, success, error); + }; + wallet.askForSecondPasswordIfNeeded() + .then(proceed).catch(cancelSecondPasswordCallback); + }; + wallet.legacyAddresses = () => ( wallet.status.isLoggedIn ? wallet.my.wallet.keys : [] ); @@ -855,6 +881,9 @@ function Wallet ($http, $window, $timeout, $location, $injector, Alerts, MyWalle } else if (event === 'hd_wallets_does_not_exist') { wallet.status.didUpgradeToHd = false; wallet.goal.upgrade = true; + } else if (event === 'perform_v4_payload_upgrade') { + wallet.status.didUpgradeToV4 = false; + wallet.goal.upgradeV4 = true; } else if (event === 'wallet not found') { Alerts.displayError('WALLET_NOT_FOUND'); } else if (event === 'ticker_updated' || event === 'did_set_latest_block') {