rename payment sent message state property for seller

This commit is contained in:
woodser 2025-03-03 06:56:20 -05:00 committed by woodser
parent 00a2a7c2b7
commit 84d8a17ab4
9 changed files with 41 additions and 33 deletions

View file

@ -735,9 +735,9 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
// 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? // 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()) { if (isBuyer()) {
MessageState expectedState = getPaymentSentMessageState(); MessageState expectedState = getPaymentSentMessageState();
if (expectedState != null && expectedState != processModel.getPaymentSentMessageStateProperty().get()) { if (expectedState != null && expectedState != processModel.getPaymentSentMessageStatePropertySeller().get()) {
log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStateProperty().get()); log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStatePropertySeller().get());
processModel.getPaymentSentMessageStateProperty().set(expectedState); processModel.getPaymentSentMessageStatePropertySeller().set(expectedState);
} }
} }
@ -2022,7 +2022,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
public MessageState getPaymentSentMessageState() { public MessageState getPaymentSentMessageState() {
if (isPaymentReceived()) return MessageState.ACKNOWLEDGED; 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) { switch (state) {
case BUYER_SENT_PAYMENT_SENT_MSG: case BUYER_SENT_PAYMENT_SENT_MSG:
return MessageState.SENT; return MessageState.SENT;

View file

@ -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. // 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. // To enable that even after restart we persist the state.
@Setter @Setter
private ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); private ObjectProperty<MessageState> paymentSentMessageStatePropertySeller = new SimpleObjectProperty<>(MessageState.UNDEFINED);
@Setter @Setter
private ObjectProperty<MessageState> paymentSentMessageStatePropertyArbitrator = new SimpleObjectProperty<>(MessageState.UNDEFINED); private ObjectProperty<MessageState> paymentSentMessageStatePropertyArbitrator = new SimpleObjectProperty<>(MessageState.UNDEFINED);
private ObjectProperty<Boolean> paymentAccountDecryptedProperty = new SimpleObjectProperty<>(false); private ObjectProperty<Boolean> paymentAccountDecryptedProperty = new SimpleObjectProperty<>(false);
@ -203,7 +203,7 @@ public class ProcessModel implements Model, PersistablePayload {
.setPubKeyRing(pubKeyRing.toProtoMessage()) .setPubKeyRing(pubKeyRing.toProtoMessage())
.setUseSavingsWallet(useSavingsWallet) .setUseSavingsWallet(useSavingsWallet)
.setFundsNeededForTrade(fundsNeededForTrade) .setFundsNeededForTrade(fundsNeededForTrade)
.setPaymentSentMessageState(paymentSentMessageStateProperty.get().name()) .setPaymentSentMessageStateSeller(paymentSentMessageStatePropertySeller.get().name())
.setPaymentSentMessageStateArbitrator(paymentSentMessageStatePropertyArbitrator.get().name()) .setPaymentSentMessageStateArbitrator(paymentSentMessageStatePropertyArbitrator.get().name())
.setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation) .setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation)
.setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation) .setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation)
@ -240,9 +240,9 @@ public class ProcessModel implements Model, PersistablePayload {
processModel.setTradeFeeAddress(ProtoUtil.stringOrNullFromProto(proto.getTradeFeeAddress())); processModel.setTradeFeeAddress(ProtoUtil.stringOrNullFromProto(proto.getTradeFeeAddress()));
processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress())); processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress()));
String paymentSentMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageState()); String paymentSentMessageStateSellerString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateSeller());
MessageState paymentSentMessageState = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateString); MessageState paymentSentMessageStateSeller = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateSellerString);
processModel.setPaymentSentMessageState(paymentSentMessageState); processModel.setPaymentSentMessageStateSeller(paymentSentMessageStateSeller);
String paymentSentMessageStateArbitratorString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateArbitrator()); String paymentSentMessageStateArbitratorString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateArbitrator());
MessageState paymentSentMessageStateArbitrator = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateArbitratorString); MessageState paymentSentMessageStateArbitrator = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateArbitratorString);
@ -274,11 +274,11 @@ public class ProcessModel implements Model, PersistablePayload {
return getP2PService().getAddress(); return getP2PService().getAddress();
} }
void setPaymentSentAckMessage(AckMessage ackMessage) { void setPaymentSentAckMessageSeller(AckMessage ackMessage) {
MessageState messageState = ackMessage.isSuccess() ? MessageState messageState = ackMessage.isSuccess() ?
MessageState.ACKNOWLEDGED : MessageState.ACKNOWLEDGED :
MessageState.FAILED; MessageState.FAILED;
setPaymentSentMessageState(messageState); setPaymentSentMessageStateSeller(messageState);
} }
void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) { void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) {
@ -288,8 +288,8 @@ public class ProcessModel implements Model, PersistablePayload {
setPaymentSentMessageStateArbitrator(messageState); setPaymentSentMessageStateArbitrator(messageState);
} }
public void setPaymentSentMessageState(MessageState paymentSentMessageStateProperty) { public void setPaymentSentMessageStateSeller(MessageState paymentSentMessageStateProperty) {
this.paymentSentMessageStateProperty.set(paymentSentMessageStateProperty); this.paymentSentMessageStatePropertySeller.set(paymentSentMessageStateProperty);
if (tradeManager != null) { if (tradeManager != null) {
tradeManager.requestPersistence(); tradeManager.requestPersistence();
} }
@ -302,6 +302,14 @@ public class ProcessModel implements Model, PersistablePayload {
} }
} }
public boolean isPaymentSentMessageAckedBySeller() {
return paymentSentMessageStatePropertySeller.get() == MessageState.ACKNOWLEDGED;
}
public boolean isPaymentSentMessageAckedByArbitrator() {
return paymentSentMessageStatePropertyArbitrator.get() == MessageState.ACKNOWLEDGED;
}
void setDepositTxSentAckMessage(AckMessage ackMessage) { void setDepositTxSentAckMessage(AckMessage ackMessage) {
MessageState messageState = ackMessage.isSuccess() ? MessageState messageState = ackMessage.isSuccess() ?
MessageState.ACKNOWLEDGED : MessageState.ACKNOWLEDGED :

View file

@ -652,11 +652,12 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
// handle ack for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time // handle ack for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time
if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) { if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) {
if (trade.getTradePeer(sender) == trade.getSeller()) { if (trade.getTradePeer(sender) == trade.getSeller()) {
processModel.setPaymentSentAckMessage(ackMessage); processModel.setPaymentSentAckMessageSeller(ackMessage);
trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG); trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG);
processModel.getTradeManager().requestPersistence(); processModel.getTradeManager().requestPersistence();
} else if (trade.getTradePeer(sender) == trade.getArbitrator()) { } else if (trade.getTradePeer(sender) == trade.getArbitrator()) {
processModel.setPaymentSentAckMessageArbitrator(ackMessage); processModel.setPaymentSentAckMessageArbitrator(ackMessage);
processModel.getTradeManager().requestPersistence();
} else if (!ackMessage.isSuccess()) { } else if (!ackMessage.isSuccess()) {
String err = "Received AckMessage with error state for " + ackMessage.getSourceMsgClassName() + " from "+ sender + " with tradeId " + trade.getId() + " and errorMessage=" + ackMessage.getErrorMessage(); String err = "Received AckMessage with error state for " + ackMessage.getSourceMsgClassName() + " from "+ sender + " with tradeId " + trade.getId() + " and errorMessage=" + ackMessage.getErrorMessage();
log.warn(err); log.warn(err);

View file

@ -170,7 +170,7 @@ public abstract class BuyerSendPaymentSentMessage extends SendMailboxMessageTask
timer.stop(); timer.stop();
} }
if (listener != null) { if (listener != null) {
processModel.getPaymentSentMessageStateProperty().removeListener(listener); processModel.getPaymentSentMessageStatePropertySeller().removeListener(listener);
} }
} }
@ -194,8 +194,8 @@ public abstract class BuyerSendPaymentSentMessage extends SendMailboxMessageTask
if (resendCounter == 0) { if (resendCounter == 0) {
listener = (observable, oldValue, newValue) -> onMessageStateChange(newValue); listener = (observable, oldValue, newValue) -> onMessageStateChange(newValue);
processModel.getPaymentSentMessageStateProperty().addListener(listener); processModel.getPaymentSentMessageStatePropertySeller().addListener(listener);
onMessageStateChange(processModel.getPaymentSentMessageStateProperty().get()); onMessageStateChange(processModel.getPaymentSentMessageStatePropertySeller().get());
} }
// first re-send is after 2 minutes, then increase the delay exponentially // first re-send is after 2 minutes, then increase the delay exponentially

