UI cleanup, can confirm payment sent and received after dispute opened

show buyer and seller trade fee in dispute summary window
remove "Error polling trade wallet warning" if disconnected
show notification when dispute opened or closed in legacy app
resolve disputes under Support > Arbitration, hide other views
show "support ticket opened" when dispute request is acked
rename all variations of TradingPeer to TradePeer
rename "payment started" to "payment sent" for consistency
This commit is contained in:
woodser 2023-02-05 18:56:13 -05:00
parent a50e151c98
commit aafb47e2ce
112 changed files with 527 additions and 567 deletions

View file

@ -603,9 +603,9 @@ abstract class OfferBookViewModel extends ActivatableViewModel {
return closedTradableManager.getTradableList().stream()
.filter(e -> e instanceof Trade) // weed out canceled offers
.filter(e -> {
final Optional<NodeAddress> tradingPeerNodeAddress = e.getOptionalTradingPeerNodeAddress();
return tradingPeerNodeAddress.isPresent() &&
tradingPeerNodeAddress.get().getFullAddress().equals(offer.getMakerNodeAddress().getFullAddress());
final Optional<NodeAddress> tradePeerNodeAddress = e.getOptionalTradePeerNodeAddress();
return tradePeerNodeAddress.isPresent() &&
tradePeerNodeAddress.get().getFullAddress().equals(offer.getMakerNodeAddress().getFullAddress());
})
.collect(Collectors.toSet())
.size();

View file

@ -251,7 +251,7 @@ public class PeerInfoWithTagEditor extends Overlay<PeerInfoWithTagEditor> {
UserThread.runAfter(() -> {
PubKeyRing peersPubKeyRing = null;
if (trade != null) {
peersPubKeyRing = trade.getTradingPeer().getPubKeyRing();
peersPubKeyRing = trade.getTradePeer().getPubKeyRing();
} else if (offer != null) {
peersPubKeyRing = offer.getPubKeyRing();
}

View file

@ -22,11 +22,15 @@ import bisq.desktop.main.MainView;
import bisq.desktop.main.portfolio.PortfolioView;
import bisq.desktop.main.portfolio.pendingtrades.PendingTradesView;
import bisq.desktop.main.support.SupportView;
import bisq.desktop.main.support.dispute.client.DisputeClientView;
import bisq.desktop.main.support.dispute.DisputeView;
import bisq.desktop.main.support.dispute.agent.arbitration.ArbitratorView;
import bisq.desktop.main.support.dispute.client.arbitration.ArbitrationClientView;
import bisq.desktop.main.support.dispute.client.mediation.MediationClientView;
import bisq.desktop.main.support.dispute.client.refund.RefundClientView;
import bisq.core.locale.Res;
import bisq.core.support.dispute.Dispute;
import bisq.core.support.dispute.arbitration.ArbitrationManager;
import bisq.core.support.dispute.mediation.MediationManager;
import bisq.core.support.dispute.refund.RefundManager;
import bisq.core.trade.BuyerTrade;
@ -81,6 +85,7 @@ public class NotificationCenter {
///////////////////////////////////////////////////////////////////////////////////////////
private final TradeManager tradeManager;
private final ArbitrationManager arbitrationManager;
private final MediationManager mediationManager;
private final RefundManager refundManager;
private final Navigation navigation;
@ -96,11 +101,13 @@ public class NotificationCenter {
@Inject
public NotificationCenter(TradeManager tradeManager,
ArbitrationManager arbitrationManager,
MediationManager mediationManager,
RefundManager refundManager,
Preferences preferences,
Navigation navigation) {
this.tradeManager = tradeManager;
this.arbitrationManager = arbitrationManager;
this.mediationManager = mediationManager;
this.refundManager = refundManager;
this.navigation = navigation;
@ -195,7 +202,7 @@ public class NotificationCenter {
if (trade instanceof BuyerTrade && phase.ordinal() == Trade.Phase.DEPOSITS_UNLOCKED.ordinal())
message = Res.get("notification.trade.unlocked");
else if (trade instanceof SellerTrade && phase.ordinal() == Trade.Phase.PAYMENT_SENT.ordinal())
message = Res.get("notification.trade.paymentStarted");
message = Res.get("notification.trade.paymentSent");
}
if (message != null) {
@ -228,7 +235,29 @@ public class NotificationCenter {
private void onDisputeStateChanged(Trade trade, Trade.DisputeState disputeState) {
String message = null;
if (refundManager.findDispute(trade.getId()).isPresent()) {
if (arbitrationManager.findDispute(trade.getId()).isPresent()) {
Dispute dispute = arbitrationManager.findDispute(trade.getId()).get();
String disputeOrTicket = dispute.isSupportTicket() ?
Res.get("shared.supportTicket") :
Res.get("shared.dispute");
switch (disputeState) {
case NO_DISPUTE:
break;
case DISPUTE_OPENED:
// notify if arbitrator or dispute opener (arbitrator's disputes are in context of each trader, so isOpener() doesn't apply)
if (trade.isArbitrator() || !dispute.isOpener()) message = Res.get("notification.trade.peerOpenedDispute", disputeOrTicket);
break;
case DISPUTE_CLOSED:
// skip notifying arbitrator
if (!trade.isArbitrator()) message = Res.get("notification.trade.disputeClosed", disputeOrTicket);
break;
default:
break;
}
if (message != null) {
goToSupport(trade, message, trade.isArbitrator() ? ArbitratorView.class : ArbitrationClientView.class);
}
}else if (refundManager.findDispute(trade.getId()).isPresent()) {
String disputeOrTicket = refundManager.findDispute(trade.getId()).get().isSupportTicket() ?
Res.get("shared.supportTicket") :
Res.get("shared.dispute");
@ -251,7 +280,7 @@ public class NotificationCenter {
break;
}
if (message != null) {
goToSupport(trade, message, false);
goToSupport(trade, message, RefundClientView.class);
}
} else if (mediationManager.findDispute(trade.getId()).isPresent()) {
String disputeOrTicket = mediationManager.findDispute(trade.getId()).get().isSupportTicket() ?
@ -275,16 +304,13 @@ public class NotificationCenter {
break;
}
if (message != null) {
goToSupport(trade, message, true);
goToSupport(trade, message, MediationClientView.class);
}
}
}
private void goToSupport(Trade trade, String message, boolean isMediation) {
private void goToSupport(Trade trade, String message, Class<? extends DisputeView> viewClass) {
Notification notification = new Notification().disputeHeadLine(trade.getShortId()).message(message);
Class<? extends DisputeClientView> viewClass = isMediation ?
MediationClientView.class :
RefundClientView.class;
if (navigation.getCurrentPath() != null && !navigation.getCurrentPath().contains(viewClass)) {
notification.actionButtonTextWithGoTo("navigation.support")
.onAction(() -> navigation.navigateTo(MainView.class, SupportView.class, viewClass))

View file

@ -267,9 +267,9 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.openDate"), DisplayUtils.formatDateTime(dispute.getOpeningDate()));
if (dispute.isDisputeOpenerIsMaker()) {
if (dispute.isDisputeOpenerIsBuyer())
role = Res.get("support.buyerOfferer");
role = Res.get("support.buyerMaker");
else
role = Res.get("support.sellerOfferer");
role = Res.get("support.sellerMaker");
} else {
if (dispute.isDisputeOpenerIsBuyer())
role = Res.get("support.buyerTaker");
@ -283,6 +283,14 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
FormattingUtils.formatPrice(contract.getPrice()));
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.tradeVolume"),
VolumeUtil.formatVolumeWithCode(contract.getTradeVolume()));
String tradeFee = Res.getWithColAndCap("shared.buyer") +
" " +
formatter.formatCoinWithCode(trade.getBuyer() == trade.getMaker() ? trade.getMakerFee() : trade.getTakerFee()) +
" / " +
Res.getWithColAndCap("shared.seller") +
" " +
formatter.formatCoinWithCode(trade.getSeller() == trade.getMaker() ? trade.getMakerFee() : trade.getTakerFee());
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.tradeFee"), tradeFee);
String securityDeposit = Res.getWithColAndCap("shared.buyer") +
" " +
formatter.formatCoinWithCode(trade.getBuyerSecurityDeposit()) +

View file

@ -204,7 +204,7 @@ public class TradeDetailsWindow extends Overlay<TradeDetailsWindow> {
rows++;
if (trade.hasFailed())
rows += 2;
if (trade.getTradingPeerNodeAddress() != null)
if (trade.getTradePeerNodeAddress() != null)
rows++;
if (showXmrProofResult)
rows++;
@ -235,12 +235,12 @@ public class TradeDetailsWindow extends Overlay<TradeDetailsWindow> {
arbitratorNodeAddress.getFullAddress());
}
if (trade.getTradingPeerNodeAddress() != null)
addConfirmationLabelTextField(gridPane, ++rowIndex, Res.get("tradeDetailsWindow.tradingPeersOnion"),
trade.getTradingPeerNodeAddress().getFullAddress());
if (trade.getTradePeerNodeAddress() != null)
addConfirmationLabelTextField(gridPane, ++rowIndex, Res.get("tradeDetailsWindow.tradePeersOnion"),
trade.getTradePeerNodeAddress().getFullAddress());
if (showXmrProofResult) {
// As the window is already overloaded we replace the tradingPeersPubKeyHash field with the auto-conf state
// As the window is already overloaded we replace the tradePeersPubKeyHash field with the auto-conf state
// if XMR is the currency
addConfirmationLabelTextField(gridPane, ++rowIndex,
Res.get("portfolio.pending.step3_seller.autoConf.status.label"),

View file

@ -501,9 +501,9 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
if (!empty && item != null && item.getTradable() instanceof Trade) {
Trade tradeModel = (Trade) item.getTradable();
int numPastTrades = item.getNumPastTrades();
NodeAddress tradingPeerNodeAddress = tradeModel.getTradingPeerNodeAddress();
NodeAddress tradePeerNodeAddress = tradeModel.getTradePeerNodeAddress();
String role = Res.get("peerInfoIcon.tooltip.tradePeer");
Node peerInfoIcon = new PeerInfoIconTrading(tradingPeerNodeAddress,
Node peerInfoIcon = new PeerInfoIconTrading(tradePeerNodeAddress,
role,
numPastTrades,
privateNotificationManager,

View file

@ -193,11 +193,11 @@ public class PendingTradesDataModel extends ActivatableDataModel {
doSelectItem(item);
}
public void onPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
public void onPaymentSent(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
Trade trade = getTrade();
checkNotNull(trade, "trade must not be null");
checkArgument(trade instanceof BuyerTrade, "Check failed: trade instanceof BuyerTrade. Was: " + trade.getClass().getSimpleName());
((BuyerProtocol) tradeManager.getTradeProtocol(trade)).onPaymentStarted(resultHandler, errorMessageHandler);
((BuyerProtocol) tradeManager.getTradeProtocol(trade)).onPaymentSent(resultHandler, errorMessageHandler);
}
public void onPaymentReceived(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {

View file

@ -839,10 +839,10 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
super.updateItem(newItem, empty);
if (!empty && newItem != null) {
final Trade trade = newItem.getTrade();
final NodeAddress tradingPeerNodeAddress = trade.getTradingPeerNodeAddress();
final NodeAddress tradePeerNodeAddress = trade.getTradePeerNodeAddress();
int numPastTrades = model.getNumPastTrades(trade);
String role = Res.get("peerInfoIcon.tooltip.tradePeer");
Node peerInfoIcon = new PeerInfoIconTrading(tradingPeerNodeAddress, // TODO: display maker and taker node addresses for arbitrator
Node peerInfoIcon = new PeerInfoIconTrading(tradePeerNodeAddress, // TODO: display maker and taker node addresses for arbitrator
role,
numPastTrades,
privateNotificationManager,

View file

@ -201,7 +201,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> {
UserThread.execute(() -> onPayoutStateChanged(state));
});
messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentStartedMessageStateProperty(), this::onMessageStateChanged);
messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStateProperty(), this::onMessageStateChanged);
}
}
@ -215,7 +215,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
}
if (trade != null)
trade.getProcessModel().setPaymentStartedMessageState(messageState);
trade.getProcessModel().setPaymentSentMessageState(messageState);
}
private void onMessageStateChanged(MessageState messageState) {
@ -352,9 +352,9 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
.filter(e -> {
if (e instanceof Trade) {
Trade t = (Trade) e;
return t.getTradingPeerNodeAddress() != null &&
trade.getTradingPeerNodeAddress() != null &&
t.getTradingPeerNodeAddress().getFullAddress().equals(trade.getTradingPeerNodeAddress().getFullAddress());
return t.getTradePeerNodeAddress() != null &&
trade.getTradePeerNodeAddress() != null &&
t.getTradePeerNodeAddress().getFullAddress().equals(trade.getTradePeerNodeAddress().getFullAddress());
} else
return false;

View file

@ -53,7 +53,7 @@ public class SellerSubView extends TradeSubView {
@Override
protected void addWizards() {
step1 = new TradeWizardItem(SellerStep1View.class, Res.get("portfolio.pending.step1.waitForConf"), "1");
step2 = new TradeWizardItem(SellerStep2View.class, Res.get("portfolio.pending.step2_seller.waitPaymentStarted"), "2");
step2 = new TradeWizardItem(SellerStep2View.class, Res.get("portfolio.pending.step2_seller.waitPaymentSent"), "2");
step3 = new TradeWizardItem(SellerStep3View.class, Res.get("portfolio.pending.step3_seller.confirmPaymentReceived"), "3");
step4 = new TradeWizardItem(SellerStep4View.class, Res.get("portfolio.pending.step5.completed"), "4");

View file

@ -116,18 +116,20 @@ public class TradeStepInfo {
break;
case IN_ARBITRATION_SELF_REQUESTED:
// red button
titledGroupBg.setText(Res.get("portfolio.pending.arbitrationRequested"));
String text = trade.getDisputeState().isOpen() ? Res.get("portfolio.pending.supportTicketOpened") : Res.get("portfolio.pending.arbitrationRequested");
titledGroupBg.setText(text);
label.updateContent(Res.get("portfolio.pending.disputeOpenedByUser", Res.get("portfolio.pending.communicateWithArbitrator")));
button.setText(Res.get("portfolio.pending.arbitrationRequested").toUpperCase());
button.setText(text.toUpperCase());
button.setId("open-dispute-button");
button.getStyleClass().remove("action-button");
button.setDisable(true);
break;
case IN_ARBITRATION_PEER_REQUESTED:
// red button
titledGroupBg.setText(Res.get("portfolio.pending.arbitrationRequested"));
text = trade.getDisputeState().isOpen() ? Res.get("portfolio.pending.supportTicketOpened") : Res.get("portfolio.pending.arbitrationRequested");
titledGroupBg.setText(text);
label.updateContent(Res.get("portfolio.pending.disputeOpenedByPeer", Res.get("portfolio.pending.communicateWithArbitrator")));
button.setText(Res.get("portfolio.pending.arbitrationRequested").toUpperCase());
button.setText(text.toUpperCase());
button.setId("open-dispute-button");
button.getStyleClass().remove("action-button");
button.setDisable(true);

View file

@ -637,7 +637,7 @@ public abstract class TradeStepView extends AnchorPane {
}
private boolean peerAccepted() {
return trade.getTradingPeer().getMediatedPayoutTxSignature() != null;
return trade.getTradePeer().getMediatedPayoutTxSignature() != null;
}
private void openMediationResultPopup(String headLine) {

View file

@ -71,17 +71,14 @@ import bisq.desktop.components.paymentmethods.UpiForm;
import bisq.desktop.components.paymentmethods.VerseForm;
import bisq.desktop.components.paymentmethods.WeChatPayForm;
import bisq.desktop.components.paymentmethods.WesternUnionForm;
import bisq.desktop.main.MainView;
import bisq.desktop.main.overlays.popups.Popup;
import bisq.desktop.main.overlays.windows.SetXmrTxKeyWindow;
import bisq.desktop.main.portfolio.pendingtrades.PendingTradesViewModel;
import bisq.desktop.main.portfolio.pendingtrades.steps.TradeStepView;
import bisq.desktop.util.DisplayUtils;
import bisq.desktop.util.Layout;
import bisq.desktop.util.Transitions;
import bisq.core.locale.Res;
import bisq.core.monetary.Volume;
import bisq.core.network.MessageState;
import bisq.core.offer.Offer;
import bisq.core.payment.PaymentAccount;
@ -104,7 +101,6 @@ import bisq.core.util.VolumeUtil;
import bisq.common.Timer;
import bisq.common.UserThread;
import bisq.common.app.DevEnv;
import bisq.common.util.Tuple2;
import bisq.common.util.Tuple4;
import javafx.scene.control.Button;
@ -429,12 +425,12 @@ public class BuyerStep2View extends TradeStepView {
GridPane.setRowSpan(accountTitledGroupBg, gridRow - 1);
Tuple4<Button, BusyAnimation, Label, HBox> tuple3 = addButtonBusyAnimationLabel(gridPane, ++gridRow, 0,
Res.get("portfolio.pending.step2_buyer.paymentStarted"), 10);
Res.get("portfolio.pending.step2_buyer.paymentSent"), 10);
HBox hBox = tuple3.fourth;
GridPane.setColumnSpan(hBox, 2);
confirmButton = tuple3.first;
confirmButton.setOnAction(e -> onPaymentStarted());
confirmButton.setOnAction(e -> onPaymentSent());
busyAnimation = tuple3.second;
statusLabel = tuple3.third;
}
@ -475,7 +471,7 @@ public class BuyerStep2View extends TradeStepView {
// UI Handlers
///////////////////////////////////////////////////////////////////////////////////////////
private void onPaymentStarted() {
private void onPaymentSent() {
if (!model.dataModel.isBootstrappedOrShowPopup()) {
return;
}
@ -492,13 +488,13 @@ public class BuyerStep2View extends TradeStepView {
Popup popup = new Popup();
popup.headLine(Res.get("portfolio.pending.step2_buyer.paperReceipt.headline"))
.feedback(Res.get("portfolio.pending.step2_buyer.paperReceipt.msg"))
.onAction(this::showConfirmPaymentStartedPopup)
.onAction(this::showConfirmPaymentSentPopup)
.closeButtonText(Res.get("shared.no"))
.onClose(popup::hide)
.dontShowAgainId(key)
.show();
} else {
showConfirmPaymentStartedPopup();
showConfirmPaymentSentPopup();
}
} else if (sellersPaymentAccountPayload instanceof WesternUnionAccountPayload) {
String key = "westernUnionMTCNSent";
@ -507,14 +503,14 @@ public class BuyerStep2View extends TradeStepView {
Popup popup = new Popup();
popup.headLine(Res.get("portfolio.pending.step2_buyer.westernUnionMTCNInfo.headline"))
.feedback(Res.get("portfolio.pending.step2_buyer.westernUnionMTCNInfo.msg", email))
.onAction(this::showConfirmPaymentStartedPopup)
.onAction(this::showConfirmPaymentSentPopup)
.actionButtonText(Res.get("shared.yes"))
.closeButtonText(Res.get("shared.no"))
.onClose(popup::hide)
.dontShowAgainId(key)
.show();
} else {
showConfirmPaymentStartedPopup();
showConfirmPaymentSentPopup();
}
} else if (sellersPaymentAccountPayload instanceof MoneyGramAccountPayload) {
String key = "moneyGramMTCNSent";
@ -523,14 +519,14 @@ public class BuyerStep2View extends TradeStepView {
Popup popup = new Popup();
popup.headLine(Res.get("portfolio.pending.step2_buyer.moneyGramMTCNInfo.headline"))
.feedback(Res.get("portfolio.pending.step2_buyer.moneyGramMTCNInfo.msg", email))
.onAction(this::showConfirmPaymentStartedPopup)
.onAction(this::showConfirmPaymentSentPopup)
.actionButtonText(Res.get("shared.yes"))
.closeButtonText(Res.get("shared.no"))
.onClose(popup::hide)
.dontShowAgainId(key)
.show();
} else {
showConfirmPaymentStartedPopup();
showConfirmPaymentSentPopup();
}
} else if (sellersPaymentAccountPayload instanceof HalCashAccountPayload) {
String key = "halCashCodeInfo";
@ -540,14 +536,14 @@ public class BuyerStep2View extends TradeStepView {
popup.headLine(Res.get("portfolio.pending.step2_buyer.halCashInfo.headline"))
.feedback(Res.get("portfolio.pending.step2_buyer.halCashInfo.msg",
trade.getShortId(), mobileNr))
.onAction(this::showConfirmPaymentStartedPopup)
.onAction(this::showConfirmPaymentSentPopup)
.actionButtonText(Res.get("shared.yes"))
.closeButtonText(Res.get("shared.no"))
.onClose(popup::hide)
.dontShowAgainId(key)
.show();
} else {
showConfirmPaymentStartedPopup();
showConfirmPaymentSentPopup();
}
} else if (sellersPaymentAccountPayload instanceof AssetAccountPayload && isXmrTrade()) {
SetXmrTxKeyWindow setXmrTxKeyWindow = new SetXmrTxKeyWindow();
@ -565,13 +561,13 @@ public class BuyerStep2View extends TradeStepView {
trade.setCounterCurrencyTxId(txHash);
model.dataModel.getTradeManager().requestPersistence();
showConfirmPaymentStartedPopup();
showConfirmPaymentSentPopup();
})
.closeButtonText(Res.get("shared.cancel"))
.onClose(setXmrTxKeyWindow::hide)
.show();
} else {
showConfirmPaymentStartedPopup();
showConfirmPaymentSentPopup();
}
}
@ -581,35 +577,35 @@ public class BuyerStep2View extends TradeStepView {
.confirmation(Res.get("portfolio.pending.step2_buyer.confirmStart.proof.noneProvided"))
.width(700)
.actionButtonText(Res.get("portfolio.pending.step2_buyer.confirmStart.warningButton"))
.onAction(this::showConfirmPaymentStartedPopup)
.onAction(this::showConfirmPaymentSentPopup)
.closeButtonText(Res.get("shared.cancel"))
.onClose(popup::hide)
.show();
}
private void showConfirmPaymentStartedPopup() {
String key = "confirmPaymentStarted";
private void showConfirmPaymentSentPopup() {
String key = "confirmPaymentSent";
if (!DevEnv.isDevMode() && DontShowAgainLookup.showAgain(key)) {
Popup popup = new Popup();
popup.headLine(Res.get("portfolio.pending.step2_buyer.confirmStart.headline"))
.confirmation(Res.get("portfolio.pending.step2_buyer.confirmStart.msg", getCurrencyName(trade)))
.width(700)
.actionButtonText(Res.get("portfolio.pending.step2_buyer.confirmStart.yes"))
.onAction(this::confirmPaymentStarted)
.onAction(this::confirmPaymentSent)
.closeButtonText(Res.get("shared.no"))
.onClose(popup::hide)
.dontShowAgainId(key)
.show();
} else {
confirmPaymentStarted();
confirmPaymentSent();
}
}
private void confirmPaymentStarted() {
private void confirmPaymentSent() {
busyAnimation.play();
statusLabel.setText(Res.get("shared.sendingConfirmation"));
model.dataModel.onPaymentStarted(() -> {
model.dataModel.onPaymentSent(() -> {
}, errorMessage -> {
busyAnimation.stop();
new Popup().warning(Res.get("popup.warning.sendMsgFailed")).show();

View file

@ -35,8 +35,6 @@ public class SellerStep1View extends TradeStepView {
@Override
protected void onPendingTradesInitialized() {
super.onPendingTradesInitialized();
//validateDepositInputs();
log.warn("Need to validate fee and/or deposit txs in SellerStep1View for XMR?"); // TODO (woodser): need to validate fee and/or deposit txs in SellerStep1View?
checkForUnconfirmedTimeout();
}
@ -71,21 +69,6 @@ public class SellerStep1View extends TradeStepView {
protected String getPeriodOverWarnText() {
return Res.get("portfolio.pending.step1.openForDispute");
}
///////////////////////////////////////////////////////////////////////////////////////////
// Private
///////////////////////////////////////////////////////////////////////////////////////////
// // Verify that deposit tx inputs are matching the trade fee txs outputs.
// private void validateDepositInputs() {
// try {
// TradeDataValidation.validateDepositInputs(trade);
// } catch (TradeDataValidation.ValidationException e) {
// if (!model.dataModel.tradeManager.isAllowFaultyDelayedTxs()) {
// new Popup().warning(Res.get("portfolio.pending.invalidTx", e.getMessage())).show();
// }
// }
// }
}

View file

@ -112,11 +112,11 @@ public class SupportView extends ActivatableView<TabPane, Void> {
public void initialize() {
tradersMediationDisputesTab = new Tab();
tradersMediationDisputesTab.setClosable(false);
root.getTabs().add(tradersMediationDisputesTab);
//root.getTabs().add(tradersMediationDisputesTab); // hidden since mediation and refunds are not used in haveno
tradersRefundDisputesTab = new Tab();
tradersRefundDisputesTab.setClosable(false);
root.getTabs().add(tradersRefundDisputesTab);
//root.getTabs().add(tradersRefundDisputesTab);
tradersArbitrationDisputesTab = new Tab();
tradersArbitrationDisputesTab.setClosable(false);
@ -126,8 +126,8 @@ public class SupportView extends ActivatableView<TabPane, Void> {
updateAgentTabs();
tradersMediationDisputesTab.setText(Res.get("support.tab.mediation.support").toUpperCase());
tradersRefundDisputesTab.setText(Res.get("support.tab.arbitration.support").toUpperCase());
tradersArbitrationDisputesTab.setText(Res.get("support.tab.legacyArbitration.support").toUpperCase());
tradersRefundDisputesTab.setText(Res.get("support.tab.refund.support").toUpperCase());
tradersArbitrationDisputesTab.setText(Res.get("support.tab.arbitration.support").toUpperCase());
navigationListener = (viewPath, data) -> {
if (viewPath.size() == 3 && viewPath.indexOf(SupportView.class) == 1)