mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-08-09 07:02:24 -04:00
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:
parent
a50e151c98
commit
aafb47e2ce
112 changed files with 527 additions and 567 deletions
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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()) +
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue