diff --git a/public/views/tab-send.html b/public/views/tab-send.html
index 340dca1fc..bfa7e3867 100644
--- a/public/views/tab-send.html
+++ b/public/views/tab-send.html
@@ -13,7 +13,7 @@
diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js
index 7ee23f697..4e59e2d54 100644
--- a/src/js/controllers/tab-send.js
+++ b/src/js/controllers/tab-send.js
@@ -1,6 +1,6 @@
'use strict';
-angular.module('copayApp.controllers').controller('tabSendController', function($scope, $ionicModal, $log, $timeout, addressbookService, profileService, lodash, $state, walletService) {
+angular.module('copayApp.controllers').controller('tabSendController', function($scope, $ionicModal, $log, $timeout, addressbookService, profileService, lodash, $state, walletService, bitcore) {
var originalList;
@@ -41,9 +41,73 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
});
};
+
+ var setFromUri = function(uri) {
+
+ function sanitizeUri(uri) {
+ // Fixes when a region uses comma to separate decimals
+ var regex = /[\?\&]amount=(\d+([\,\.]\d+)?)/i;
+ var match = regex.exec(uri);
+ if (!match || match.length === 0) {
+ return uri;
+ }
+ var value = match[0].replace(',', '.');
+ var newUri = uri.replace(regex, value);
+ return newUri;
+ };
+
+ var satToUnit = 1 / this.unitToSatoshi;
+
+ // URI extensions for Payment Protocol with non-backwards-compatible request
+ if ((/^bitcoin:\?r=[\w+]/).exec(uri)) {
+ uri = decodeURIComponent(uri.replace('bitcoin:?r=', ''));
+ setFromPayPro(uri, function(err) {
+ if (err) {
+ return err;
+ }
+ });
+ } else {
+ uri = sanitizeUri(uri);
+
+ if (!bitcore.URI.isValid(uri)) {
+ return uri;
+ }
+ var parsed = new bitcore.URI(uri);
+
+ var addr = parsed.address ? parsed.address.toString() : '';
+ var message = parsed.message;
+
+ var amount = parsed.amount ?
+ (parsed.amount.toFixed(0) * satToUnit).toFixed(this.unitDecimals) : 0;
+
+ if (parsed.r) {
+ setFromPayPro(parsed.r, function(err) {
+ if (err && addr && amount) {
+ // TODO
+ $state.go('confirm', {toAmount: amount, toAddress: addr, message:message})
+ return addr;
+ }
+ });
+ } else {
+ //
+ $state.go('confirm', {toAmount: amount, toAddress: addr, message:message})
+ return addr;
+ }
+ }
+
+ };
+
+
+
$scope.findContact = function(search, opts) {
opts = opts || {};
+ if (search.indexOf('bitcoin:') === 0) {
+ return setFromUri(search);
+ } else if (/^https?:\/\//.test(search)) {
+ return setFromPayPro(search);
+ }
+
if (!search || search.length < 2) {
$scope.list = originalList;
$timeout(function() {
@@ -148,5 +212,6 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
$scope.addressbookModal.remove();
});
+ $scope.$watch('')
});
diff --git a/src/js/routes.js b/src/js/routes.js
index 14cff17a8..b5907cce0 100644
--- a/src/js/routes.js
+++ b/src/js/routes.js
@@ -356,7 +356,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}
})
.state('send.confirm', {
- url: '/confirm/:toAddress/:toName/:toAmount',
+ url: '/confirm/:toAddress/:toName/:toAmount/:message',
views: {
'send': {
templateUrl: 'views/confirm.html'