From f1cdaa838bb77708741d541002164ae8e891f505 Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Mon, 3 Mar 2025 06:56:20 -0500 Subject: [PATCH] rename payment sent message state property for seller --- .../main/java/haveno/core/trade/Trade.java | 8 +++--- .../core/trade/protocol/ProcessModel.java | 26 ++++++++++++------- .../core/trade/protocol/TradeProtocol.java | 3 ++- .../tasks/BuyerSendPaymentSentMessage.java | 6 ++--- ...yerSendPaymentSentMessageToArbitrator.java | 3 +-- .../BuyerSendPaymentSentMessageToSeller.java | 10 +++---- .../pendingtrades/PendingTradesViewModel.java | 10 +++---- .../steps/buyer/BuyerStep3View.java | 6 ++--- proto/src/main/proto/pb.proto | 2 +- 9 files changed, 41 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/haveno/core/trade/Trade.java b/core/src/main/java/haveno/core/trade/Trade.java index 6ad8e7aef33..3084aa77f18 100644 --- a/core/src/main/java/haveno/core/trade/Trade.java +++ b/core/src/main/java/haveno/core/trade/Trade.java @@ -735,9 +735,9 @@ public void initialize(ProcessModelServiceProvider serviceProvider) { // TODO: buyer's payment sent message state property became unsynced if shut down while awaiting ack from seller. fixed in v1.0.19 so this check can be removed? if (isBuyer()) { MessageState expectedState = getPaymentSentMessageState(); - if (expectedState != null && expectedState != processModel.getPaymentSentMessageStateProperty().get()) { - log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStateProperty().get()); - processModel.getPaymentSentMessageStateProperty().set(expectedState); + if (expectedState != null && expectedState != processModel.getPaymentSentMessageStatePropertySeller().get()) { + log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStatePropertySeller().get()); + processModel.getPaymentSentMessageStatePropertySeller().set(expectedState); } } @@ -2017,7 +2017,7 @@ public String getRole() { public MessageState getPaymentSentMessageState() { if (isPaymentReceived()) return MessageState.ACKNOWLEDGED; - if (processModel.getPaymentSentMessageStateProperty().get() == MessageState.ACKNOWLEDGED) return MessageState.ACKNOWLEDGED; + if (processModel.getPaymentSentMessageStatePropertySeller().get() == MessageState.ACKNOWLEDGED) return MessageState.ACKNOWLEDGED; switch (state) { case BUYER_SENT_PAYMENT_SENT_MSG: return MessageState.SENT; diff --git a/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java b/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java index 54aaa65d37b..d81c4f476ae 100644 --- a/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java +++ b/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java @@ -163,7 +163,7 @@ public class ProcessModel implements Model, PersistablePayload { // PaymentSentMessage. As well we do an automatic re-send in case it was not ACKed yet. // To enable that even after restart we persist the state. @Setter - private ObjectProperty paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); + private ObjectProperty paymentSentMessageStatePropertySeller = new SimpleObjectProperty<>(MessageState.UNDEFINED); @Setter private ObjectProperty paymentSentMessageStatePropertyArbitrator = new SimpleObjectProperty<>(MessageState.UNDEFINED); private ObjectProperty paymentAccountDecryptedProperty = new SimpleObjectProperty<>(false); @@ -203,7 +203,7 @@ public protobuf.ProcessModel toProtoMessage() { .setPubKeyRing(pubKeyRing.toProtoMessage()) .setUseSavingsWallet(useSavingsWallet) .setFundsNeededForTrade(fundsNeededForTrade) - .setPaymentSentMessageState(paymentSentMessageStateProperty.get().name()) + .setPaymentSentMessageStateSeller(paymentSentMessageStatePropertySeller.get().name()) .setPaymentSentMessageStateArbitrator(paymentSentMessageStatePropertyArbitrator.get().name()) .setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation) .setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation) @@ -240,9 +240,9 @@ public static ProcessModel fromProto(protobuf.ProcessModel proto, CoreProtoResol processModel.setTradeFeeAddress(ProtoUtil.stringOrNullFromProto(proto.getTradeFeeAddress())); processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress())); - String paymentSentMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageState()); - MessageState paymentSentMessageState = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateString); - processModel.setPaymentSentMessageState(paymentSentMessageState); + String paymentSentMessageStateSellerString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateSeller()); + MessageState paymentSentMessageStateSeller = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateSellerString); + processModel.setPaymentSentMessageStateSeller(paymentSentMessageStateSeller); String paymentSentMessageStateArbitratorString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateArbitrator()); MessageState paymentSentMessageStateArbitrator = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateArbitratorString); @@ -274,11 +274,11 @@ public NodeAddress getMyNodeAddress() { return getP2PService().getAddress(); } - void setPaymentSentAckMessage(AckMessage ackMessage) { + void setPaymentSentAckMessageSeller(AckMessage ackMessage) { MessageState messageState = ackMessage.isSuccess() ? MessageState.ACKNOWLEDGED : MessageState.FAILED; - setPaymentSentMessageState(messageState); + setPaymentSentMessageStateSeller(messageState); } void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) { @@ -288,8 +288,8 @@ void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) { setPaymentSentMessageStateArbitrator(messageState); } - public void setPaymentSentMessageState(MessageState paymentSentMessageStateProperty) { - this.paymentSentMessageStateProperty.set(paymentSentMessageStateProperty); + public void setPaymentSentMessageStateSeller(MessageState paymentSentMessageStateProperty) { + this.paymentSentMessageStatePropertySeller.set(paymentSentMessageStateProperty); if (tradeManager != null) { tradeManager.requestPersistence(); } @@ -302,6 +302,14 @@ public void setPaymentSentMessageStateArbitrator(MessageState paymentSentMessage } } + public boolean isPaymentSentMessageAckedBySeller() { + return paymentSentMessageStatePropertySeller.get() == MessageState.ACKNOWLEDGED; + } + + public boolean isPaymentSentMessageAckedByArbitrator() { + return paymentSentMessageStatePropertyArbitrator.get() == MessageState.ACKNOWLEDGED; + } + void setDepositTxSentAckMessage(AckMessage ackMessage) { MessageState messageState = ackMessage.isSuccess() ? MessageState.ACKNOWLEDGED : diff --git a/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java b/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java index 684dfb7c628..6a158bea7aa 100644 --- a/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java +++ b/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java @@ -652,11 +652,12 @@ private void onAckMessage(AckMessage ackMessage, NodeAddress sender) { // handle ack for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) { if (trade.getTradePeer(sender) == trade.getSeller()) { - processModel.setPaymentSentAckMessage(ackMessage); + processModel.setPaymentSentAckMessageSeller(ackMessage); trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG); processModel.getTradeManager().requestPersistence(); } else if (trade.getTradePeer(sender) == trade.getArbitrator()) { processModel.setPaymentSentAckMessageArbitrator(ackMessage); + processModel.getTradeManager().requestPersistence(); } else if (!ackMessage.isSuccess()) { String err = "Received AckMessage with error state for " + ackMessage.getSourceMsgClassName() + " from "+ sender + " with tradeId " + trade.getId() + " and errorMessage=" + ackMessage.getErrorMessage(); log.warn(err); diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java index f060effe78b..bc064399a37 100644 --- a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java +++ b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java @@ -170,7 +170,7 @@ private void cleanup() { timer.stop(); } if (listener != null) { - processModel.getPaymentSentMessageStateProperty().removeListener(listener); + processModel.getPaymentSentMessageStatePropertySeller().removeListener(listener); } } @@ -194,8 +194,8 @@ private void tryToSendAgainLater() { if (resendCounter == 0) { listener = (observable, oldValue, newValue) -> onMessageStateChange(newValue); - processModel.getPaymentSentMessageStateProperty().addListener(listener); - onMessageStateChange(processModel.getPaymentSentMessageStateProperty().get()); + processModel.getPaymentSentMessageStatePropertySeller().addListener(listener); + onMessageStateChange(processModel.getPaymentSentMessageStatePropertySeller().get()); } // first re-send is after 2 minutes, then increase the delay exponentially diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java index cc4113e3422..cd3098737af 100644 --- a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java +++ b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java @@ -18,7 +18,6 @@ package haveno.core.trade.protocol.tasks; import haveno.common.taskrunner.TaskRunner; -import haveno.core.network.MessageState; import haveno.core.trade.Trade; import haveno.core.trade.protocol.TradePeer; import lombok.EqualsAndHashCode; @@ -59,6 +58,6 @@ protected void setStateArrived() { @Override protected boolean isAckedByReceiver() { - return trade.getProcessModel().getPaymentSentMessageStatePropertyArbitrator().get() == MessageState.ACKNOWLEDGED; + return trade.getProcessModel().isPaymentSentMessageAckedByArbitrator(); } } diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java index caf402be0a2..825220d5b4a 100644 --- a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java +++ b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java @@ -40,25 +40,25 @@ protected TradePeer getReceiver() { @Override protected void setStateSent() { - trade.getProcessModel().setPaymentSentMessageState(MessageState.SENT); + trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.SENT); super.setStateSent(); } @Override protected void setStateArrived() { - trade.getProcessModel().setPaymentSentMessageState(MessageState.ARRIVED); + trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.ARRIVED); super.setStateArrived(); } @Override protected void setStateStoredInMailbox() { - trade.getProcessModel().setPaymentSentMessageState(MessageState.STORED_IN_MAILBOX); + trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.STORED_IN_MAILBOX); super.setStateStoredInMailbox(); } @Override protected void setStateFault() { - trade.getProcessModel().setPaymentSentMessageState(MessageState.FAILED); + trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.FAILED); super.setStateFault(); } @@ -72,6 +72,6 @@ protected void onFault(String errorMessage, TradeMessage message) { @Override protected boolean isAckedByReceiver() { - return trade.getState().ordinal() >= Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG.ordinal(); + return trade.getProcessModel().isPaymentSentMessageAckedBySeller(); } } diff --git a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java index 41881c58be3..b9936236c68 100644 --- a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java +++ b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java @@ -100,7 +100,7 @@ enum SellerState implements State { private final ObjectProperty buyerState = new SimpleObjectProperty<>(); private final ObjectProperty sellerState = new SimpleObjectProperty<>(); @Getter - private final ObjectProperty messageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); + private final ObjectProperty paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); private Subscription tradeStateSubscription; private Subscription paymentAccountDecryptedSubscription; private Subscription payoutStateSubscription; @@ -186,7 +186,7 @@ public void onSelectedItemChanged(PendingTradesListItem selectedItem) { if (messageStateSubscription != null) { messageStateSubscription.unsubscribe(); - messageStateProperty.set(MessageState.UNDEFINED); + paymentSentMessageStateProperty.set(MessageState.UNDEFINED); } if (selectedItem != null) { @@ -200,7 +200,7 @@ public void onSelectedItemChanged(PendingTradesListItem selectedItem) { payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> { onPayoutStateChanged(state); }); - messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStateProperty(), this::onMessageStateChanged); + messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStatePropertySeller(), this::onPaymentSentMessageStateChanged); } } } @@ -215,8 +215,8 @@ private void refresh() { }); } - private void onMessageStateChanged(MessageState messageState) { - messageStateProperty.set(messageState); + private void onPaymentSentMessageStateChanged(MessageState messageState) { + paymentSentMessageStateProperty.set(messageState); } /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java index 57fda229f3e..b28eda4a108 100644 --- a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java +++ b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java @@ -52,7 +52,7 @@ public BuyerStep3View(PendingTradesViewModel model) { public void activate() { super.activate(); - model.getMessageStateProperty().addListener(messageStateChangeListener); + model.getPaymentSentMessageStateProperty().addListener(messageStateChangeListener); updateMessageStateInfo(); } @@ -60,7 +60,7 @@ public void activate() { public void deactivate() { super.deactivate(); - model.getMessageStateProperty().removeListener(messageStateChangeListener); + model.getPaymentSentMessageStateProperty().removeListener(messageStateChangeListener); } @@ -87,7 +87,7 @@ protected String getInfoText() { } private void updateMessageStateInfo() { - MessageState messageState = model.getMessageStateProperty().get(); + MessageState messageState = model.getPaymentSentMessageStateProperty().get(); textFieldWithIcon.setText(Res.get("message.state." + messageState.name())); Label iconLabel = textFieldWithIcon.getIconLabel(); switch (messageState) { diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index 04c32ee8dcb..64360523334 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -1568,7 +1568,7 @@ message ProcessModel { bytes payout_tx_signature = 4; bool use_savings_wallet = 5; int64 funds_needed_for_trade = 6; - string payment_sent_message_state = 7; + string payment_sent_message_state_seller = 7; string payment_sent_message_state_arbitrator = 8; bytes maker_signature = 9; TradePeer maker = 10;