View file

@ -18,7 +18,6 @@
package haveno.core.trade.protocol.tasks; package haveno.core.trade.protocol.tasks;
import haveno.common.taskrunner.TaskRunner; import haveno.common.taskrunner.TaskRunner;
import haveno.core.network.MessageState;
import haveno.core.trade.Trade; import haveno.core.trade.Trade;
import haveno.core.trade.protocol.TradePeer; import haveno.core.trade.protocol.TradePeer;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -59,6 +58,6 @@ public class BuyerSendPaymentSentMessageToArbitrator extends BuyerSendPaymentSen
@Override @Override
protected boolean isAckedByReceiver() { protected boolean isAckedByReceiver() {
return trade.getProcessModel().getPaymentSentMessageStatePropertyArbitrator().get() == MessageState.ACKNOWLEDGED; return trade.getProcessModel().isPaymentSentMessageAckedByArbitrator();
} }
} }

View file

@ -40,25 +40,25 @@ public class BuyerSendPaymentSentMessageToSeller extends BuyerSendPaymentSentMes
@Override @Override
protected void setStateSent() { protected void setStateSent() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.SENT); trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.SENT);
super.setStateSent(); super.setStateSent();
} }
@Override @Override
protected void setStateArrived() { protected void setStateArrived() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.ARRIVED); trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.ARRIVED);
super.setStateArrived(); super.setStateArrived();
} }
@Override @Override
protected void setStateStoredInMailbox() { protected void setStateStoredInMailbox() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.STORED_IN_MAILBOX); trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.STORED_IN_MAILBOX);
super.setStateStoredInMailbox(); super.setStateStoredInMailbox();
} }
@Override @Override
protected void setStateFault() { protected void setStateFault() {
trade.getProcessModel().setPaymentSentMessageState(MessageState.FAILED); trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.FAILED);
super.setStateFault(); super.setStateFault();
} }
@ -72,6 +72,6 @@ public class BuyerSendPaymentSentMessageToSeller extends BuyerSendPaymentSentMes
@Override @Override
protected boolean isAckedByReceiver() { protected boolean isAckedByReceiver() {
return trade.getState().ordinal() >= Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG.ordinal(); return trade.getProcessModel().isPaymentSentMessageAckedBySeller();
} }
} }

