diff --git a/core/src/main/java/io/bitsquare/trade/BuyerTrade.java b/core/src/main/java/io/bitsquare/trade/BuyerTrade.java index 3fd76ed79f..3732863963 100644 --- a/core/src/main/java/io/bitsquare/trade/BuyerTrade.java +++ b/core/src/main/java/io/bitsquare/trade/BuyerTrade.java @@ -55,6 +55,15 @@ public abstract class BuyerTrade extends Trade { ((BuyerProtocol) tradeProtocol).onFiatPaymentStarted(resultHandler, errorMessageHandler); } + @Override + public void reSendConfirmation() { + if (state == Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG) { + log.info("reSendConfirmation onFiatPaymentStarted"); + onFiatPaymentStarted(() -> log.debug("onFiatPaymentStarted succeeded"), + log::warn); + } + } + /////////////////////////////////////////////////////////////////////////////////////////// // Setter for Mutable objects diff --git a/core/src/main/java/io/bitsquare/trade/SellerTrade.java b/core/src/main/java/io/bitsquare/trade/SellerTrade.java index 8ba6225ff0..9c60dc19c5 100644 --- a/core/src/main/java/io/bitsquare/trade/SellerTrade.java +++ b/core/src/main/java/io/bitsquare/trade/SellerTrade.java @@ -55,6 +55,14 @@ public abstract class SellerTrade extends Trade { ((SellerProtocol) tradeProtocol).onFiatPaymentReceived(resultHandler, errorMessageHandler); } + @Override + public void reSendConfirmation() { + if (state == State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG) { + log.info("reSendConfirmation onFiatPaymentReceived"); + onFiatPaymentReceived(() -> log.debug("onFiatPaymentReceived succeeded"), + log::warn); + } + } /////////////////////////////////////////////////////////////////////////////////////////// // Setter for Mutable objects diff --git a/core/src/main/java/io/bitsquare/trade/Trade.java b/core/src/main/java/io/bitsquare/trade/Trade.java index 2432f5a0ca..53700a2d9f 100644 --- a/core/src/main/java/io/bitsquare/trade/Trade.java +++ b/core/src/main/java/io/bitsquare/trade/Trade.java @@ -238,8 +238,12 @@ public abstract class Trade implements Tradable, Model { if (decryptedMsgWithPubKey != null) { tradeProtocol.applyMailboxMessage(decryptedMsgWithPubKey, this); } + + reSendConfirmation(); } + public abstract void reSendConfirmation(); + protected void initStateProperties() { stateProperty = new SimpleObjectProperty<>(state); disputeStateProperty = new SimpleObjectProperty<>(disputeState); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java index 9497909b3b..52aecc40fd 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsOffererProtocol.java @@ -144,22 +144,32 @@ public class BuyerAsOffererProtocol extends TradeProtocol implements BuyerProtoc // User clicked the "bank transfer started" button @Override public void onFiatPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { - buyerAsOffererTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED); + if (buyerAsOffererTrade.getState().ordinal() <= Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG.ordinal()) { + if (buyerAsOffererTrade.getState() == Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG) + log.warn("onFiatPaymentStarted called twice. " + + "That is expected if the app starts up and the other peer has still not continued."); - TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsOffererTrade, - () -> { - resultHandler.handleResult(); - handleTaskRunnerSuccess("onFiatPaymentStarted"); - }, - (errorMessage) -> { - errorMessageHandler.handleErrorMessage(errorMessage); - handleTaskRunnerFault(errorMessage); - }); - taskRunner.addTasks( - VerifyTakeOfferFeePayment.class, - SendFiatTransferStartedMessage.class - ); - taskRunner.run(); + buyerAsOffererTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED); + + TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsOffererTrade, + () -> { + resultHandler.handleResult(); + handleTaskRunnerSuccess("onFiatPaymentStarted"); + }, + (errorMessage) -> { + errorMessageHandler.handleErrorMessage(errorMessage); + handleTaskRunnerFault(errorMessage); + }); + taskRunner.addTasks( + VerifyTakeOfferFeePayment.class, + SendFiatTransferStartedMessage.class + ); + taskRunner.run(); + } else { + log.warn("onFiatPaymentStarted called twice. " + + "That should not happen.\n" + + "state=" + buyerAsOffererTrade.getState()); + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java index b787cb5ff6..f2ff132b7b 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/BuyerAsTakerProtocol.java @@ -133,22 +133,32 @@ public class BuyerAsTakerProtocol extends TradeProtocol implements BuyerProtocol // User clicked the "bank transfer started" button @Override public void onFiatPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { - buyerAsTakerTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED); + if (buyerAsTakerTrade.getState().ordinal() <= Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG.ordinal()) { + if (buyerAsTakerTrade.getState() == Trade.State.BUYER_SENT_FIAT_PAYMENT_INITIATED_MSG) + log.warn("onFiatPaymentStarted called twice. " + + "That is expected if the app starts up and the other peer has still not continued."); - TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsTakerTrade, - () -> { - resultHandler.handleResult(); - handleTaskRunnerSuccess("onFiatPaymentStarted"); - }, - (errorMessage) -> { - errorMessageHandler.handleErrorMessage(errorMessage); - handleTaskRunnerFault(errorMessage); - }); - taskRunner.addTasks( - VerifyOfferFeePayment.class, - SendFiatTransferStartedMessage.class - ); - taskRunner.run(); + buyerAsTakerTrade.setState(Trade.State.BUYER_CONFIRMED_FIAT_PAYMENT_INITIATED); + + TradeTaskRunner taskRunner = new TradeTaskRunner(buyerAsTakerTrade, + () -> { + resultHandler.handleResult(); + handleTaskRunnerSuccess("onFiatPaymentStarted"); + }, + (errorMessage) -> { + errorMessageHandler.handleErrorMessage(errorMessage); + handleTaskRunnerFault(errorMessage); + }); + taskRunner.addTasks( + VerifyOfferFeePayment.class, + SendFiatTransferStartedMessage.class + ); + taskRunner.run(); + } else { + log.warn("onFiatPaymentStarted called twice. " + + "That should not happen.\n" + + "state=" + buyerAsTakerTrade.getState()); + } } diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java index a25503a0db..5a25d19c5d 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsOffererProtocol.java @@ -162,24 +162,34 @@ public class SellerAsOffererProtocol extends TradeProtocol implements SellerProt // User clicked the "bank transfer received" button, so we release the funds for pay out @Override public void onFiatPaymentReceived(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { - sellerAsOffererTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT); + if (sellerAsOffererTrade.getState().ordinal() <= Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG.ordinal()) { + if (sellerAsOffererTrade.getState() == Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG) + log.warn("onFiatPaymentReceived called twice. " + + "That is expected if the app starts up and the other peer has still not continued."); - TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsOffererTrade, - () -> { - resultHandler.handleResult(); - handleTaskRunnerSuccess("onFiatPaymentReceived"); - }, - (errorMessage) -> { - errorMessageHandler.handleErrorMessage(errorMessage); - handleTaskRunnerFault(errorMessage); - }); + sellerAsOffererTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT); - taskRunner.addTasks( - VerifyTakeOfferFeePayment.class, - SignPayoutTx.class, - SendFinalizePayoutTxRequest.class - ); - taskRunner.run(); + TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsOffererTrade, + () -> { + resultHandler.handleResult(); + handleTaskRunnerSuccess("onFiatPaymentReceived"); + }, + (errorMessage) -> { + errorMessageHandler.handleErrorMessage(errorMessage); + handleTaskRunnerFault(errorMessage); + }); + + taskRunner.addTasks( + VerifyTakeOfferFeePayment.class, + SignPayoutTx.class, + SendFinalizePayoutTxRequest.class + ); + taskRunner.run(); + } else { + log.warn("onFiatPaymentReceived called twice. " + + "That should not happen.\n" + + "state=" + sellerAsOffererTrade.getState()); + } } private void handle(PayoutTxFinalizedMessage tradeMessage, NodeAddress sender) { diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java index b5f4cb593e..481975f771 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/SellerAsTakerProtocol.java @@ -160,24 +160,34 @@ public class SellerAsTakerProtocol extends TradeProtocol implements SellerProtoc // User clicked the "bank transfer received" button, so we release the funds for pay out @Override public void onFiatPaymentReceived(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { - sellerAsTakerTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT); + if (sellerAsTakerTrade.getState().ordinal() <= Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG.ordinal()) { + if (sellerAsTakerTrade.getState() == Trade.State.SELLER_SENT_FIAT_PAYMENT_RECEIPT_MSG) + log.warn("onFiatPaymentReceived called twice. " + + "That is expected if the app starts up and the other peer has still not continued."); - TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsTakerTrade, - () -> { - resultHandler.handleResult(); - handleTaskRunnerSuccess("onFiatPaymentReceived"); - }, - (errorMessage) -> { - errorMessageHandler.handleErrorMessage(errorMessage); - handleTaskRunnerFault(errorMessage); - }); - - taskRunner.addTasks( - VerifyOfferFeePayment.class, - SignPayoutTx.class, - SendFinalizePayoutTxRequest.class - ); - taskRunner.run(); + sellerAsTakerTrade.setState(Trade.State.SELLER_CONFIRMED_FIAT_PAYMENT_RECEIPT); + + TradeTaskRunner taskRunner = new TradeTaskRunner(sellerAsTakerTrade, + () -> { + resultHandler.handleResult(); + handleTaskRunnerSuccess("onFiatPaymentReceived"); + }, + (errorMessage) -> { + errorMessageHandler.handleErrorMessage(errorMessage); + handleTaskRunnerFault(errorMessage); + }); + + taskRunner.addTasks( + VerifyOfferFeePayment.class, + SignPayoutTx.class, + SendFinalizePayoutTxRequest.class + ); + taskRunner.run(); + } else { + log.warn("onFiatPaymentReceived called twice. " + + "That should not happen.\n" + + "state=" + sellerAsTakerTrade.getState()); + } } private void handle(PayoutTxFinalizedMessage tradeMessage, NodeAddress sender) {