Refactor incomingData

This commit is contained in:
Jean-Baptiste Dominguez 2018-08-31 18:37:04 +09:00
commit ddd867092c
6 changed files with 90 additions and 55 deletions

View file

@ -21,16 +21,8 @@ angular.module('copayApp.controllers').controller('addressbookViewController', f
});
$scope.sendTo = function() {
var to = '';
if ($scope.addressbookEntry.coin == 'bch') {
var a = 'bitcoincash:' + $scope.addressbookEntry.address;
to = bitcoinCashJsService.readAddress(a).legacy;
} else {
to = $scope.addressbookEntry.address;
}
var stateParams = {
toAddress: to,
data: $scope.addressbookEntry.address,
toName: $scope.addressbookEntry.name,
toEmail: $scope.addressbookEntry.email,
coin: $scope.addressbookEntry.coin

View file

@ -1,23 +1,28 @@
'use strict';
angular.module('copayApp.directives')
.directive('incomingDataMenu', function($timeout, $rootScope, $state, externalLinkService) {
.directive('incomingDataMenu', function($timeout, $rootScope, $state, externalLinkService, sendFlowService, bitcoinCashJsService) {
return {
restrict: 'E',
templateUrl: 'views/includes/incomingDataMenu.html',
link: function(scope, element, attrs) {
$rootScope.$on('incomingDataMenu.showMenu', function(event, data) {
$timeout(function() {
scope.data = data.data;
scope.type = data.type;
scope.showMenu = true;
scope.https = false;
scope.data = data;
if (scope.type === 'url') {
if (scope.data.indexOf('https://') === 0) {
scope.https = true;
}
if (scope.data.parsed.privateKey) {
scope.type = "privateKey";
} else if (scope.data.parsed.url) {
scope.type = "url";
} else if (scope.data.parsed.publicAddress) {
scope.type = "bitcoinAddress";
var prefix = scope.data.parsed.isTestnet ? 'bchtest:' : 'bitcoincash:';
scope.data.toAddress = (prefix + scope.data.parsed.publicAddress.cashAddr) || scope.data.parsed.publicAddress.legacy || scope.data.parsed.publicAddress.bitpay;
} else {
scope.type = "text";
}
scope.showMenu = true;
});
});
scope.hide = function() {
@ -28,18 +33,9 @@ angular.module('copayApp.directives')
externalLinkService.open(url);
};
scope.sendPaymentToAddress = function(bitcoinAddress) {
var noPrefixInAddress = 0;
if (bitcoinAddress.toLowerCase().indexOf('bitcoin') < 0) {
noPrefixInAddress = 1;
}
scope.showMenu = false;
$state.go('tabs.send').then(function() {
$timeout(function() {
$state.transitionTo('tabs.send.amount', {
toAddress: bitcoinAddress,
noPrefix: noPrefixInAddress
});
}, 50);
sendFlowService.start({
data: bitcoinAddress
});
};
scope.addToAddressBook = function(bitcoinAddress) {

View file

@ -8,9 +8,7 @@ angular.module('copayApp.services').factory('incomingData', function(externalLin
$rootScope.$broadcast('incomingDataMenu.showMenu', data);
};
root.redir = function(data, serviceId, serviceData) {
var originalAddress = null;
var noPrefixInAddress = 0;
root.redir = function(data) {
var allParsed = bitcoinUriService.parse(data);
if (allParsed.isValid && allParsed.isTestnet) {
@ -19,7 +17,49 @@ angular.module('copayApp.services').factory('incomingData', function(externalLin
gettextCatalog.getString('Testnet is not supported.')
);
return false;
} else {
/**
* Hardcore fix, but the legacy code in the bottom needs to be removed.
* BitcoinUriService is making the job of this.
* incomingData should be an intermediate to redirect either to the sendFlow
* or to import a wallet for example.
*/
scannerService.pausePreview();
/**
* Strategy for the action
*/
if (
!allParsed.isValid
|| allParsed.privateKey
|| (sendFlowService.state.isEmpty() && !allParsed.url && !allParsed.amount)
) {
root.showMenu({
original: data,
parsed: allParsed
});
} else {
var state = sendFlowService.state.getClone();
state.data = data;
sendFlowService.start(state, function onError(err) {
/**
* OnError, open the menu (link not validated)
*/
root.showMenu({
original: data,
parsed: allParsed
});
});
}
}
// No need to go more far
return;
/**
* The legacy code in the bottom needs to be checked and removed if any case is forgotten.
*/
if (data.toLowerCase().indexOf('bitcoin') < 0) {
noPrefixInAddress = 1;

View file

@ -29,14 +29,18 @@ angular
map: map,
pop: pop,
push: push,
isEmpty: isEmpty
};
return service;
function init(params) {
clear();
if (params) {
push(params);
}
}
function clear() {
console.log("sendFlow clear()");
@ -94,6 +98,10 @@ angular
clearCurrent();
map(params);
};
function isEmpty() {
return service.previousStates.length == 0;
};
};
})();

View file

@ -30,7 +30,7 @@ angular
/**
* Clears all previous state
*/
function start(params) {
function start(params, onError) {
console.log('start()');
if (params && params.data) {
@ -101,11 +101,14 @@ angular
}
if (res.amount) {
if (res.currency) {
params.currency = res.currency;
}
params.amount = res.amount;
}
if (res.publicAddress) {
var prefix = res.testnet ? 'bchtest:' : 'bitcoincash:';
var prefix = res.isTestnet ? 'bchtest:' : 'bitcoincash:';
params.displayAddress = (prefix + res.publicAddress.cashAddr) || res.publicAddress.legacy || res.publicAddress.bitpay;
params.toAddress = bitcoinCashJsService.readAddress(params.displayAddress).legacy;
}
@ -113,7 +116,9 @@ angular
_next();
}
} else {
_next();
if (onError) {
onError();
}
}
} else {
_next();
@ -122,13 +127,7 @@ angular
// Next used for sync the async task
function _next() {
/**
* Init the state if params is defined
*/
if (params) {
sendFlowStateService.init(params);
}
/**
* Routing strategy to -> send-flow-router.service

View file

@ -9,21 +9,21 @@
<img src="img/icon-bitcoin-small.svg">
</div>
<div class="incoming-data-menu__url__text">
{{data}}
{{data.original}}
</div>
</div>
</div>
<a class="incoming-data-menu__item item item-icon-right" ng-click="addToAddressBook(data)">
<a class="incoming-data-menu__item item item-icon-right" ng-click="addToAddressBook(data.toAddress)">
<img src="img/icon-contacts.svg">
<div class="incoming-data-menu__item__text" translate>Add as a contact</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__item item item-icon-right" ng-click="sendPaymentToAddress(data)">
<a class="incoming-data-menu__item item item-icon-right" ng-click="sendPaymentToAddress(data.toAddress)">
<img src="img/icon-send-alt.svg">
<div class="incoming-data-menu__item__text" translate>Send payment to this address</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data">
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data.original">
<img src="img/icon-paperclip.svg">
<div class="incoming-data-menu__item__text" translate>Copy to clipboard</div>
<i class="icon bp-arrow-right"></i>
@ -38,11 +38,11 @@
<div class="incoming-data-menu__header" translate>Text</div>
<div class="incoming-data-menu__url">
<div class="incoming-data-menu__url__text" style="border: 0;">
{{data}}
{{data.original}}
</div>
</div>
</div>
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data">
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data.original">
<img src="img/icon-paperclip.svg">
<div class="incoming-data-menu__item__text" translate>Copy to clipboard</div>
<i class="icon bp-arrow-right"></i>
@ -57,16 +57,16 @@
<div class="incoming-data-menu__header" translate>Private Key</div>
<div class="incoming-data-menu__url">
<div class="incoming-data-menu__url__text" style="border: 0;">
{{data}}
{{data.original}}
</div>
</div>
</div>
<a class="incoming-data-menu__item item item-icon-right" ng-click="scanPaperWallet(data)">
<a class="incoming-data-menu__item item item-icon-right" ng-click="scanPaperWallet(data.original)">
<img src="img/icon-import.svg">
<div class="incoming-data-menu__item__text" translate>Sweep paper wallet</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data">
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data.original">
<img src="img/icon-paperclip.svg">
<div class="incoming-data-menu__item__text" translate>Copy to clipboard</div>
<i class="icon bp-arrow-right"></i>
@ -81,16 +81,16 @@
<div class="incoming-data-menu__header" translate>URL</div>
<div class="incoming-data-menu__url">
<div class="incoming-data-menu__url__text" style="border: 0;">
{{data}}
{{data.original}}
</div>
</div>
</div>
<a class="incoming-data-menu__item item item-icon-right" ng-click="goToUrl(data)">
<a class="incoming-data-menu__item item item-icon-right" ng-click="goToUrl(data.original)">
<img src="img/icon-link-external.svg">
<div class="incoming-data-menu__item__text" translate>Open in web browser</div>
<i class="icon bp-arrow-right"></i>
</a>
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data">
<a class="incoming-data-menu__item item item-icon-right" copy-to-clipboard="data.original">
<img src="img/icon-paperclip.svg">
<div class="incoming-data-menu__item__text" translate>Copy to clipboard</div>
<i class="icon bp-arrow-right"></i>