From e44a30526971778a390b1a7d20212a4fb7a24ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Fri, 2 Dec 2016 09:48:56 -0300 Subject: [PATCH 01/18] glidera new send and buy flow --- src/js/controllers/amount.js | 23 +++++- src/js/controllers/buyGlidera.js | 124 +++++++++++++++--------------- src/js/controllers/confirm.js | 37 +++++++++ src/js/routes.js | 29 ++++++- src/js/services/glideraService.js | 2 +- src/sass/views/amount.scss | 8 +- www/views/amount.html | 18 ++++- www/views/glidera.html | 18 ++++- 8 files changed, 184 insertions(+), 75 deletions(-) diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index f4f8d9d72..3f9cbc6c2 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, $ionicPopover, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, bitpayCardService, popupService, bwcError, payproService, profileService, bitcore, amazonService) { +angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, $ionicPopover, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, bitpayCardService, popupService, bwcError, payproService, profileService, bitcore, amazonService, glideraService) { var unitToSatoshi; var satToUnit; var unitDecimals; @@ -15,22 +15,31 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.$on("$ionicView.beforeEnter", function(event, data) { $scope.isGiftCard = data.stateParams.isGiftCard; + $scope.isGlidera = data.stateParams.isGlidera; + $scope.glideraAccessToken = data.stateParams.glideraAccessToken; + $scope.cardId = data.stateParams.cardId; $scope.showMenu = $ionicHistory.backView().stateName == 'tabs.send'; $scope.isWallet = data.stateParams.isWallet; - $scope.cardId = data.stateParams.cardId; $scope.toAddress = data.stateParams.toAddress; $scope.toName = data.stateParams.toName; $scope.toEmail = data.stateParams.toEmail; - $scope.showAlternativeAmount = !!$scope.cardId || !!$scope.isGiftCard; + $scope.showAlternativeAmount = !!$scope.cardId || !!$scope.isGiftCard || !!$scope.isGlidera; $scope.toColor = data.stateParams.toColor; $scope.customAmount = data.stateParams.customAmount; - if (!$scope.cardId && !$scope.isGiftCard && !data.stateParams.toAddress) { + if (!$scope.cardId && !$scope.isGiftCard && !$scope.isGlidera && !data.stateParams.toAddress) { $log.error('Bad params at amount') throw ('bad params'); } + glideraService.getLimits($scope.glideraAccessToken, function(err, limits) { + $scope.limits = limits; + $timeout(function() { + $scope.$apply(); + }); + }); + var reNr = /^[1234567890\.]$/; var reOp = /^[\*\+\-\/]$/; @@ -325,6 +334,12 @@ angular.module('copayApp.controllers').controller('amountController', function($ }, true); }); }); + } else if ($scope.isGlidera) { + $state.transitionTo('tabs.buyandsell.glidera.confirm', { + toAmount: (amount * unitToSatoshi).toFixed(0), + glideraBuy: true, + glideraAccessToken: $scope.glideraAccessToken + }); } else { var amount = $scope.showAlternativeAmount ? fromFiat(_amount) : _amount; if ($scope.customAmount) { diff --git a/src/js/controllers/buyGlidera.js b/src/js/controllers/buyGlidera.js index e15632185..0212622a4 100644 --- a/src/js/controllers/buyGlidera.js +++ b/src/js/controllers/buyGlidera.js @@ -9,65 +9,65 @@ angular.module('copayApp.controllers').controller('buyGlideraController', this.success = null; $scope.network = glideraService.getEnvironment(); - $scope.$on('Wallet/Changed', function(event, w) { - if (lodash.isEmpty(w)) { - $log.debug('No wallet provided'); - return; - } - wallet = w; - $log.debug('Wallet changed: ' + w.name); - }); - - $scope.update = function(opts) { - if (!$scope.token || !$scope.permissions) return; - $log.debug('Updating Glidera Account...'); - var accessToken = $scope.token; - var permissions = $scope.permissions; - - opts = opts || {}; - - glideraService.getStatus(accessToken, function(err, data) { - $scope.status = data; - }); - - glideraService.getLimits(accessToken, function(err, limits) { - $scope.limits = limits; - }); - - if (permissions.transaction_history) { - glideraService.getTransactions(accessToken, function(err, data) { - $scope.txs = data; - }); - } - - if (permissions.view_email_address && opts.fullUpdate) { - glideraService.getEmail(accessToken, function(err, data) { - $scope.email = data.email; - }); - } - if (permissions.personal_info && opts.fullUpdate) { - glideraService.getPersonalInfo(accessToken, function(err, data) { - $scope.personalInfo = data; - }); - } - }; - - this.getBuyPrice = function(token, price) { - var self = this; - if (!price || (price && !price.qty && !price.fiat)) { - this.buyPrice = null; - return; - } - this.gettingBuyPrice = true; - glideraService.buyPrice(token, price, function(err, buyPrice) { - self.gettingBuyPrice = false; - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); - return; - } - self.buyPrice = buyPrice; - }); - }; + // $scope.$on('Wallet/Changed', function(event, w) { + // if (lodash.isEmpty(w)) { + // $log.debug('No wallet provided'); + // return; + // } + // wallet = w; + // $log.debug('Wallet changed: ' + w.name); + // }); + // + // $scope.update = function(opts) { + // if (!$scope.token || !$scope.permissions) return; + // $log.debug('Updating Glidera Account...'); + // var accessToken = $scope.token; + // var permissions = $scope.permissions; + // + // opts = opts || {}; + // + // glideraService.getStatus(accessToken, function(err, data) { + // $scope.status = data; + // }); + // + // glideraService.getLimits(accessToken, function(err, limits) { + // $scope.limits = limits; + // }); + // + // if (permissions.transaction_history) { + // glideraService.getTransactions(accessToken, function(err, data) { + // $scope.txs = data; + // }); + // } + // + // if (permissions.view_email_address && opts.fullUpdate) { + // glideraService.getEmail(accessToken, function(err, data) { + // $scope.email = data.email; + // }); + // } + // if (permissions.personal_info && opts.fullUpdate) { + // glideraService.getPersonalInfo(accessToken, function(err, data) { + // $scope.personalInfo = data; + // }); + // } + // }; + // + // this.getBuyPrice = function(token, price) { + // var self = this; + // if (!price || (price && !price.qty && !price.fiat)) { + // this.buyPrice = null; + // return; + // } + // this.gettingBuyPrice = true; + // glideraService.buyPrice(token, price, function(err, buyPrice) { + // self.gettingBuyPrice = false; + // if (err) { + // popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + // return; + // } + // self.buyPrice = buyPrice; + // }); + // }; this.get2faCode = function(token) { var self = this; @@ -116,7 +116,7 @@ angular.module('copayApp.controllers').controller('buyGlideraController', }, 100); }; - $scope.$on("$ionicView.enter", function(event, data){ + $scope.$on("$ionicView.enter", function(event, data) { $scope.token = null; $scope.permissions = null; $scope.email = null; @@ -134,7 +134,9 @@ angular.module('copayApp.controllers').controller('buyGlideraController', } $scope.token = glidera.token; $scope.permissions = glidera.permissions; - $scope.update({fullUpdate: true}); + $scope.update({ + fullUpdate: true + }); }); $scope.wallets = profileService.getWallets({ diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 5c4d55499..541bea870 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -21,6 +21,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( giftCardInvoiceTime = data.stateParams.giftCardInvoiceTime; giftCardUUID = data.stateParams.giftCardUUID; + // Glidera parameters + toAmount = data.stateParams.toAmount; cachedSendMax = {}; $scope.useSendMax = data.stateParams.useSendMax == 'true' ? true : false; @@ -131,6 +133,23 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.displayAmount = $scope.displayUnit = $scope.fee = $scope.alternativeAmountStr = $scope.insufficientFunds = $scope.noMatchingWallet = null; }; + $scope.getBuyPrice = function(token, price) { + + if (!price || (price && !price.qty && !price.fiat)) { + $scope.buyPrice = null; + return; + } + $scope.gettingBuyPrice = true; + glideraService.buyPrice(token, price, function(err, buyPrice) { + $scope.gettingBuyPrice = false; + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + return; + } + $scope.buyPrice = buyPrice; + }); + }; + $scope.getSendMaxInfo = function() { resetValues(); @@ -537,6 +556,24 @@ angular.module('copayApp.controllers').controller('confirmController', function( } }; + $scope.get2faCode = function(token, cb) { + ongoingProcess.set('Sending 2FA code...', true); + $timeout(function() { + glideraService.get2faCode(token, function(err, sent) { + ongoingProcess.set('Sending 2FA code...', false); + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); + return; + } + var title = gettextCatalog.getString("Please, enter the code below"); + var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); + popupService.showPrompt(title, message, null, function(code) { + return cb(code); + }); + }); + }, 100); + }; + function publishAndSign(wallet, txp, onSendStatusChange) { walletService.publishAndSign(wallet, txp, function(err, txp) { if (err) return setSendError(err); diff --git a/src/js/routes.js b/src/js/routes.js index 4ef27d0a8..eb40cdec9 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -899,13 +899,40 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) .state('tabs.buyandsell.glidera.sell', { - url: '/sell', + url: '/sell/:glideraSell/:glideraAccessToken', views: { 'tab-home@tabs': { controller: 'sellGlideraController', controllerAs: 'sell', templateUrl: 'views/sellGlidera.html' } + }, + params: { + isGlidera: true + } + }) + .state('tabs.buyandsell.glidera.amount', { + url: '/amount/:glideraBuy/:glideraAccessToken', + views: { + 'tab-home@tabs': { + controller: 'amountController', + templateUrl: 'views/amount.html' + } + }, + params: { + isGlidera: true + } + }) + .state('tabs.buyandsell.glidera.confirm', { + url: '/confirm/:toAmount/:glideraBuy/:glideraAccessToken', + views: { + 'tab-home@tabs': { + controller: 'confirmController', + templateUrl: 'views/confirm.html' + } + }, + params: { + isGlidera: true } }) .state('tabs.preferences.glidera', { diff --git a/src/js/services/glideraService.js b/src/js/services/glideraService.js index cf9083014..2bf89ffb6 100644 --- a/src/js/services/glideraService.js +++ b/src/js/services/glideraService.js @@ -16,7 +16,7 @@ angular.module('copayApp.services').factory('glideraService', function($http, $l * Development: 'testnet' * Production: 'livenet' */ - credentials.NETWORK = 'livenet'; + credentials.NETWORK = 'testnet'; if (credentials.NETWORK == 'testnet') { credentials.HOST = glidera.sandbox.host; diff --git a/src/sass/views/amount.scss b/src/sass/views/amount.scss index 7c4c1681e..1c40612cc 100644 --- a/src/sass/views/amount.scss +++ b/src/sass/views/amount.scss @@ -37,7 +37,7 @@ position: absolute; top: 10px; } - .amount-pane-send { + .amount-pane-recipient { position: absolute; top: 95px; bottom: 0; @@ -68,7 +68,7 @@ } } } - .amount-pane-receive { + .amount-pane-no-recipient { position: absolute; top: 0; bottom: 0; @@ -84,6 +84,10 @@ padding-top: 10px; color: $dark-gray; font-weight: bold; + .limits { + margin-top: 20px; + color: $light-gray; + } } } .amount { diff --git a/www/views/amount.html b/www/views/amount.html index 24c3b3f1e..ef560983a 100644 --- a/www/views/amount.html +++ b/www/views/amount.html @@ -14,14 +14,14 @@ -
+
Recipient
- +
@@ -36,12 +36,21 @@
-
+
Amount - (Purchase Amount is limited to USD 500 per day) + (Purchase Amount is limited to USD 500 per day) +
+ Daily buy limit: + {{limits.dailyBuy|currency:'':2}} {{limits.currency}} + (remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}}) +
+ Monthly buy limit: + {{limits.monthlyBuy|currency:'':2}} {{limits.currency}} + (remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}}) +
@@ -62,6 +71,7 @@
+
From ff4b93acbe83e471d4d1f322e199e07b30b7237f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Fri, 2 Dec 2016 10:09:24 -0300 Subject: [PATCH 02/18] send flow fixes --- src/js/controllers/amount.js | 8 +++++++- src/js/controllers/buyGlidera.js | 28 ++++++++++++++-------------- src/js/controllers/confirm.js | 2 ++ src/js/routes.js | 2 +- www/views/amount.html | 27 +++++++++++++++++++-------- 5 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index 3f9cbc6c2..74f9d7c88 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -15,8 +15,13 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.$on("$ionicView.beforeEnter", function(event, data) { $scope.isGiftCard = data.stateParams.isGiftCard; + + // Glidera parameters $scope.isGlidera = data.stateParams.isGlidera; $scope.glideraAccessToken = data.stateParams.glideraAccessToken; + $scope.glideraBuy = data.stateParams.glideraBuy; + $scope.glideraSell = data.stateParams.glideraSell; + $scope.cardId = data.stateParams.cardId; $scope.showMenu = $ionicHistory.backView().stateName == 'tabs.send'; $scope.isWallet = data.stateParams.isWallet; @@ -337,7 +342,8 @@ angular.module('copayApp.controllers').controller('amountController', function($ } else if ($scope.isGlidera) { $state.transitionTo('tabs.buyandsell.glidera.confirm', { toAmount: (amount * unitToSatoshi).toFixed(0), - glideraBuy: true, + glideraBuy: $scope.glideraBuy, + glideraSell: $scope.glideraSell, glideraAccessToken: $scope.glideraAccessToken }); } else { diff --git a/src/js/controllers/buyGlidera.js b/src/js/controllers/buyGlidera.js index 0212622a4..2bdcd049d 100644 --- a/src/js/controllers/buyGlidera.js +++ b/src/js/controllers/buyGlidera.js @@ -69,20 +69,20 @@ angular.module('copayApp.controllers').controller('buyGlideraController', // }); // }; - this.get2faCode = function(token) { - var self = this; - ongoingProcess.set('Sending 2FA code...', true); - $timeout(function() { - glideraService.get2faCode(token, function(err, sent) { - ongoingProcess.set('Sending 2FA code...', false); - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); - return; - } - self.show2faCodeInput = sent; - }); - }, 100); - }; + // this.get2faCode = function(token) { + // var self = this; + // ongoingProcess.set('Sending 2FA code...', true); + // $timeout(function() { + // glideraService.get2faCode(token, function(err, sent) { + // ongoingProcess.set('Sending 2FA code...', false); + // if (err) { + // popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); + // return; + // } + // self.show2faCodeInput = sent; + // }); + // }, 100); + // }; this.sendRequest = function(token, permissions, twoFaCode) { var self = this; diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 541bea870..3e762942d 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -22,6 +22,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( giftCardUUID = data.stateParams.giftCardUUID; // Glidera parameters + $scope.isGlidera = data.stateParams.isGlidera; + $scope.glideraAccessToken = data.stateParams.glideraAccessToken; toAmount = data.stateParams.toAmount; cachedSendMax = {}; diff --git a/src/js/routes.js b/src/js/routes.js index eb40cdec9..4e49e6fa8 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -912,7 +912,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) .state('tabs.buyandsell.glidera.amount', { - url: '/amount/:glideraBuy/:glideraAccessToken', + url: '/amount/:glideraBuy/:glideraSell/:glideraAccessToken', views: { 'tab-home@tabs': { controller: 'amountController', diff --git a/www/views/amount.html b/www/views/amount.html index ef560983a..aab0fb4f8 100644 --- a/www/views/amount.html +++ b/www/views/amount.html @@ -42,14 +42,25 @@
Amount (Purchase Amount is limited to USD 500 per day) -
- Daily buy limit: - {{limits.dailyBuy|currency:'':2}} {{limits.currency}} - (remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}}) -
- Monthly buy limit: - {{limits.monthlyBuy|currency:'':2}} {{limits.currency}} - (remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}}) +
+
+ Daily buy limit: + {{limits.dailyBuy|currency:'':2}} {{limits.currency}} + (remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}}) +
+ Monthly buy limit: + {{limits.monthlyBuy|currency:'':2}} {{limits.currency}} + (remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}}) +
+
+ Daily sell limit: + {{limits.dailySell|currency:'':2}} {{limits.currency}} + (remaining {{limits.dailySellRemaining|currency:'':2}} {{limits.currency}}) +
+ Monthly sell limit: + {{limits.monthlySell|currency:'':2}} {{limits.currency}} + (remaining {{limits.monthlySellRemaining|currency:'':2}} {{limits.currency}}) +
From 090b05984b028b371ecc756792f536ab64c58bdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Fri, 2 Dec 2016 14:48:39 -0300 Subject: [PATCH 03/18] refactor confirm view --- src/js/controllers/amount.js | 1 + src/js/controllers/buyGlidera.js | 146 +++++++++++------------ src/js/controllers/confirm.js | 95 +++++++++++---- src/js/routes.js | 2 +- src/js/services/glideraService.js | 7 +- src/sass/views/includes/txp-details.scss | 5 + www/views/confirm.html | 10 +- 7 files changed, 163 insertions(+), 103 deletions(-) diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index 74f9d7c88..ff3e8beb9 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -340,6 +340,7 @@ angular.module('copayApp.controllers').controller('amountController', function($ }); }); } else if ($scope.isGlidera) { + var amount = $scope.showAlternativeAmount ? fromFiat(_amount) : _amount; $state.transitionTo('tabs.buyandsell.glidera.confirm', { toAmount: (amount * unitToSatoshi).toFixed(0), glideraBuy: $scope.glideraBuy, diff --git a/src/js/controllers/buyGlidera.js b/src/js/controllers/buyGlidera.js index 2bdcd049d..383c77688 100644 --- a/src/js/controllers/buyGlidera.js +++ b/src/js/controllers/buyGlidera.js @@ -9,80 +9,80 @@ angular.module('copayApp.controllers').controller('buyGlideraController', this.success = null; $scope.network = glideraService.getEnvironment(); - // $scope.$on('Wallet/Changed', function(event, w) { - // if (lodash.isEmpty(w)) { - // $log.debug('No wallet provided'); - // return; - // } - // wallet = w; - // $log.debug('Wallet changed: ' + w.name); - // }); - // - // $scope.update = function(opts) { - // if (!$scope.token || !$scope.permissions) return; - // $log.debug('Updating Glidera Account...'); - // var accessToken = $scope.token; - // var permissions = $scope.permissions; - // - // opts = opts || {}; - // - // glideraService.getStatus(accessToken, function(err, data) { - // $scope.status = data; - // }); - // - // glideraService.getLimits(accessToken, function(err, limits) { - // $scope.limits = limits; - // }); - // - // if (permissions.transaction_history) { - // glideraService.getTransactions(accessToken, function(err, data) { - // $scope.txs = data; - // }); - // } - // - // if (permissions.view_email_address && opts.fullUpdate) { - // glideraService.getEmail(accessToken, function(err, data) { - // $scope.email = data.email; - // }); - // } - // if (permissions.personal_info && opts.fullUpdate) { - // glideraService.getPersonalInfo(accessToken, function(err, data) { - // $scope.personalInfo = data; - // }); - // } - // }; - // - // this.getBuyPrice = function(token, price) { - // var self = this; - // if (!price || (price && !price.qty && !price.fiat)) { - // this.buyPrice = null; - // return; - // } - // this.gettingBuyPrice = true; - // glideraService.buyPrice(token, price, function(err, buyPrice) { - // self.gettingBuyPrice = false; - // if (err) { - // popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); - // return; - // } - // self.buyPrice = buyPrice; - // }); - // }; + $scope.$on('Wallet/Changed', function(event, w) { + if (lodash.isEmpty(w)) { + $log.debug('No wallet provided'); + return; + } + wallet = w; + $log.debug('Wallet changed: ' + w.name); + }); - // this.get2faCode = function(token) { - // var self = this; - // ongoingProcess.set('Sending 2FA code...', true); - // $timeout(function() { - // glideraService.get2faCode(token, function(err, sent) { - // ongoingProcess.set('Sending 2FA code...', false); - // if (err) { - // popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); - // return; - // } - // self.show2faCodeInput = sent; - // }); - // }, 100); - // }; + $scope.update = function(opts) { + if (!$scope.token || !$scope.permissions) return; + $log.debug('Updating Glidera Account...'); + var accessToken = $scope.token; + var permissions = $scope.permissions; + + opts = opts || {}; + + glideraService.getStatus(accessToken, function(err, data) { + $scope.status = data; + }); + + glideraService.getLimits(accessToken, function(err, limits) { + $scope.limits = limits; + }); + + if (permissions.transaction_history) { + glideraService.getTransactions(accessToken, function(err, data) { + $scope.txs = data; + }); + } + + if (permissions.view_email_address && opts.fullUpdate) { + glideraService.getEmail(accessToken, function(err, data) { + $scope.email = data.email; + }); + } + if (permissions.personal_info && opts.fullUpdate) { + glideraService.getPersonalInfo(accessToken, function(err, data) { + $scope.personalInfo = data; + }); + } + }; + + this.getBuyPrice = function(token, price) { + var self = this; + if (!price || (price && !price.qty && !price.fiat)) { + this.buyPrice = null; + return; + } + this.gettingBuyPrice = true; + glideraService.buyPrice(token, price, function(err, buyPrice) { + self.gettingBuyPrice = false; + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + return; + } + self.buyPrice = buyPrice; + }); + }; + + this.get2faCode = function(token) { + var self = this; + ongoingProcess.set('Sending 2FA code...', true); + $timeout(function() { + glideraService.get2faCode(token, function(err, sent) { + ongoingProcess.set('Sending 2FA code...', false); + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); + return; + } + self.show2faCodeInput = sent; + }); + }, 100); + }; this.sendRequest = function(token, permissions, twoFaCode) { var self = this; diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 3e762942d..7ddc0119a 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $interval, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, gettext, txFormatService, ongoingProcess, $ionicModal, popupService, $ionicHistory, $ionicConfig, payproService, feeService, amazonService) { +angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $interval, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, gettext, txFormatService, ongoingProcess, $ionicModal, popupService, $ionicHistory, $ionicConfig, payproService, feeService, amazonService, glideraService, bwcError) { var cachedTxp = {}; var toAmount; var isChromeApp = platformInfo.isChromeApp; @@ -24,6 +24,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( // Glidera parameters $scope.isGlidera = data.stateParams.isGlidera; $scope.glideraAccessToken = data.stateParams.glideraAccessToken; + $scope.glideraBuy = data.stateParams.glideraBuy; + $scope.glideraSell = data.stateParams.glideraSell; toAmount = data.stateParams.toAmount; cachedSendMax = {}; @@ -46,7 +48,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( var config = configService.getSync().wallet; $scope.feeLevel = config.settings && config.settings.feeLevel ? config.settings.feeLevel : 'normal'; - $scope.network = (new bitcore.Address($scope.toAddress)).network.name; + if ($scope.isGlidera) $scope.network = glideraService.getEnvironment(); + else $scope.network = (new bitcore.Address($scope.toAddress)).network.name; resetValues(); setwallets(); }); @@ -129,29 +132,13 @@ angular.module('copayApp.controllers').controller('confirmController', function( txFormatService.formatAlternativeStr(toAmount, function(v) { $scope.alternativeAmountStr = v; }); + if ($scope.isGlidera && $scope.glideraBuy) $scope.getBuyPrice(); }; function resetValues() { $scope.displayAmount = $scope.displayUnit = $scope.fee = $scope.alternativeAmountStr = $scope.insufficientFunds = $scope.noMatchingWallet = null; }; - $scope.getBuyPrice = function(token, price) { - - if (!price || (price && !price.qty && !price.fiat)) { - $scope.buyPrice = null; - return; - } - $scope.gettingBuyPrice = true; - glideraService.buyPrice(token, price, function(err, buyPrice) { - $scope.gettingBuyPrice = false; - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); - return; - } - $scope.buyPrice = buyPrice; - }); - }; - $scope.getSendMaxInfo = function() { resetValues(); @@ -330,6 +317,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.wallet = wallet; $scope.fee = $scope.txp = null; + if ($scope.isGlidera) return; if (stop) { $timeout.cancel(stop); stop = null; @@ -445,6 +433,32 @@ angular.module('copayApp.controllers').controller('confirmController', function( return; } + if ($scope.isGlidera) { + $scope.get2faCode(function(err, sent) { + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); + return; + } + if (sent) { + var title = gettextCatalog.getString("Please, enter the code below"); + var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); + popupService.showPrompt(title, message, null, function(twoFaCode) { + $scope.sendRequest(twoFaCode, function(err, data) { + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), err); + return; + } + $scope.success = data; + $timeout(function() { + $scope.$digest(); + }); + }) + }); + } + }); + return; + } + var wallet = $scope.wallet; if (!wallet) { return setSendError(gettextCatalog.getString('No wallet selected')); @@ -558,24 +572,53 @@ angular.module('copayApp.controllers').controller('confirmController', function( } }; - $scope.get2faCode = function(token, cb) { + $scope.get2faCode = function(cb) { ongoingProcess.set('Sending 2FA code...', true); $timeout(function() { - glideraService.get2faCode(token, function(err, sent) { + glideraService.get2faCode($scope.glideraAccessToken, function(err, sent) { ongoingProcess.set('Sending 2FA code...', false); + return cb(err, sent); + }); + }, 100); + }; + + $scope.sendRequest = function(twoFaCode, cb) { + ongoingProcess.set('Buying Bitcoin...', true); + $timeout(function() { + walletService.getAddress($scope.wallet, false, function(err, walletAddr) { if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); + ongoingProcess.set('Buying Bitcoin...', false); + popupService.showAlert(gettextCatalog.getString('Error'), bwcError.cb(err, 'Could not create address')); return; } - var title = gettextCatalog.getString("Please, enter the code below"); - var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); - popupService.showPrompt(title, message, null, function(code) { - return cb(code); + var data = { + destinationAddress: walletAddr, + qty: $scope.buyPrice.qty, + priceUuid: $scope.buyPrice.priceUuid, + useCurrentPrice: false, + ip: null + }; + glideraService.buy($scope.glideraAccessToken, twoFaCode, data, function(err, data) { + ongoingProcess.set('Buying Bitcoin...', false); + return cb(err, data) }); }); }, 100); }; + $scope.getBuyPrice = function() { + var satToBtc = 1 / 100000000; + var price = {}; + price.qty = (toAmount * satToBtc).toFixed(8); + glideraService.buyPrice($scope.glideraAccessToken, price, function(err, buyPrice) { + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + return; + } + $scope.buyPrice = buyPrice; + }); + }; + function publishAndSign(wallet, txp, onSendStatusChange) { walletService.publishAndSign(wallet, txp, function(err, txp) { if (err) return setSendError(err); diff --git a/src/js/routes.js b/src/js/routes.js index 4e49e6fa8..031a66000 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -924,7 +924,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) .state('tabs.buyandsell.glidera.confirm', { - url: '/confirm/:toAmount/:glideraBuy/:glideraAccessToken', + url: '/confirm/:toAmount/:glideraBuy/:glideraSell/:glideraAccessToken', views: { 'tab-home@tabs': { controller: 'confirmController', diff --git a/src/js/services/glideraService.js b/src/js/services/glideraService.js index 2bf89ffb6..9673efd6a 100644 --- a/src/js/services/glideraService.js +++ b/src/js/services/glideraService.js @@ -192,8 +192,13 @@ angular.module('copayApp.services').factory('glideraService', function($http, $l }; root.get2faCode = function(token, cb) { - if (!token) return cb('Invalid Token'); + if (!token) { + $log.error('Glidera Sent 2FA code by SMS: ERROR Invalid Token'); + return cb('Invalid Token'); + } + $http(_get('/authentication/get2faCode', token)).then(function(data) { + $log.info('Glidera Sent 2FA code by SMS: SUCCESS'); return cb(null, data.status == 200 ? true : false); }, function(data) { diff --git a/src/sass/views/includes/txp-details.scss b/src/sass/views/includes/txp-details.scss index 137573dae..83d375def 100644 --- a/src/sass/views/includes/txp-details.scss +++ b/src/sass/views/includes/txp-details.scss @@ -47,6 +47,11 @@ color: #9B9B9B; } } + .buy-price { + bottom: 20px; + position: absolute; + color: $light-gray; + } } .item { border-color: $item-border-color; diff --git a/www/views/confirm.html b/www/views/confirm.html index 5f5ebae63..433f8944c 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -19,6 +19,11 @@
{{displayAmount || '...'}} {{displayUnit}}
{{alternativeAmountStr || '...'}}
+
+
+ Buy {{buyPrice.subtotal|currency:'':2}} {{buyPrice.currency}} in Bitcoin at {{buyPrice.price}} {{buyPrice.currency}}/BTC +
+
@@ -29,11 +34,12 @@
To - +
+
@@ -67,7 +73,7 @@ -
+
Fee: {{feeLevel}} {{fee || '...'}} From f60ee6f4fdcffb892c0cca013920204f325d1d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Fri, 2 Dec 2016 15:40:36 -0300 Subject: [PATCH 04/18] finishing buy flow --- src/js/controllers/confirm.js | 12 ++++++++++- src/sass/views/includes/txp-details.scss | 27 ++++++++++++++++++++---- www/views/confirm.html | 20 ++++++++++++++---- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 7ddc0119a..5fb0b3ca2 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -448,7 +448,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( popupService.showAlert(gettextCatalog.getString('Error'), err); return; } - $scope.success = data; + $scope.sendStatus = 'success'; $timeout(function() { $scope.$digest(); }); @@ -536,6 +536,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( var previousView = $ionicHistory.viewHistory().backView && $ionicHistory.viewHistory().backView.stateName; var fromBitPayCard = previousView.match(/tabs.bitpayCard/) ? true : false; var fromAmazon = previousView.match(/tabs.giftcards.amazon/) ? true : false; + var fromGlidera = previousView.match(/tabs.buyandsell.glidera/) ? true : false; $ionicHistory.nextViewOptions({ disableAnimate: true @@ -560,6 +561,15 @@ angular.module('copayApp.controllers').controller('confirmController', function( cardClaimCode: $scope.amazonGiftCard ? $scope.amazonGiftCard.claimCode : null }); }); + } else if (fromGlidera) { + $ionicHistory.nextViewOptions({ + disableAnimate: true, + historyRoot: true + }); + $ionicHistory.clearHistory(); + $state.go('tabs.home').then(function() { + $state.transitionTo('tabs.buyandsell.glidera'); + }); } else { $ionicHistory.nextViewOptions({ disableAnimate: true, diff --git a/src/sass/views/includes/txp-details.scss b/src/sass/views/includes/txp-details.scss index 83d375def..98a512fe0 100644 --- a/src/sass/views/includes/txp-details.scss +++ b/src/sass/views/includes/txp-details.scss @@ -47,10 +47,21 @@ color: #9B9B9B; } } - .buy-price { - bottom: 20px; - position: absolute; - color: $light-gray; + .glidera-explanation { + padding: 0 1rem; + margin: 1rem 0; + white-space: normal; + } + .glidera-description { + text-align: center; + font-size: 15px; + color: $mid-gray; + margin: 1rem 0; + a { + font-weight: bold; + cursor: pointer; + cursor: hand; + } } } .item { @@ -250,4 +261,12 @@ color: rgba(58, 58, 58, .6); margin-bottom: 1.5rem; } + + .glidera-success { + margin-top: 15px; + span { + font-size: 15px; + display: block; + } + } } diff --git a/www/views/confirm.html b/www/views/confirm.html index 433f8944c..3d8172fa6 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -19,9 +19,17 @@
{{displayAmount || '...'}} {{displayUnit}}
{{alternativeAmountStr || '...'}}
-
-
- Buy {{buyPrice.subtotal|currency:'':2}} {{buyPrice.currency}} in Bitcoin at {{buyPrice.price}} {{buyPrice.currency}}/BTC +
+
+
+ Buy {{buyPrice.subtotal|currency:'':2}} {{buyPrice.currency}} in Bitcoin at {{buyPrice.price}} {{buyPrice.currency}}/BTC +
+
+ Fiat will be immediately withdrawn from your bank account +
+
+ Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated and shown each time your recive a payment +
@@ -66,7 +74,7 @@
- + Add Memo {{description}} @@ -106,6 +114,10 @@ slide-success-hide-on-confirm="true"> Payment Sent Proposal Created +
+ A transfer has been initiated from your bank account + Your bitcoins should arrive to your wallet in 2-4 business day +
Date: Fri, 2 Dec 2016 17:18:48 -0300 Subject: [PATCH 05/18] buy flow rename and fixes --- src/js/controllers/confirm.js | 1 + src/js/directives/clickToAccept.js | 3 +- src/js/directives/slideToAccept.js | 54 +++++++++++--------- src/js/directives/walletSelector.js | 1 + src/sass/views/amount.scss | 3 +- src/sass/views/includes/txp-details.scss | 26 ++++------ www/views/confirm.html | 48 +++++++++-------- www/views/includes/clickToAccept.html | 2 +- www/views/includes/slideToAcceptSuccess.html | 2 +- www/views/includes/walletSelector.html | 2 +- 10 files changed, 75 insertions(+), 67 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 5fb0b3ca2..4ce4c86b7 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -241,6 +241,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); $scope.showWalletSelector = function() { + $scope.walletSelectorTitle = !$scope.isGlidera && !$scope.buyGlidera ? 'Send From' : 'Receive in'; if (!$scope.useSendMax && ($scope.insufficientFunds || $scope.noMatchingWallet)) return; $scope.showWallets = true; }; diff --git a/src/js/directives/clickToAccept.js b/src/js/directives/clickToAccept.js index 36cfbaeb5..63257e235 100644 --- a/src/js/directives/clickToAccept.js +++ b/src/js/directives/clickToAccept.js @@ -8,10 +8,11 @@ angular.module('copayApp.directives') transclude: true, scope: { sendStatus: '=clickSendStatus', + wallet: '=hasWalletChosen' }, link: function(scope, element, attrs) { scope.$watch('sendStatus', function() { - if(scope.sendStatus !== 'success') { + if (scope.sendStatus !== 'success') { scope.displaySendStatus = scope.sendStatus; } }); diff --git a/src/js/directives/slideToAccept.js b/src/js/directives/slideToAccept.js index a396e2b0d..e57aaecff 100644 --- a/src/js/directives/slideToAccept.js +++ b/src/js/directives/slideToAccept.js @@ -8,7 +8,8 @@ angular.module('copayApp.directives') transclude: true, scope: { sendStatus: '=slideSendStatus', - onConfirm: '&slideOnConfirm' + onConfirm: '&slideOnConfirm', + wallet: '=hasWalletChosen' }, link: function(scope, element, attrs) { @@ -33,9 +34,9 @@ angular.module('copayApp.directives') scope.displaySendStatus = ''; scope.$watch('sendStatus', function() { - if(!scope.sendStatus) { + if (!scope.sendStatus) { reset(); - } else if(scope.sendStatus === 'success') { + } else if (scope.sendStatus === 'success') { scope.displaySendStatus = ''; $timeout(function() { reset(); @@ -51,19 +52,20 @@ angular.module('copayApp.directives') var startTime = currentEaseStartTime; var initialPct = fromPct; var distance = pct - fromPct; + function ease() { - if(startTime !== currentEaseStartTime) { + if (startTime !== currentEaseStartTime) { return; } $window.requestAnimationFrame(function() { var now = Date.now(); var elapsed = now - startTime; - var normalizedElapsedTime = elapsed/duration; + var normalizedElapsedTime = elapsed / duration; var newVal = easeFx(normalizedElapsedTime); - var newPct = newVal*distance + initialPct; + var newPct = newVal * distance + initialPct; animateFx(newPct); scope.$digest(); - if(elapsed < duration) { + if (elapsed < duration) { ease(); } else { deferred.resolve(); @@ -93,31 +95,33 @@ angular.module('copayApp.directives') function setNewSliderStyle(pct) { var knobWidthPct = getKnobWidthPercentage(); var translatePct = pct - knobWidthPct; - if(isSliding) { - translatePct += 0.35*pct; + if (isSliding) { + translatePct += 0.35 * pct; } scope.sliderStyle = getTransformStyle(translatePct); curSliderPct = pct; } function setNewBitcoinStyle(pct) { - var translatePct = -2.25*pct; + var translatePct = -2.25 * pct; scope.bitcoinStyle = getTransformStyle(translatePct); curBitcoinPct = pct; } function setNewTextStyle(pct) { - var translatePct = -0.1*pct; + var translatePct = -0.1 * pct; scope.textStyle = getTransformStyle(translatePct); curTextPct = pct; } function getTransformStyle(translatePct) { - return {'transform': 'translateX(' + translatePct + '%)'}; + return { + 'transform': 'translateX(' + translatePct + '%)' + }; } - function getKnobWidthPercentage() { - var knobWidthPct = (KNOB_WIDTH/elm.clientWidth)*100; + function getKnobWidthPercentage() { + var knobWidthPct = (KNOB_WIDTH / elm.clientWidth) * 100; return knobWidthPct; } @@ -175,8 +179,8 @@ angular.module('copayApp.directives') function getTouchXPosition($event) { var x; - if($event.touches || $event.changedTouches) { - if($event.touches.length) { + if ($event.touches || $event.changedTouches) { + if ($event.touches.length) { x = $event.touches[0].clientX; } else { x = $event.changedTouches[0].clientX; @@ -190,18 +194,18 @@ angular.module('copayApp.directives') function getSlidPercentage($event) { var x = getTouchXPosition($event); var width = elm.clientWidth; - var pct = (x/width)*100; - if(x >= width) { + var pct = (x / width) * 100; + if (x >= width) { pct = 100; } return pct; } scope.onTouchstart = function($event) { - if(scope.isSlidFully) { + if (scope.isSlidFully) { return; } - if(!isSliding) { + if (!isSliding) { var pct = getSlidPercentage($event); if (pct > MAX_SLIDE_START_PERCENTAGE) { jiggleSlider(); @@ -209,7 +213,7 @@ angular.module('copayApp.directives') } else { isSliding = true; var knobWidthPct = getKnobWidthPercentage(); - if(pct < knobWidthPct) { + if (pct < knobWidthPct) { pct = knobWidthPct; } pct += PERCENTAGE_BUMP; @@ -219,12 +223,12 @@ angular.module('copayApp.directives') }; scope.onTouchmove = function($event) { - if(!isSliding || scope.isSlidFully) { + if (!isSliding || scope.isSlidFully) { return; } var pct = getSlidPercentage($event); var knobWidthPct = getKnobWidthPercentage(); - if(pct < knobWidthPct) { + if (pct < knobWidthPct) { pct = knobWidthPct; } pct += PERCENTAGE_BUMP; @@ -233,11 +237,11 @@ angular.module('copayApp.directives') }; scope.onTouchend = function($event) { - if(scope.isSlidFully) { + if (scope.isSlidFully) { return; } var pct = getSlidPercentage($event); - if(isSliding && pct > FULLY_SLID_PERCENTAGE) { + if (isSliding && pct > FULLY_SLID_PERCENTAGE) { pct = 100; setSliderPosition(pct); alertSlidFully(); diff --git a/src/js/directives/walletSelector.js b/src/js/directives/walletSelector.js index 97149d528..c5dfff59a 100644 --- a/src/js/directives/walletSelector.js +++ b/src/js/directives/walletSelector.js @@ -7,6 +7,7 @@ angular.module('copayApp.directives') templateUrl: 'views/includes/walletSelector.html', transclude: true, scope: { + title: '=walletSelectorTitle', show: '=walletSelectorShow', wallets: '=walletSelectorWallets', selectedWallet: '=walletSelectorSelectedWallet', diff --git a/src/sass/views/amount.scss b/src/sass/views/amount.scss index 1c40612cc..cc4bf24e3 100644 --- a/src/sass/views/amount.scss +++ b/src/sass/views/amount.scss @@ -85,8 +85,9 @@ color: $dark-gray; font-weight: bold; .limits { - margin-top: 20px; + margin-top: 10px; color: $light-gray; + font-size: 12px; } } } diff --git a/src/sass/views/includes/txp-details.scss b/src/sass/views/includes/txp-details.scss index 98a512fe0..7cc44a655 100644 --- a/src/sass/views/includes/txp-details.scss +++ b/src/sass/views/includes/txp-details.scss @@ -47,22 +47,6 @@ color: #9B9B9B; } } - .glidera-explanation { - padding: 0 1rem; - margin: 1rem 0; - white-space: normal; - } - .glidera-description { - text-align: center; - font-size: 15px; - color: $mid-gray; - margin: 1rem 0; - a { - font-weight: bold; - cursor: pointer; - cursor: hand; - } - } } .item { border-color: $item-border-color; @@ -261,7 +245,6 @@ color: rgba(58, 58, 58, .6); margin-bottom: 1.5rem; } - .glidera-success { margin-top: 15px; span { @@ -269,4 +252,13 @@ display: block; } } + .glidera-explanation { + padding: 0 1rem; + white-space: normal; + } + .glidera-description { + text-align: center; + font-size: 12px; + color: $mid-gray; + } } diff --git a/www/views/confirm.html b/www/views/confirm.html index 3d8172fa6..fa3fd059b 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -12,26 +12,14 @@
- Sending + Sending Sending maximum amount + Buying
{{displayAmount || '...'}} {{displayUnit}}
{{alternativeAmountStr || '...'}}
-
-
-
- Buy {{buyPrice.subtotal|currency:'':2}} {{buyPrice.currency}} in Bitcoin at {{buyPrice.price}} {{buyPrice.currency}}/BTC -
-
- Fiat will be immediately withdrawn from your bank account -
-
- Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated and shown each time your recive a payment -
-
-
+ click-send-status="sendStatus" + has-wallet-chosen="wallet"> Click to pay + slide-on-confirm="wallet ? onConfirm() : null" + slide-send-status="sendStatus" + has-wallet-chosen="wallet"> Slide to pay +
-
+
Payment Sent diff --git a/www/views/includes/walletSelector.html b/www/views/includes/walletSelector.html index 42ec0d772..5227c0b15 100644 --- a/www/views/includes/walletSelector.html +++ b/www/views/includes/walletSelector.html @@ -1,6 +1,6 @@ -
Send from
+
{{title}}
Date: Mon, 5 Dec 2016 10:27:53 -0300 Subject: [PATCH 06/18] Glidera sell flow --- src/js/controllers/confirm.js | 162 ++++++++++++++++++++++++++++++---- src/js/controllers/glidera.js | 2 + www/views/confirm.html | 23 ++++- www/views/glidera.html | 8 +- 4 files changed, 169 insertions(+), 26 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 4ce4c86b7..f8b3bbf72 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -133,6 +133,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.alternativeAmountStr = v; }); if ($scope.isGlidera && $scope.glideraBuy) $scope.getBuyPrice(); + if ($scope.isGlidera && $scope.glideraSell) $scope.getSellPrice(); }; function resetValues() { @@ -241,7 +242,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); $scope.showWalletSelector = function() { - $scope.walletSelectorTitle = !$scope.isGlidera && !$scope.buyGlidera ? 'Send From' : 'Receive in'; + $scope.walletSelectorTitle = $scope.glideraBuy ? 'Receive in' : $scope.glideraSell ? 'Sell From' : 'Send from'; if (!$scope.useSendMax && ($scope.insufficientFunds || $scope.noMatchingWallet)) return; $scope.showWallets = true; }; @@ -434,6 +435,11 @@ angular.module('copayApp.controllers').controller('confirmController', function( return; } + var wallet = $scope.wallet; + if (!wallet) { + return setSendError(gettextCatalog.getString('No wallet selected')); + } + if ($scope.isGlidera) { $scope.get2faCode(function(err, sent) { if (err) { @@ -444,27 +450,36 @@ angular.module('copayApp.controllers').controller('confirmController', function( var title = gettextCatalog.getString("Please, enter the code below"); var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); popupService.showPrompt(title, message, null, function(twoFaCode) { - $scope.sendRequest(twoFaCode, function(err, data) { - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err); - return; - } - $scope.sendStatus = 'success'; - $timeout(function() { - $scope.$digest(); - }); - }) + if ($scope.glideraBuy) { + $scope.buyRequest(wallet, twoFaCode, function(err, data) { + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), err); + return; + } + $scope.sendStatus = 'success'; + $timeout(function() { + $scope.$digest(); + }); + }) + } + if ($scope.glideraSell) { + $scope.sellRequest(wallet, twoFaCode, function(err, data) { + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), err); + return; + } + $scope.sendStatus = 'success'; + $timeout(function() { + $scope.$digest(); + }); + }) + } }); } }); return; } - var wallet = $scope.wallet; - if (!wallet) { - return setSendError(gettextCatalog.getString('No wallet selected')); - } - if (!wallet.canSign() && !wallet.isPrivKeyExternal()) { $log.info('No signing proposal: No private key'); @@ -593,10 +608,10 @@ angular.module('copayApp.controllers').controller('confirmController', function( }, 100); }; - $scope.sendRequest = function(twoFaCode, cb) { + $scope.buyRequest = function(wallet, twoFaCode, cb) { ongoingProcess.set('Buying Bitcoin...', true); $timeout(function() { - walletService.getAddress($scope.wallet, false, function(err, walletAddr) { + walletService.getAddress(wallet, false, function(err, walletAddr) { if (err) { ongoingProcess.set('Buying Bitcoin...', false); popupService.showAlert(gettextCatalog.getString('Error'), bwcError.cb(err, 'Could not create address')); @@ -611,12 +626,107 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; glideraService.buy($scope.glideraAccessToken, twoFaCode, data, function(err, data) { ongoingProcess.set('Buying Bitcoin...', false); - return cb(err, data) + return cb(err, data); }); }); }, 100); }; + $scope.sellRequest = function(wallet, twoFaCode, cb) { + var outputs = []; + var config = configService.getSync(); + var configWallet = config.wallet; + var walletSettings = configWallet.settings; + + ongoingProcess.set('creatingTx', true); + walletService.getAddress(wallet, null, function(err, refundAddress) { + if (!refundAddress) { + ongoingProcess.clear(); + popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, 'Could not create address')); + return; + } + glideraService.getSellAddress($scope.glideraAccessToken, function(err, sellAddress) { + if (!sellAddress || err) { + ongoingProcess.clear(); + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get the destination bitcoin address')); + return; + } + var amount = parseInt(($scope.sellPrice.qty * 100000000).toFixed(0)); + var comment = 'Glidera transaction'; + + outputs.push({ + 'toAddress': sellAddress, + 'amount': amount, + 'message': comment + }); + + var txp = { + toAddress: sellAddress, + amount: amount, + outputs: outputs, + message: comment, + payProUrl: null, + excludeUnconfirmedUtxos: configWallet.spendUnconfirmed ? false : true, + feeLevel: walletSettings.feeLevel || 'normal', + customData: { + 'glideraToken': $scope.glideraAccessToken + } + }; + + walletService.createTx(wallet, txp, function(err, createdTxp) { + ongoingProcess.clear(); + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); + return; + } + walletService.prepare(wallet, function(err, password) { + if (err) { + ongoingProcess.clear(); + popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); + return; + } + ongoingProcess.set('signingTx', true); + walletService.publishTx(wallet, createdTxp, function(err, publishedTxp) { + if (err) { + ongoingProcess.clear(); + popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); + return; + } + + walletService.signTx(wallet, publishedTxp, password, function(err, signedTxp) { + if (err) { + ongoingProcess.clear(); + popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); + walletService.removeTx(wallet, signedTxp, function(err) { + if (err) $log.debug(err); + }); + return; + } + var rawTx = signedTxp.raw; + var data = { + refundAddress: refundAddress, + signedTransaction: rawTx, + priceUuid: $scope.sellPrice.priceUuid, + useCurrentPrice: $scope.sellPrice.priceUuid ? false : true, + ip: null + }; + ongoingProcess.set('Selling Bitcoin', true); + glideraService.sell($scope.glideraAccessToken, twoFaCode, data, function(err, data) { + ongoingProcess.clear(); + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); + return; + } + return cb(err, data) + }); + }); + }); + }); + }); + }); + }); + } + $scope.getBuyPrice = function() { var satToBtc = 1 / 100000000; var price = {}; @@ -630,6 +740,20 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); }; + $scope.getSellPrice = function() { + var satToBtc = 1 / 100000000; + var price = {}; + price.qty = (toAmount * satToBtc).toFixed(8); + + glideraService.sellPrice($scope.glideraAccessToken, price, function(err, sellPrice) { + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + return; + } + $scope.sellPrice = sellPrice; + }); + }; + function publishAndSign(wallet, txp, onSendStatusChange) { walletService.publishAndSign(wallet, txp, function(err, txp) { if (err) return setSendError(err); diff --git a/src/js/controllers/glidera.js b/src/js/controllers/glidera.js index f3fc9af6c..dad595d59 100644 --- a/src/js/controllers/glidera.js +++ b/src/js/controllers/glidera.js @@ -18,9 +18,11 @@ angular.module('copayApp.controllers').controller('glideraController', $scope.status = null; $scope.limits = null; + $scope.connectingGlidera = true; ongoingProcess.set('connectingGlidera', true); glideraService.init($scope.token, function(err, glidera) { ongoingProcess.set('connectingGlidera'); + $scope.connectingGlidera = false; if (err || !glidera) { if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); return; diff --git a/www/views/confirm.html b/www/views/confirm.html index fa3fd059b..a8380a123 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -15,6 +15,7 @@ Sending Sending maximum amount Buying + Selling
{{displayAmount || '...'}} {{displayUnit}}
@@ -77,7 +78,7 @@ {{fee || '...'}}
-
+
Information
@@ -91,6 +92,20 @@
+
+ Information +
+
+ Sell {{sellPrice.subtotal|currency:'':2}} {{sellPrice.currency}} in Bitcoin at {{sellPrice.price|currency:'':2}} {{sellPrice.currency}}/BTC +
+
+ Fiat will be deposited in your bank account in 4-6 business days. +
+
+ Bitcoins will be immediately sent from your "{{wallet.name || '...' }}" wallet to Glidera. +
+
+
No wallets available
@@ -122,8 +137,10 @@ Payment Sent Proposal Created
- A transfer has been initiated from your bank account - Your bitcoins should arrive to your wallet in 2-4 business day + A transfer has been initiated from your bank account + your bitcoins should arrive to your wallet in 2-4 business day + A transfer has been initiated to your bank account + should arrive in 4-6 business days
diff --git a/www/views/glidera.html b/www/views/glidera.html index 52a90dffb..2812bd7d5 100644 --- a/www/views/glidera.html +++ b/www/views/glidera.html @@ -7,15 +7,15 @@ -
+
Glidera is disabled for this application
-
+
Testnet wallets only work with Glidera Sandbox Accounts
-
+
@@ -56,7 +56,7 @@
-
+
From cc990526fc26584fcf9991a1116e791d59b18460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 10:29:24 -0300 Subject: [PATCH 07/18] remove unused files --- src/js/controllers/buyGlidera.js | 148 -------------------- src/js/controllers/sellGlidera.js | 219 ------------------------------ www/views/buyGlidera.html | 123 ----------------- www/views/glidera.html | 14 -- www/views/sellGlidera.html | 124 ----------------- 5 files changed, 628 deletions(-) delete mode 100644 src/js/controllers/buyGlidera.js delete mode 100644 src/js/controllers/sellGlidera.js delete mode 100644 www/views/buyGlidera.html delete mode 100644 www/views/sellGlidera.html diff --git a/src/js/controllers/buyGlidera.js b/src/js/controllers/buyGlidera.js deleted file mode 100644 index 383c77688..000000000 --- a/src/js/controllers/buyGlidera.js +++ /dev/null @@ -1,148 +0,0 @@ -'use strict'; - -angular.module('copayApp.controllers').controller('buyGlideraController', - function($scope, $timeout, $log, profileService, walletService, glideraService, bwcError, lodash, ongoingProcess, popupService, gettextCatalog) { - - var wallet; - var self = this; - this.show2faCodeInput = null; - this.success = null; - $scope.network = glideraService.getEnvironment(); - - $scope.$on('Wallet/Changed', function(event, w) { - if (lodash.isEmpty(w)) { - $log.debug('No wallet provided'); - return; - } - wallet = w; - $log.debug('Wallet changed: ' + w.name); - }); - - $scope.update = function(opts) { - if (!$scope.token || !$scope.permissions) return; - $log.debug('Updating Glidera Account...'); - var accessToken = $scope.token; - var permissions = $scope.permissions; - - opts = opts || {}; - - glideraService.getStatus(accessToken, function(err, data) { - $scope.status = data; - }); - - glideraService.getLimits(accessToken, function(err, limits) { - $scope.limits = limits; - }); - - if (permissions.transaction_history) { - glideraService.getTransactions(accessToken, function(err, data) { - $scope.txs = data; - }); - } - - if (permissions.view_email_address && opts.fullUpdate) { - glideraService.getEmail(accessToken, function(err, data) { - $scope.email = data.email; - }); - } - if (permissions.personal_info && opts.fullUpdate) { - glideraService.getPersonalInfo(accessToken, function(err, data) { - $scope.personalInfo = data; - }); - } - }; - - this.getBuyPrice = function(token, price) { - var self = this; - if (!price || (price && !price.qty && !price.fiat)) { - this.buyPrice = null; - return; - } - this.gettingBuyPrice = true; - glideraService.buyPrice(token, price, function(err, buyPrice) { - self.gettingBuyPrice = false; - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); - return; - } - self.buyPrice = buyPrice; - }); - }; - - this.get2faCode = function(token) { - var self = this; - ongoingProcess.set('Sending 2FA code...', true); - $timeout(function() { - glideraService.get2faCode(token, function(err, sent) { - ongoingProcess.set('Sending 2FA code...', false); - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); - return; - } - self.show2faCodeInput = sent; - }); - }, 100); - }; - - this.sendRequest = function(token, permissions, twoFaCode) { - var self = this; - ongoingProcess.set('Buying Bitcoin...', true); - $timeout(function() { - walletService.getAddress(wallet, false, function(err, walletAddr) { - if (err) { - ongoingProcess.set('Buying Bitcoin...', false); - popupService.showAlert(gettextCatalog.getString('Error'), bwcError.cb(err, 'Could not create address')); - return; - } - var data = { - destinationAddress: walletAddr, - qty: self.buyPrice.qty, - priceUuid: self.buyPrice.priceUuid, - useCurrentPrice: false, - ip: null - }; - glideraService.buy(token, twoFaCode, data, function(err, data) { - ongoingProcess.set('Buying Bitcoin...', false); - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err); - return; - } - self.success = data; - $timeout(function() { - $scope.$digest(); - }); - }); - }); - }, 100); - }; - - $scope.$on("$ionicView.enter", function(event, data) { - $scope.token = null; - $scope.permissions = null; - $scope.email = null; - $scope.personalInfo = null; - $scope.txs = null; - $scope.status = null; - $scope.limits = null; - - ongoingProcess.set('connectingGlidera', true); - glideraService.init($scope.token, function(err, glidera) { - ongoingProcess.set('connectingGlidera'); - if (err || !glidera) { - if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); - return; - } - $scope.token = glidera.token; - $scope.permissions = glidera.permissions; - $scope.update({ - fullUpdate: true - }); - }); - - $scope.wallets = profileService.getWallets({ - network: $scope.network, - onlyComplete: true - }); - }); - - }); diff --git a/src/js/controllers/sellGlidera.js b/src/js/controllers/sellGlidera.js deleted file mode 100644 index be19a4298..000000000 --- a/src/js/controllers/sellGlidera.js +++ /dev/null @@ -1,219 +0,0 @@ -'use strict'; - -angular.module('copayApp.controllers').controller('sellGlideraController', - function($scope, $timeout, $log, profileService, glideraService, bwcError, lodash, walletService, configService, ongoingProcess, popupService, gettextCatalog) { - - var self = this; - this.data = {}; - this.show2faCodeInput = null; - this.success = null; - var wallet; - $scope.network = glideraService.getEnvironment(); - - $scope.$on('Wallet/Changed', function(event, w) { - if (lodash.isEmpty(w)) { - $log.debug('No wallet provided'); - return; - } - wallet = w; - $log.debug('Wallet changed: ' + w.name); - }); - - $scope.update = function(opts) { - if (!$scope.token || !$scope.permissions) return; - $log.debug('Updating Glidera Account...'); - var accessToken = $scope.token; - var permissions = $scope.permissions; - - opts = opts || {}; - - glideraService.getStatus(accessToken, function(err, data) { - $scope.status = data; - }); - - glideraService.getLimits(accessToken, function(err, limits) { - $scope.limits = limits; - }); - - if (permissions.transaction_history) { - glideraService.getTransactions(accessToken, function(err, data) { - $scope.txs = data; - }); - } - - if (permissions.view_email_address && opts.fullUpdate) { - glideraService.getEmail(accessToken, function(err, data) { - $scope.email = data.email; - }); - } - if (permissions.personal_info && opts.fullUpdate) { - glideraService.getPersonalInfo(accessToken, function(err, data) { - $scope.personalInfo = data; - }); - } - }; - - this.getSellPrice = function(token, price) { - var self = this; - if (!price || (price && !price.qty && !price.fiat)) { - self.sellPrice = null; - return; - } - self.gettingSellPrice = true; - glideraService.sellPrice(token, price, function(err, sellPrice) { - self.gettingSellPrice = false; - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); - return; - } - self.sellPrice = sellPrice; - }); - }; - - this.get2faCode = function(token) { - var self = this; - ongoingProcess.set('Sending 2FA code...', true); - $timeout(function() { - glideraService.get2faCode(token, function(err, sent) { - ongoingProcess.set('Sending 2FA code...', false); - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); - } else { - self.show2faCodeInput = sent; - } - }); - }, 100); - }; - - this.createTx = function(token, permissions, twoFaCode) { - var self = this; - var outputs = []; - var config = configService.getSync(); - var configWallet = config.wallet; - var walletSettings = configWallet.settings; - - if (!wallet) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('No wallet selected')); - return; - } - - ongoingProcess.set('creatingTx', true); - walletService.getAddress(wallet, null, function(err, refundAddress) { - if (!refundAddress) { - ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, 'Could not create address')); - return; - } - glideraService.getSellAddress(token, function(err, sellAddress) { - if (!sellAddress || err) { - ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get the destination bitcoin address')); - return; - } - var amount = parseInt((self.sellPrice.qty * 100000000).toFixed(0)); - var comment = 'Glidera transaction'; - - outputs.push({ - 'toAddress': sellAddress, - 'amount': amount, - 'message': comment - }); - - var txp = { - toAddress: sellAddress, - amount: amount, - outputs: outputs, - message: comment, - payProUrl: null, - excludeUnconfirmedUtxos: configWallet.spendUnconfirmed ? false : true, - feeLevel: walletSettings.feeLevel || 'normal', - customData: { - 'glideraToken': token - } - }; - - walletService.createTx(wallet, txp, function(err, createdTxp) { - ongoingProcess.clear(); - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); - return; - } - walletService.prepare(wallet, function(err, password) { - if (err) { - ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); - return; - } - ongoingProcess.set('signingTx', true); - walletService.publishTx(wallet, createdTxp, function(err, publishedTxp) { - if (err) { - ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); - return; - } - - walletService.signTx(wallet, publishedTxp, password, function(err, signedTxp) { - if (err) { - ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); - walletService.removeTx(wallet, signedTxp, function(err) { - if (err) $log.debug(err); - }); - return; - } - var rawTx = signedTxp.raw; - var data = { - refundAddress: refundAddress, - signedTransaction: rawTx, - priceUuid: self.sellPrice.priceUuid, - useCurrentPrice: self.sellPrice.priceUuid ? false : true, - ip: null - }; - ongoingProcess.set('Selling Bitcoin', true); - glideraService.sell(token, twoFaCode, data, function(err, data) { - ongoingProcess.clear(); - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); - return; - } - self.success = data; - $timeout(function() { - $scope.$digest(); - }); - }); - }); - }); - }); - }); - }); - }); - }; - - $scope.$on("$ionicView.enter", function(event, data){ - $scope.token = null; - $scope.permissions = null; - $scope.email = null; - $scope.personalInfo = null; - $scope.txs = null; - $scope.status = null; - $scope.limits = null; - - ongoingProcess.set('connectingGlidera', true); - glideraService.init($scope.token, function(err, glidera) { - ongoingProcess.set('connectingGlidera'); - if (err || !glidera) { - if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); - return; - } - $scope.token = glidera.token; - $scope.permissions = glidera.permissions; - $scope.update({fullUpdate: true}); - }); - - $scope.wallets = profileService.getWallets({ - network: $scope.network, - n: 1, - onlyComplete: true - }); - }); - }); diff --git a/www/views/buyGlidera.html b/www/views/buyGlidera.html deleted file mode 100644 index 60bdcbbd0..000000000 --- a/www/views/buyGlidera.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - Buy - - - - -
- Testnet wallets only work with Glidera Sandbox Accounts -
- -
- Daily buy limit: - {{limits.dailyBuy|currency:'':2}} {{limits.currency}} - (remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}}) -
- Monthly buy limit: - {{limits.monthlyBuy|currency:'':2}} {{limits.currency}} - (remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}}) -
- -
- - This operation was disabled because you have a pending first transaction - -
- -
- -
- - - - - -
- Buy - {{buy.buyPrice.subtotal|currency:'':2}} {{buy.buyPrice.currency}} in Bitcoin - {{buy.buyPrice.qty}} BTC - at {{buy.buyPrice.price}} {{buy.buyPrice.currency}}/BTC -
-
- (Enter the amount to get the exchange rate) -
- -
- ... -
- - -
-
-
-
-{{buy.buyPrice.subtotal|currency:'':2}} {{buy.buyPrice.currency}} → {{buy.buyPrice.qty}} BTC -

- A SMS containing a confirmation code was sent to your phone.
- Please, enter the code below -

-
-
- -
- -
-

- Fiat will be immediately withdrawn from your bank account. The bitcoins will be purchased and deposited to your wallet in 2-4 business days. -

-
-
-
-

Purchase initiated

-

- A transfer has been initiated from your bank account. Your bitcoins should arrive to your wallet in 2-4 business days. -

- - -
- - diff --git a/www/views/glidera.html b/www/views/glidera.html index 2812bd7d5..8bf533cc4 100644 --- a/www/views/glidera.html +++ b/www/views/glidera.html @@ -87,20 +87,6 @@ Sell Bitcoin - - buy bitcoin - Buy Bitcoin OLD - - - - buy bitcoin - Sell Bitcoin OLD - -
diff --git a/www/views/sellGlidera.html b/www/views/sellGlidera.html deleted file mode 100644 index fc7b6b30c..000000000 --- a/www/views/sellGlidera.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - Sell - - - - -
- Testnet wallets only work with Glidera Sandbox Accounts -
- -
- Daily sell limit: - {{limits.dailySell|currency:'':2}} {{limits.currency}} - (remaining {{limits.dailySellRemaining|currency:'':2}} {{limits.currency}}) -
- Monthly sell limit: - {{limits.monthlySell|currency:'':2}} {{limits.currency}} - (remaining {{limits.monthlySellRemaining|currency:'':2}} {{limits.currency}}) -
- -
- - This operation was disabled because you have a pending first transaction - -
- -
-
- -
- -
- - - -
- Sell - {{sell.sellPrice.subtotal|currency:'':2}} {{sell.sellPrice.currency}} in Bitcoin - {{sell.sellPrice.qty}} BTC - at {{sell.sellPrice.price|currency:'':2}} {{sell.sellPrice.currency}}/BTC - -
-
- (Enter the amount to get the exchange rate) -
- -
- ... -
- - -
-
-
-
-{{sell.sellPrice.qty}} BTC → {{sell.sellPrice.subtotal|currency:'':2}} {{sell.sellPrice.currency}} -

- A SMS containing a confirmation code was sent to your phone.
- Please, enter the code below -

-
-
- -
- -
-

- Bitcoins will be immediately sent from your wallet to Glidera. Fiat will be deposited in your bank account in 4-6 business days. -

-
-
-
-

Sale initiated

-

- A transfer has been initiated to your bank account and should arrive in 4-6 business days. -

- - -
-
-
From 55cf51efce3b62e4680beaf26cfce3f37e550833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 10:39:16 -0300 Subject: [PATCH 08/18] remove unused routes --- src/js/routes.js | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/src/js/routes.js b/src/js/routes.js index 031a66000..78b339714 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -888,29 +888,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } } }) - .state('tabs.buyandsell.glidera.buy', { - url: '/buy', - views: { - 'tab-home@tabs': { - controller: 'buyGlideraController', - controllerAs: 'buy', - templateUrl: 'views/buyGlidera.html' - } - } - }) - .state('tabs.buyandsell.glidera.sell', { - url: '/sell/:glideraSell/:glideraAccessToken', - views: { - 'tab-home@tabs': { - controller: 'sellGlideraController', - controllerAs: 'sell', - templateUrl: 'views/sellGlidera.html' - } - }, - params: { - isGlidera: true - } - }) .state('tabs.buyandsell.glidera.amount', { url: '/amount/:glideraBuy/:glideraSell/:glideraAccessToken', views: { From db05d964e138ec033e20b7c648de204a9fee7341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 10:50:54 -0300 Subject: [PATCH 09/18] handle prompt cancel --- src/js/controllers/confirm.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index f8b3bbf72..23a7e6590 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -450,6 +450,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( var title = gettextCatalog.getString("Please, enter the code below"); var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); popupService.showPrompt(title, message, null, function(twoFaCode) { + if (typeof twoFaCode == 'undefined') return; if ($scope.glideraBuy) { $scope.buyRequest(wallet, twoFaCode, function(err, data) { if (err) { From 19971c57a6fa73d39fa08793a28ef6fb90077815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 11:00:13 -0300 Subject: [PATCH 10/18] fix wallet label --- www/views/confirm.html | 1 + 1 file changed, 1 insertion(+) diff --git a/www/views/confirm.html b/www/views/confirm.html index a8380a123..8db2d524a 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -57,6 +57,7 @@ From To + From
From 2d6dad6557eb00aa7630cc0ee630197b8a5e0f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 11:17:48 -0300 Subject: [PATCH 11/18] refactor --- src/js/controllers/confirm.js | 53 ++++++++++++++++--------------- src/js/services/onGoingProcess.js | 3 ++ www/views/confirm.html | 4 +-- www/views/glidera.html | 10 +++--- 4 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 23a7e6590..fa55c6592 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -426,6 +426,12 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.approve = function(onSendStatusChange) { + + var wallet = $scope.wallet; + if (!wallet) { + return; + } + if ($scope.paypro && $scope.paymentExpired.value) { popupService.showAlert(null, gettextCatalog.getString('This bitcoin payment request has expired.')); $scope.sendStatus = ''; @@ -435,26 +441,21 @@ angular.module('copayApp.controllers').controller('confirmController', function( return; } - var wallet = $scope.wallet; - if (!wallet) { - return setSendError(gettextCatalog.getString('No wallet selected')); - } - if ($scope.isGlidera) { $scope.get2faCode(function(err, sent) { if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); + popupService.showAlert('Error', 'Could not send confirmation code to your phone'); return; } if (sent) { - var title = gettextCatalog.getString("Please, enter the code below"); - var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); + var title = "Please, enter the code below"; + var message = "A SMS containing a confirmation code was sent to your phone."; popupService.showPrompt(title, message, null, function(twoFaCode) { if (typeof twoFaCode == 'undefined') return; if ($scope.glideraBuy) { $scope.buyRequest(wallet, twoFaCode, function(err, data) { if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err); + popupService.showAlert('Error', err); return; } $scope.sendStatus = 'success'; @@ -466,7 +467,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( if ($scope.glideraSell) { $scope.sellRequest(wallet, twoFaCode, function(err, data) { if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err); + popupService.showAlert('Error', err); return; } $scope.sendStatus = 'success'; @@ -600,22 +601,22 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.get2faCode = function(cb) { - ongoingProcess.set('Sending 2FA code...', true); + ongoingProcess.set('sending2faCode', true); $timeout(function() { glideraService.get2faCode($scope.glideraAccessToken, function(err, sent) { - ongoingProcess.set('Sending 2FA code...', false); + ongoingProcess.set('sending2faCode', false); return cb(err, sent); }); }, 100); }; $scope.buyRequest = function(wallet, twoFaCode, cb) { - ongoingProcess.set('Buying Bitcoin...', true); + ongoingProcess.set('buyingBitcoin', true); $timeout(function() { walletService.getAddress(wallet, false, function(err, walletAddr) { if (err) { - ongoingProcess.set('Buying Bitcoin...', false); - popupService.showAlert(gettextCatalog.getString('Error'), bwcError.cb(err, 'Could not create address')); + ongoingProcess.set('buyingBitcoin', false); + popupService.showAlert('Error', bwcError.cb(err, 'Could not create address')); return; } var data = { @@ -626,7 +627,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( ip: null }; glideraService.buy($scope.glideraAccessToken, twoFaCode, data, function(err, data) { - ongoingProcess.set('Buying Bitcoin...', false); + ongoingProcess.set('buyingBitcoin', false); return cb(err, data); }); }); @@ -643,13 +644,13 @@ angular.module('copayApp.controllers').controller('confirmController', function( walletService.getAddress(wallet, null, function(err, refundAddress) { if (!refundAddress) { ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, 'Could not create address')); + popupService.showAlert('Error', bwcError.msg(err, 'Could not create address')); return; } glideraService.getSellAddress($scope.glideraAccessToken, function(err, sellAddress) { if (!sellAddress || err) { ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get the destination bitcoin address')); + popupService.showAlert('Error', 'Could not get the destination bitcoin address'); return; } var amount = parseInt(($scope.sellPrice.qty * 100000000).toFixed(0)); @@ -677,27 +678,27 @@ angular.module('copayApp.controllers').controller('confirmController', function( walletService.createTx(wallet, txp, function(err, createdTxp) { ongoingProcess.clear(); if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); + popupService.showAlert('Error', err.message || bwcError.msg(err)); return; } walletService.prepare(wallet, function(err, password) { if (err) { ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); + popupService.showAlert('Error', err.message || bwcError.msg(err)); return; } ongoingProcess.set('signingTx', true); walletService.publishTx(wallet, createdTxp, function(err, publishedTxp) { if (err) { ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); + popupService.showAlert('Error', err.message ||  bwcError.msg(err)); return; } walletService.signTx(wallet, publishedTxp, password, function(err, signedTxp) { if (err) { ongoingProcess.clear(); - popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); + popupService.showAlert('Error', err.message ||  bwcError.msg(err)); walletService.removeTx(wallet, signedTxp, function(err) { if (err) $log.debug(err); }); @@ -711,11 +712,11 @@ angular.module('copayApp.controllers').controller('confirmController', function( useCurrentPrice: $scope.sellPrice.priceUuid ? false : true, ip: null }; - ongoingProcess.set('Selling Bitcoin', true); + ongoingProcess.set('sellingBitcoin', true); glideraService.sell($scope.glideraAccessToken, twoFaCode, data, function(err, data) { ongoingProcess.clear(); if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); + popupService.showAlert('Error', err.message ||  bwcError.msg(err)); return; } return cb(err, data) @@ -734,7 +735,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( price.qty = (toAmount * satToBtc).toFixed(8); glideraService.buyPrice($scope.glideraAccessToken, price, function(err, buyPrice) { if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + popupService.showAlert('Error', 'Could not get exchange information. Please, try again'); return; } $scope.buyPrice = buyPrice; @@ -748,7 +749,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( glideraService.sellPrice($scope.glideraAccessToken, price, function(err, sellPrice) { if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + popupService.showAlert('Error', 'Could not get exchange information. Please, try again'); return; } $scope.sellPrice = sellPrice; diff --git a/src/js/services/onGoingProcess.js b/src/js/services/onGoingProcess.js index cdcb501d7..b543430ab 100644 --- a/src/js/services/onGoingProcess.js +++ b/src/js/services/onGoingProcess.js @@ -37,6 +37,9 @@ angular.module('copayApp.services').factory('ongoingProcess', function($log, $ti 'generatingNewAddress': gettext('Generating new address...'), 'gettingAddresses': gettext('Getting addresses...'), 'sendingByEmail': gettext('Preparing addresses...'), + 'sending2faCode': gettext('Sending 2FA code...'), + 'buyingBitcoin': gettext('Buying Bitcoin...'), + 'sellingBitcoin': gettext('Selling Bitcoin...') }; root.clear = function() { diff --git a/www/views/confirm.html b/www/views/confirm.html index 8db2d524a..72a3ba8bd 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -117,7 +117,7 @@
@@ -126,7 +126,7 @@ Slide to pay diff --git a/www/views/glidera.html b/www/views/glidera.html index 8bf533cc4..18f29bb04 100644 --- a/www/views/glidera.html +++ b/www/views/glidera.html @@ -5,17 +5,17 @@ Glidera - + -
+
Glidera is disabled for this application
-
+
Testnet wallets only work with Glidera Sandbox Accounts
-
+
@@ -56,7 +56,7 @@
-
+
From fc8f315671803de540dcd604144003f54c3b43d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 11:36:01 -0300 Subject: [PATCH 12/18] fixes --- src/js/controllers/glidera.js | 9 +++------ www/views/glidera.html | 6 +++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/js/controllers/glidera.js b/src/js/controllers/glidera.js index dad595d59..bb746274f 100644 --- a/src/js/controllers/glidera.js +++ b/src/js/controllers/glidera.js @@ -69,11 +69,11 @@ angular.module('copayApp.controllers').controller('glideraController', } }; - this.getAuthenticateUrl = function() { + $scope.getAuthenticateUrl = function() { return glideraService.getOauthCodeUrl(); }; - this.submitOauthCode = function(code) { + $scope.submitOauthCode = function(code) { ongoingProcess.set('connectingGlidera', true); $timeout(function() { glideraService.getToken(code, function(err, data) { @@ -92,10 +92,7 @@ angular.module('copayApp.controllers').controller('glideraController', }, 100); }; - this.openTxModal = function(token, tx) { - var self = this; - - $scope.self = self; + $scope.openTxModal = function(token, tx) { $scope.tx = tx; glideraService.getTransaction(token, tx.transactionUuid, function(err, tx) { diff --git a/www/views/glidera.html b/www/views/glidera.html index 18f29bb04..a169a6e82 100644 --- a/www/views/glidera.html +++ b/www/views/glidera.html @@ -27,7 +27,7 @@

Connect your Glidera account to get started.

@@ -41,7 +41,7 @@
-
+
From 6c6bab52c404e218804ee2cd251fbee5a307bdcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 11:54:54 -0300 Subject: [PATCH 13/18] use only one route url param --- src/js/controllers/amount.js | 5 +---- src/js/controllers/confirm.js | 8 +++----- src/js/routes.js | 10 ++-------- www/views/amount.html | 4 ++-- www/views/confirm.html | 23 ++++++++++++----------- www/views/glidera.html | 4 ++-- 6 files changed, 22 insertions(+), 32 deletions(-) diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index ff3e8beb9..51a42904d 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -19,8 +19,6 @@ angular.module('copayApp.controllers').controller('amountController', function($ // Glidera parameters $scope.isGlidera = data.stateParams.isGlidera; $scope.glideraAccessToken = data.stateParams.glideraAccessToken; - $scope.glideraBuy = data.stateParams.glideraBuy; - $scope.glideraSell = data.stateParams.glideraSell; $scope.cardId = data.stateParams.cardId; $scope.showMenu = $ionicHistory.backView().stateName == 'tabs.send'; @@ -343,8 +341,7 @@ angular.module('copayApp.controllers').controller('amountController', function($ var amount = $scope.showAlternativeAmount ? fromFiat(_amount) : _amount; $state.transitionTo('tabs.buyandsell.glidera.confirm', { toAmount: (amount * unitToSatoshi).toFixed(0), - glideraBuy: $scope.glideraBuy, - glideraSell: $scope.glideraSell, + isGlidera: $scope.isGlidera, glideraAccessToken: $scope.glideraAccessToken }); } else { diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index fa55c6592..6872e4e87 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -24,8 +24,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( // Glidera parameters $scope.isGlidera = data.stateParams.isGlidera; $scope.glideraAccessToken = data.stateParams.glideraAccessToken; - $scope.glideraBuy = data.stateParams.glideraBuy; - $scope.glideraSell = data.stateParams.glideraSell; toAmount = data.stateParams.toAmount; cachedSendMax = {}; @@ -132,8 +130,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( txFormatService.formatAlternativeStr(toAmount, function(v) { $scope.alternativeAmountStr = v; }); - if ($scope.isGlidera && $scope.glideraBuy) $scope.getBuyPrice(); - if ($scope.isGlidera && $scope.glideraSell) $scope.getSellPrice(); + if ($scope.isGlidera == 'buy') $scope.getBuyPrice(); + if ($scope.isGlidera == 'sell') $scope.getSellPrice(); }; function resetValues() { @@ -242,7 +240,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); $scope.showWalletSelector = function() { - $scope.walletSelectorTitle = $scope.glideraBuy ? 'Receive in' : $scope.glideraSell ? 'Sell From' : 'Send from'; + $scope.walletSelectorTitle = $scope.isGlidera == 'buy' ? 'Receive in' : $scope.isGlidera == 'sell' ? 'Sell From' : 'Send from'; if (!$scope.useSendMax && ($scope.insufficientFunds || $scope.noMatchingWallet)) return; $scope.showWallets = true; }; diff --git a/src/js/routes.js b/src/js/routes.js index 78b339714..278d24646 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -889,27 +889,21 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) .state('tabs.buyandsell.glidera.amount', { - url: '/amount/:glideraBuy/:glideraSell/:glideraAccessToken', + url: '/amount/:isGlidera/:glideraAccessToken', views: { 'tab-home@tabs': { controller: 'amountController', templateUrl: 'views/amount.html' } - }, - params: { - isGlidera: true } }) .state('tabs.buyandsell.glidera.confirm', { - url: '/confirm/:toAmount/:glideraBuy/:glideraSell/:glideraAccessToken', + url: '/confirm/:toAmount/:isGlidera/:glideraAccessToken', views: { 'tab-home@tabs': { controller: 'confirmController', templateUrl: 'views/confirm.html' } - }, - params: { - isGlidera: true } }) .state('tabs.preferences.glidera', { diff --git a/www/views/amount.html b/www/views/amount.html index aab0fb4f8..c2d36dc12 100644 --- a/www/views/amount.html +++ b/www/views/amount.html @@ -43,7 +43,7 @@ Amount (Purchase Amount is limited to USD 500 per day)
-
+
Daily buy limit: {{limits.dailyBuy|currency:'':2}} {{limits.currency}} (remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}}) @@ -52,7 +52,7 @@ {{limits.monthlyBuy|currency:'':2}} {{limits.currency}} (remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}})
-
+
Daily sell limit: {{limits.dailySell|currency:'':2}} {{limits.currency}} (remaining {{limits.dailySellRemaining|currency:'':2}} {{limits.currency}}) diff --git a/www/views/confirm.html b/www/views/confirm.html index 72a3ba8bd..7a4cd45e4 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -14,8 +14,8 @@ Sending Sending maximum amount - Buying - Selling + Buying + Selling
{{displayAmount || '...'}} {{displayUnit}}
@@ -30,7 +30,8 @@
To - From + From + To @@ -56,8 +57,8 @@
From - To - From + To + From
@@ -79,7 +80,7 @@ {{fee || '...'}}
-
+
Information
@@ -93,7 +94,7 @@
-
+
Information
@@ -138,10 +139,10 @@ Payment Sent Proposal Created
- A transfer has been initiated from your bank account - your bitcoins should arrive to your wallet in 2-4 business day - A transfer has been initiated to your bank account - should arrive in 4-6 business days + A transfer has been initiated from your bank account + your bitcoins should arrive to your wallet in 2-4 business day + A transfer has been initiated to your bank account + should arrive in 4-6 business days
diff --git a/www/views/glidera.html b/www/views/glidera.html index a169a6e82..076f8b01a 100644 --- a/www/views/glidera.html +++ b/www/views/glidera.html @@ -75,14 +75,14 @@ ng-show="status && status.userCanTransact">
+ href ui-sref="tabs.buyandsell.glidera.amount({isGlidera: 'buy', glideraAccessToken: token})"> buy bitcoin Buy Bitcoin + href ui-sref="tabs.buyandsell.glidera.amount({isGlidera: 'sell', glideraAccessToken: token})"> buy bitcoin Sell Bitcoin From a08f4d32cd0aca0db1180d926ec0a69c2a09f94a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 11:57:13 -0300 Subject: [PATCH 14/18] change network to production --- src/js/services/glideraService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/services/glideraService.js b/src/js/services/glideraService.js index 9673efd6a..06e30cf14 100644 --- a/src/js/services/glideraService.js +++ b/src/js/services/glideraService.js @@ -16,7 +16,7 @@ angular.module('copayApp.services').factory('glideraService', function($http, $l * Development: 'testnet' * Production: 'livenet' */ - credentials.NETWORK = 'testnet'; + credentials.NETWORK = 'livenet'; if (credentials.NETWORK == 'testnet') { credentials.HOST = glidera.sandbox.host; From e4ec1ab3a8fb073cd56289b5690b01d67551bada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 12:30:43 -0300 Subject: [PATCH 15/18] add translations to confirm view --- src/js/controllers/confirm.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 6872e4e87..5e4ae0e3d 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -442,18 +442,18 @@ angular.module('copayApp.controllers').controller('confirmController', function( if ($scope.isGlidera) { $scope.get2faCode(function(err, sent) { if (err) { - popupService.showAlert('Error', 'Could not send confirmation code to your phone'); + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); return; } if (sent) { - var title = "Please, enter the code below"; - var message = "A SMS containing a confirmation code was sent to your phone."; + var title = gettextCatalog.getString("Please, enter the code below"); + var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); popupService.showPrompt(title, message, null, function(twoFaCode) { if (typeof twoFaCode == 'undefined') return; if ($scope.glideraBuy) { $scope.buyRequest(wallet, twoFaCode, function(err, data) { if (err) { - popupService.showAlert('Error', err); + popupService.showAlert(gettextCatalog.getString('Error'), err); return; } $scope.sendStatus = 'success'; @@ -465,7 +465,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( if ($scope.glideraSell) { $scope.sellRequest(wallet, twoFaCode, function(err, data) { if (err) { - popupService.showAlert('Error', err); + popupService.showAlert(gettextCatalog.getString('Error'), err); return; } $scope.sendStatus = 'success'; @@ -614,7 +614,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( walletService.getAddress(wallet, false, function(err, walletAddr) { if (err) { ongoingProcess.set('buyingBitcoin', false); - popupService.showAlert('Error', bwcError.cb(err, 'Could not create address')); + popupService.showAlert(gettextCatalog.getString('Error'), bwcError.cb(err, 'Could not create address')); return; } var data = { @@ -642,13 +642,13 @@ angular.module('copayApp.controllers').controller('confirmController', function( walletService.getAddress(wallet, null, function(err, refundAddress) { if (!refundAddress) { ongoingProcess.clear(); - popupService.showAlert('Error', bwcError.msg(err, 'Could not create address')); + popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, 'Could not create address')); return; } glideraService.getSellAddress($scope.glideraAccessToken, function(err, sellAddress) { if (!sellAddress || err) { ongoingProcess.clear(); - popupService.showAlert('Error', 'Could not get the destination bitcoin address'); + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get the destination bitcoin address')); return; } var amount = parseInt(($scope.sellPrice.qty * 100000000).toFixed(0)); @@ -676,27 +676,27 @@ angular.module('copayApp.controllers').controller('confirmController', function( walletService.createTx(wallet, txp, function(err, createdTxp) { ongoingProcess.clear(); if (err) { - popupService.showAlert('Error', err.message || bwcError.msg(err)); + popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); return; } walletService.prepare(wallet, function(err, password) { if (err) { ongoingProcess.clear(); - popupService.showAlert('Error', err.message || bwcError.msg(err)); + popupService.showAlert(gettextCatalog.getString('Error'), err.message || bwcError.msg(err)); return; } ongoingProcess.set('signingTx', true); walletService.publishTx(wallet, createdTxp, function(err, publishedTxp) { if (err) { ongoingProcess.clear(); - popupService.showAlert('Error', err.message ||  bwcError.msg(err)); + popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); return; } walletService.signTx(wallet, publishedTxp, password, function(err, signedTxp) { if (err) { ongoingProcess.clear(); - popupService.showAlert('Error', err.message ||  bwcError.msg(err)); + popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); walletService.removeTx(wallet, signedTxp, function(err) { if (err) $log.debug(err); }); @@ -714,7 +714,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( glideraService.sell($scope.glideraAccessToken, twoFaCode, data, function(err, data) { ongoingProcess.clear(); if (err) { - popupService.showAlert('Error', err.message ||  bwcError.msg(err)); + popupService.showAlert(gettextCatalog.getString('Error'), err.message ||  bwcError.msg(err)); return; } return cb(err, data) @@ -733,7 +733,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( price.qty = (toAmount * satToBtc).toFixed(8); glideraService.buyPrice($scope.glideraAccessToken, price, function(err, buyPrice) { if (err) { - popupService.showAlert('Error', 'Could not get exchange information. Please, try again'); + popupService.showAlert(gettextCatalog.getString('Error'), 'Could not get exchange information. Please, try again'); return; } $scope.buyPrice = buyPrice; @@ -747,7 +747,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( glideraService.sellPrice($scope.glideraAccessToken, price, function(err, sellPrice) { if (err) { - popupService.showAlert('Error', 'Could not get exchange information. Please, try again'); + popupService.showAlert(gettextCatalog.getString('Error'), 'Could not get exchange information. Please, try again'); return; } $scope.sellPrice = sellPrice; From a287c3736da91c0d3f0421a4f2d29ae54a16c188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 15:40:04 -0300 Subject: [PATCH 16/18] fix variables --- src/js/controllers/confirm.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 5e4ae0e3d..7b4e68663 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -450,7 +450,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); popupService.showPrompt(title, message, null, function(twoFaCode) { if (typeof twoFaCode == 'undefined') return; - if ($scope.glideraBuy) { + if ($scope.isGlidera == 'buy') { $scope.buyRequest(wallet, twoFaCode, function(err, data) { if (err) { popupService.showAlert(gettextCatalog.getString('Error'), err); @@ -462,7 +462,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); }) } - if ($scope.glideraSell) { + if ($scope.isGlidera == 'sell') { $scope.sellRequest(wallet, twoFaCode, function(err, data) { if (err) { popupService.showAlert(gettextCatalog.getString('Error'), err); From 254577f73dfdaf348451ea3481a0a9f8fda89e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 15:44:03 -0300 Subject: [PATCH 17/18] add padding to glidera success view --- src/sass/views/includes/txp-details.scss | 1 + www/views/confirm.html | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/sass/views/includes/txp-details.scss b/src/sass/views/includes/txp-details.scss index 7cc44a655..5d1d0f9ea 100644 --- a/src/sass/views/includes/txp-details.scss +++ b/src/sass/views/includes/txp-details.scss @@ -246,6 +246,7 @@ margin-bottom: 1.5rem; } .glidera-success { + padding: 20px; margin-top: 15px; span { font-size: 15px; diff --git a/www/views/confirm.html b/www/views/confirm.html index 7a4cd45e4..df2d81bab 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -139,10 +139,8 @@ Payment Sent Proposal Created
- A transfer has been initiated from your bank account - your bitcoins should arrive to your wallet in 2-4 business day - A transfer has been initiated to your bank account - should arrive in 4-6 business days + A transfer has been initiated from your bank account. Your bitcoins should arrive to your wallet in 2-4 business day + A transfer has been initiated to your bank account. Should arrive in 4-6 business days
From 83373726a89589f9ad3c1be59a021c4883040e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 5 Dec 2016 16:02:03 -0300 Subject: [PATCH 18/18] add translation to wallet selector title --- src/js/controllers/confirm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 7b4e68663..79e20f2ff 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -240,7 +240,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); $scope.showWalletSelector = function() { - $scope.walletSelectorTitle = $scope.isGlidera == 'buy' ? 'Receive in' : $scope.isGlidera == 'sell' ? 'Sell From' : 'Send from'; + $scope.walletSelectorTitle = $scope.isGlidera == 'buy' ? 'Receive in' : $scope.isGlidera == 'sell' ? 'Sell From' : gettextCatalog.getString('Send from'); if (!$scope.useSendMax && ($scope.insufficientFunds || $scope.noMatchingWallet)) return; $scope.showWallets = true; };