From 62fe6ce628db07e40d144342c6b519a7c5a21b01 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Thu, 31 Jul 2014 11:15:57 -0700 Subject: [PATCH] paypro: try to find existing tx proposals. --- js/controllers/send.js | 27 +++++++++++++++++++++++++-- js/models/core/Wallet.js | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/js/controllers/send.js b/js/controllers/send.js index 06ca40abb..3a48c33d2 100644 --- a/js/controllers/send.js +++ b/js/controllers/send.js @@ -88,8 +88,31 @@ angular.module('copayApp.controllers').controller('SendController', var uri = address.indexOf('bitcoin:') === 0 && copay.HDPath.parseBitcoinURI(address); - if (uri && uri.merchant) { - w.createTx(uri.merchant, commentText, done); + if (uri.merchant) { + var existing; + + Object.keys(w.txProposals.txps).forEach(function(ntxid, i, obj) { + var txp = w.txProposals.txps[ntxid]; + if (!txp) return; + var total = typeof txp.merchant.total !== 'string' + ? txp.merchant.total.toString(10) + : txp.merchant.total; + if (txp.merchant.request_url === uri.merchant && total === amount) { + existing = txp; + obj.length = 0; + } + }); + + if (existing) { + var tx = existing.builder.build(); + if (!tx.isComplete()) { + $scope.sign(existing.getID()); + } else { + done(existing.getID(), existing.merchant.pr.ca); + } + } else { + w.createTx(uri.merchant, commentText, done); + } } else { w.createTx(address, amount, commentText, done); } diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index 21ac51a15..3d37b9cda 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -976,6 +976,7 @@ Wallet.prototype.receivePaymentRequest = function(options, pr, cb) { signature: sig, ca: ca, }, + request_url: options.uri || options.url, total: bignum('0').toString(10) };