From 677c581a313b8528a9c7ca3e935f219a1838b4c8 Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Wed, 8 Oct 2025 06:42:00 -0400 Subject: [PATCH] add dispute opened and closed message and state to data model --- .../haveno/core/trade/protocol/TradePeer.java | 34 +++++++++++++++++++ proto/src/main/proto/pb.proto | 3 ++ 2 files changed, 37 insertions(+) diff --git a/core/src/main/java/haveno/core/trade/protocol/TradePeer.java b/core/src/main/java/haveno/core/trade/protocol/TradePeer.java index 7e3fb6184d..8be4cb3de2 100644 --- a/core/src/main/java/haveno/core/trade/protocol/TradePeer.java +++ b/core/src/main/java/haveno/core/trade/protocol/TradePeer.java @@ -28,6 +28,7 @@ import haveno.core.network.MessageState; import haveno.core.payment.payload.PaymentAccountPayload; import haveno.core.proto.CoreProtoResolver; import haveno.core.support.dispute.messages.DisputeClosedMessage; +import haveno.core.support.dispute.messages.DisputeOpenedMessage; import haveno.core.trade.TradeManager; import haveno.core.trade.messages.PaymentReceivedMessage; import haveno.core.trade.messages.PaymentSentMessage; @@ -100,6 +101,9 @@ public final class TradePeer implements PersistablePayload { @Nullable @Setter @Getter + private DisputeOpenedMessage disputeOpenedMessage; + @Setter + @Getter private DisputeClosedMessage disputeClosedMessage; // added in v 0.6 @@ -159,6 +163,10 @@ public final class TradePeer implements PersistablePayload { private ObjectProperty paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); @Setter private ObjectProperty paymentReceivedMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); + @Setter + private ObjectProperty disputeOpenedMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); + @Setter + private ObjectProperty disputeClosedMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); public TradePeer() { } @@ -247,6 +255,20 @@ public final class TradePeer implements PersistablePayload { } } + public void setDisputeOpenedMessageState(MessageState disputeOpenedMessageStateProperty) { + this.disputeOpenedMessageStateProperty.set(disputeOpenedMessageStateProperty); + if (tradeManager != null) { + tradeManager.requestPersistence(); + } + } + + public void setDisputeClosedMessageState(MessageState disputeClosedMessageStateProperty) { + this.disputeClosedMessageStateProperty.set(disputeClosedMessageStateProperty); + if (tradeManager != null) { + tradeManager.requestPersistence(); + } + } + public boolean isDepositsConfirmedMessageAcked() { return depositsConfirmedMessageStateProperty.get() == MessageState.ACKNOWLEDGED; } @@ -293,6 +315,7 @@ public final class TradePeer implements PersistablePayload { Optional.ofNullable(mediatedPayoutTxSignature).ifPresent(e -> builder.setMediatedPayoutTxSignature(ByteString.copyFrom(e))); Optional.ofNullable(paymentSentMessage).ifPresent(e -> builder.setPaymentSentMessage(paymentSentMessage.toProtoNetworkEnvelope().getPaymentSentMessage())); Optional.ofNullable(paymentReceivedMessage).ifPresent(e -> builder.setPaymentReceivedMessage(paymentReceivedMessage.toProtoNetworkEnvelope().getPaymentReceivedMessage())); + Optional.ofNullable(disputeOpenedMessage).ifPresent(e -> builder.setDisputeOpenedMessage(disputeOpenedMessage.toProtoNetworkEnvelope().getDisputeOpenedMessage())); Optional.ofNullable(disputeClosedMessage).ifPresent(e -> builder.setDisputeClosedMessage(disputeClosedMessage.toProtoNetworkEnvelope().getDisputeClosedMessage())); Optional.ofNullable(reserveTxHash).ifPresent(e -> builder.setReserveTxHash(reserveTxHash)); Optional.ofNullable(reserveTxHex).ifPresent(e -> builder.setReserveTxHex(reserveTxHex)); @@ -314,6 +337,8 @@ public final class TradePeer implements PersistablePayload { builder.setDepositsConfirmedMessageState(depositsConfirmedMessageStateProperty.get().name()); builder.setPaymentSentMessageState(paymentSentMessageStateProperty.get().name()); builder.setPaymentReceivedMessageState(paymentReceivedMessageStateProperty.get().name()); + builder.setDisputeOpenedMessageState(disputeOpenedMessageStateProperty.get().name()); + builder.setDisputeClosedMessageState(disputeClosedMessageStateProperty.get().name()); builder.setCurrentDate(currentDate); return builder.build(); @@ -345,6 +370,7 @@ public final class TradePeer implements PersistablePayload { tradePeer.setMediatedPayoutTxSignature(ProtoUtil.byteArrayOrNullFromProto(proto.getMediatedPayoutTxSignature())); tradePeer.setPaymentSentMessage(proto.hasPaymentSentMessage() ? PaymentSentMessage.fromProto(proto.getPaymentSentMessage(), Version.getP2PMessageVersion()) : null); tradePeer.setPaymentReceivedMessage(proto.hasPaymentReceivedMessage() ? PaymentReceivedMessage.fromProto(proto.getPaymentReceivedMessage(), Version.getP2PMessageVersion()) : null); + tradePeer.setDisputeOpenedMessage(proto.hasDisputeOpenedMessage() ? DisputeOpenedMessage.fromProto(proto.getDisputeOpenedMessage(), coreProtoResolver, Version.getP2PMessageVersion()) : null); tradePeer.setDisputeClosedMessage(proto.hasDisputeClosedMessage() ? DisputeClosedMessage.fromProto(proto.getDisputeClosedMessage(), Version.getP2PMessageVersion()) : null); tradePeer.setReserveTxHash(ProtoUtil.stringOrNullFromProto(proto.getReserveTxHash())); tradePeer.setReserveTxHex(ProtoUtil.stringOrNullFromProto(proto.getReserveTxHex())); @@ -376,6 +402,14 @@ public final class TradePeer implements PersistablePayload { MessageState paymentReceivedMessageState = ProtoUtil.enumFromProto(MessageState.class, paymentReceivedMessageStateString); tradePeer.setPaymentReceivedMessageState(paymentReceivedMessageState); + String disputeOpenedMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getDisputeOpenedMessageState()); + MessageState disputeOpenedMessageState = ProtoUtil.enumFromProto(MessageState.class, disputeOpenedMessageStateString); + tradePeer.setDisputeOpenedMessageState(disputeOpenedMessageState); + + String disputeClosedMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getDisputeClosedMessageState()); + MessageState disputeClosedMessageState = ProtoUtil.enumFromProto(MessageState.class, disputeClosedMessageStateString); + tradePeer.setDisputeClosedMessageState(disputeClosedMessageState); + return tradePeer; } } diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index 2a8a2ed8cd..be3a6555c9 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -1614,6 +1614,7 @@ message TradePeer { bytes mediated_payout_tx_signature = 22; PaymentSentMessage payment_sent_message = 23; PaymentReceivedMessage payment_received_message = 24; + DisputeOpenedMessage dispute_opened_message = 46; DisputeClosedMessage dispute_closed_message = 25; string reserve_tx_hash = 26; string reserve_tx_hex = 27; @@ -1635,6 +1636,8 @@ message TradePeer { string deposits_confirmed_message_state = 43; string payment_sent_message_state = 44; string payment_received_message_state = 45; + string dispute_opened_message_state = 47; + string dispute_closed_message_state = 48; } ///////////////////////////////////////////////////////////////////////////////////////////