123 lines
3.7 KiB
JavaScript
123 lines
3.7 KiB
JavaScript
'use strict';
|
|
|
|
angular.module('copayApp.controllers').controller('coinbaseController', function($scope, $timeout, $ionicModal, $ionicHistory, $log, coinbaseService, lodash, platformInfo, ongoingProcess, popupService, externalLinkService) {
|
|
|
|
var isNW = platformInfo.isNW;
|
|
var isCordova = platformInfo.isCordova;
|
|
|
|
var init = function() {
|
|
$scope.currency = coinbaseService.getAvailableCurrency();
|
|
coinbaseService.getStoredToken(function(at) {
|
|
$scope.accessToken = at;
|
|
|
|
// Update Access Token if necessary
|
|
$scope.loading = true;
|
|
coinbaseService.init(function(err, data) {
|
|
$scope.loading = false;
|
|
if (err || lodash.isEmpty(data)) {
|
|
if (err) {
|
|
$log.error(err);
|
|
var errorId = err.errors ? err.errors[0].id : null;
|
|
err = err.errors ? err.errors[0].message : err;
|
|
popupService.showAlert('Error connecting to Coinbase', err, function() {
|
|
if (errorId == 'revoked_token') {
|
|
coinbaseService.logout(function() {});
|
|
}
|
|
$ionicHistory.goBack();
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Show rates
|
|
coinbaseService.buyPrice(data.accessToken, $scope.currency, function(err, b) {
|
|
$scope.buyPrice = b.data || null;
|
|
});
|
|
coinbaseService.sellPrice(data.accessToken, $scope.currency, function(err, s) {
|
|
$scope.sellPrice = s.data || null;
|
|
});
|
|
|
|
// Updating accessToken and accountId
|
|
$timeout(function() {
|
|
$scope.accessToken = data.accessToken;
|
|
$scope.accountId = data.accountId;
|
|
$scope.updateTransactions();
|
|
$scope.$apply();
|
|
}, 100);
|
|
});
|
|
});
|
|
};
|
|
|
|
$scope.updateTransactions = function() {
|
|
$log.debug('Getting transactions...');
|
|
$scope.pendingTransactions = { data: {} };
|
|
coinbaseService.getPendingTransactions($scope.pendingTransactions);
|
|
};
|
|
|
|
this.openAuthenticateWindow = function() {
|
|
var oauthUrl = this.getAuthenticateUrl();
|
|
if (!isNW) {
|
|
externalLinkService.open(oauthUrl);
|
|
} else {
|
|
var self = this;
|
|
var gui = require('nw.gui');
|
|
gui.Window.open(oauthUrl, {
|
|
focus: true,
|
|
position: 'center'
|
|
}, function(new_win) {
|
|
new_win.on('loaded', function() {
|
|
var title = new_win.window.document.title;
|
|
$timeout(function() {
|
|
if (title.indexOf('Coinbase') == -1) {
|
|
$scope.code = title;
|
|
self.submitOauthCode($scope.code);
|
|
new_win.close();
|
|
}
|
|
}, 100);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
this.getAuthenticateUrl = function() {
|
|
$scope.showOauthForm = isCordova || isNW ? false : true;
|
|
return coinbaseService.getOauthCodeUrl();
|
|
};
|
|
|
|
this.submitOauthCode = function(code) {
|
|
var self = this;
|
|
ongoingProcess.set('connectingCoinbase', true);
|
|
coinbaseService.getToken(code, function(err, accessToken) {
|
|
ongoingProcess.set('connectingCoinbase', false);
|
|
if (err) {
|
|
popupService.showAlert('Error connecting to Coinbase', err);
|
|
return;
|
|
}
|
|
$scope.accessToken = accessToken;
|
|
init();
|
|
});
|
|
};
|
|
|
|
this.openTxModal = function(tx) {
|
|
$scope.tx = tx;
|
|
|
|
$ionicModal.fromTemplateUrl('views/modals/coinbase-tx-details.html', {
|
|
scope: $scope,
|
|
animation: 'slide-in-up'
|
|
}).then(function(modal) {
|
|
$scope.modal = modal;
|
|
$scope.modal.show();
|
|
});
|
|
};
|
|
|
|
var self = this;
|
|
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
|
if (data.stateParams && data.stateParams.code) {
|
|
coinbaseService.getStoredToken(function(at) {
|
|
if (!at) self.submitOauthCode(data.stateParams.code);
|
|
});
|
|
} else {
|
|
init();
|
|
}
|
|
});
|
|
});
|