View file

@ -100,7 +100,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
private final ObjectProperty<BuyerState> buyerState = new SimpleObjectProperty<>(); private final ObjectProperty<BuyerState> buyerState = new SimpleObjectProperty<>();
private final ObjectProperty<SellerState> sellerState = new SimpleObjectProperty<>(); private final ObjectProperty<SellerState> sellerState = new SimpleObjectProperty<>();
@Getter @Getter
private final ObjectProperty<MessageState> messageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); private final ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
private Subscription tradeStateSubscription; private Subscription tradeStateSubscription;
private Subscription paymentAccountDecryptedSubscription; private Subscription paymentAccountDecryptedSubscription;
private Subscription payoutStateSubscription; private Subscription payoutStateSubscription;
@ -186,7 +186,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
if (messageStateSubscription != null) { if (messageStateSubscription != null) {
messageStateSubscription.unsubscribe(); messageStateSubscription.unsubscribe();
messageStateProperty.set(MessageState.UNDEFINED); paymentSentMessageStateProperty.set(MessageState.UNDEFINED);
} }
if (selectedItem != null) { if (selectedItem != null) {
@ -200,7 +200,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> { payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> {
onPayoutStateChanged(state); onPayoutStateChanged(state);
}); });
messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStateProperty(), this::onMessageStateChanged); messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStatePropertySeller(), this::onPaymentSentMessageStateChanged);
} }
} }
} }
@ -215,8 +215,8 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
}); });
} }
private void onMessageStateChanged(MessageState messageState) { private void onPaymentSentMessageStateChanged(MessageState messageState) {
messageStateProperty.set(messageState); paymentSentMessageStateProperty.set(messageState);
} }
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////

View file

@ -52,7 +52,7 @@ public class BuyerStep3View extends TradeStepView {
public void activate() { public void activate() {
super.activate(); super.activate();
model.getMessageStateProperty().addListener(messageStateChangeListener); model.getPaymentSentMessageStateProperty().addListener(messageStateChangeListener);
updateMessageStateInfo(); updateMessageStateInfo();
} }
@ -60,7 +60,7 @@ public class BuyerStep3View extends TradeStepView {
public void deactivate() { public void deactivate() {
super.deactivate(); super.deactivate();
model.getMessageStateProperty().removeListener(messageStateChangeListener); model.getPaymentSentMessageStateProperty().removeListener(messageStateChangeListener);
} }
@ -87,7 +87,7 @@ public class BuyerStep3View extends TradeStepView {
} }
private void updateMessageStateInfo() { private void updateMessageStateInfo() {
MessageState messageState = model.getMessageStateProperty().get(); MessageState messageState = model.getPaymentSentMessageStateProperty().get();
textFieldWithIcon.setText(Res.get("message.state." + messageState.name())); textFieldWithIcon.setText(Res.get("message.state." + messageState.name()));
Label iconLabel = textFieldWithIcon.getIconLabel(); Label iconLabel = textFieldWithIcon.getIconLabel();
switch (messageState) { switch (messageState) {

View file

@ -1568,7 +1568,7 @@ message ProcessModel {
bytes payout_tx_signature = 4; bytes payout_tx_signature = 4;
bool use_savings_wallet = 5; bool use_savings_wallet = 5;
int64 funds_needed_for_trade = 6; 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; string payment_sent_message_state_arbitrator = 8;
bytes maker_signature = 9; bytes maker_signature = 9;
TradePeer maker = 10; TradePeer maker = 10;