mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-08-22 05:29:33 -04:00
Changed state handling
This commit is contained in:
parent
95e23dc8a9
commit
b9fe4660a3
54 changed files with 798 additions and 817 deletions
|
@ -31,12 +31,12 @@ import io.bitsquare.trade.protocol.placeoffer.tasks.ValidateOffer;
|
|||
import io.bitsquare.trade.protocol.trade.BuyerAsOffererProtocol;
|
||||
import io.bitsquare.trade.protocol.trade.SellerAsTakerProtocol;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.CreateDepositTxInputs;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.ProcessRequestDepositTxInputsMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.ProcessRequestPublishDepositTxMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.ProcessDepositTxInputsRequest;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.ProcessPublishDepositTxRequest;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.SendDepositTxPublishedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.SendFiatTransferStartedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.SendPayDepositRequest;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.SendPayoutTxFinalizedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.SendRequestPayDepositMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.SignAndFinalizePayoutTx;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.buyer.SignAndPublishDepositTx;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.offerer.VerifyTakeOfferFeePayment;
|
||||
|
@ -45,9 +45,9 @@ import io.bitsquare.trade.protocol.trade.tasks.seller.CommitDepositTx;
|
|||
import io.bitsquare.trade.protocol.trade.tasks.seller.CreateAndSignDepositTx;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.ProcessDepositTxPublishedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.ProcessFiatTransferStartedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.ProcessPayDepositRequest;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.ProcessPayoutTxFinalizedMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.ProcessRequestPayDepositMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.SendRequestDepositTxInputsMessage;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.SendDepositTxInputsRequest;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.seller.SignPayoutTx;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.taker.CreateTakeOfferFeeTx;
|
||||
import io.bitsquare.trade.protocol.trade.tasks.taker.VerifyOfferFeePayment;
|
||||
|
@ -98,11 +98,11 @@ public class DebugView extends InitializableView {
|
|||
|
||||
/*---- Protocol ----*/
|
||||
BuyerAsOffererProtocol.class,
|
||||
ProcessRequestDepositTxInputsMessage.class,
|
||||
ProcessDepositTxInputsRequest.class,
|
||||
CreateDepositTxInputs.class,
|
||||
SendRequestPayDepositMessage.class,
|
||||
SendPayDepositRequest.class,
|
||||
|
||||
ProcessRequestPublishDepositTxMessage.class,
|
||||
ProcessPublishDepositTxRequest.class,
|
||||
VerifyTakerAccount.class,
|
||||
SignAndPublishDepositTx.class,
|
||||
SendDepositTxPublishedMessage.class,
|
||||
|
@ -118,9 +118,9 @@ public class DebugView extends InitializableView {
|
|||
/*---- Protocol ----*/
|
||||
SellerAsTakerProtocol.class,
|
||||
CreateTakeOfferFeeTx.class,
|
||||
SendRequestDepositTxInputsMessage.class,
|
||||
SendDepositTxInputsRequest.class,
|
||||
|
||||
ProcessRequestPayDepositMessage.class,
|
||||
ProcessPayDepositRequest.class,
|
||||
VerifyOffererAccount.class,
|
||||
CreateAndSignDepositTx.class,
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ class TakeOfferDataModel implements Activatable, DataModel {
|
|||
@Override
|
||||
public void deactivate() {
|
||||
btcCode.unbind();
|
||||
tradeManager.cancelCheckOfferAvailabilityRequest(offer);
|
||||
tradeManager.onCancelAvailabilityRequest(offer);
|
||||
}
|
||||
|
||||
void initWithData(Coin amount, Offer offer) {
|
||||
|
@ -121,11 +121,11 @@ class TakeOfferDataModel implements Activatable, DataModel {
|
|||
});
|
||||
updateBalance(walletService.getBalanceForAddress(addressEntry.getAddress()));
|
||||
|
||||
tradeManager.checkOfferAvailability(offer);
|
||||
tradeManager.onCheckOfferAvailability(offer);
|
||||
}
|
||||
|
||||
void takeOffer(TakeOfferResultHandler handler) {
|
||||
tradeManager.requestTakeOffer(amountAsCoin.get(), offer, handler::handleResult);
|
||||
void onTakeOffer(TakeOfferResultHandler handler) {
|
||||
tradeManager.onTakeOffer(amountAsCoin.get(), offer, handler::handleResult);
|
||||
}
|
||||
|
||||
void calculateVolume() {
|
||||
|
|
|
@ -158,7 +158,7 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
|
|||
|
||||
@FXML
|
||||
void onTakeOffer() {
|
||||
model.takeOffer();
|
||||
model.onTakeOffer();
|
||||
}
|
||||
|
||||
@FXML
|
||||
|
|
|
@ -28,7 +28,8 @@ import io.bitsquare.locale.CurrencyUtil;
|
|||
import io.bitsquare.trade.BuyerAsTakerTrade;
|
||||
import io.bitsquare.trade.SellerAsTakerTrade;
|
||||
import io.bitsquare.trade.offer.Offer;
|
||||
import io.bitsquare.trade.states.TakerTradeState;
|
||||
import io.bitsquare.trade.states.BuyerTradeState;
|
||||
import io.bitsquare.trade.states.SellerTradeState;
|
||||
|
||||
import org.bitcoinj.core.Address;
|
||||
import org.bitcoinj.core.Coin;
|
||||
|
@ -220,13 +221,13 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
|
|||
evaluateState();
|
||||
}
|
||||
|
||||
void takeOffer() {
|
||||
void onTakeOffer() {
|
||||
takeOfferRequested = true;
|
||||
applyTakeOfferRequestResult(false);
|
||||
|
||||
isTakeOfferSpinnerVisible.set(true);
|
||||
|
||||
dataModel.takeOffer((trade) -> {
|
||||
dataModel.onTakeOffer((trade) -> {
|
||||
trade.processStateProperty().addListener((ov, oldValue, newValue) -> {
|
||||
log.debug("trade state = " + newValue);
|
||||
|
||||
|
@ -234,19 +235,24 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
|
|||
if (trade.getErrorMessage() != null)
|
||||
msg = "\nError message: " + trade.getErrorMessage();
|
||||
|
||||
if (trade instanceof BuyerAsTakerTrade) {
|
||||
switch ((TakerTradeState.ProcessState) newValue) {
|
||||
case TAKE_OFFER_FEE_TX_CREATED:
|
||||
if (trade instanceof SellerAsTakerTrade) {
|
||||
switch ((SellerTradeState.ProcessState) newValue) {
|
||||
case UNDEFINED:
|
||||
break;
|
||||
case DEPOSIT_PUBLISHED:
|
||||
case DEPOSIT_CONFIRMED:
|
||||
case DEPOSIT_PUBLISHED_MSG_RECEIVED:
|
||||
assert trade.getDepositTx() != null;
|
||||
transactionId.set(trade.getDepositTx().getHashAsString());
|
||||
applyTakeOfferRequestResult(true);
|
||||
break;
|
||||
case FIAT_PAYMENT_STARTED:
|
||||
case DEPOSIT_CONFIRMED:
|
||||
case FIAT_PAYMENT_STARTED_MSG_RECEIVED:
|
||||
case FIAT_PAYMENT_RECEIPT:
|
||||
case FIAT_PAYMENT_RECEIPT_MSG_SENT:
|
||||
case PAYOUT_TX_RECEIVED:
|
||||
case PAYOUT_TX_COMMITTED:
|
||||
case PAYOUT_BROAD_CASTED:
|
||||
break;
|
||||
case TAKE_OFFER_FEE_PUBLISH_FAILED:
|
||||
/* case TAKE_OFFER_FEE_PUBLISH_FAILED:
|
||||
errorMessage.set("An error occurred when paying the trade fee." + msg);
|
||||
takeOfferRequested = false;
|
||||
break;
|
||||
|
@ -258,25 +264,31 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
|
|||
case EXCEPTION:
|
||||
errorMessage.set(msg);
|
||||
takeOfferRequested = false;
|
||||
break;
|
||||
break;*/
|
||||
default:
|
||||
log.warn("Unhandled trade state: " + newValue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (trade instanceof SellerAsTakerTrade) {
|
||||
switch ((TakerTradeState.ProcessState) newValue) {
|
||||
case TAKE_OFFER_FEE_TX_CREATED:
|
||||
else if (trade instanceof BuyerAsTakerTrade) {
|
||||
switch ((BuyerTradeState.ProcessState) newValue) {
|
||||
case UNDEFINED:
|
||||
break;
|
||||
case DEPOSIT_PUBLISHED:
|
||||
case DEPOSIT_CONFIRMED:
|
||||
assert trade.getDepositTx() != null;
|
||||
transactionId.set(trade.getDepositTx().getHashAsString());
|
||||
applyTakeOfferRequestResult(true);
|
||||
break;
|
||||
case DEPOSIT_PUBLISHED_MSG_SENT:
|
||||
case DEPOSIT_CONFIRMED:
|
||||
case FIAT_PAYMENT_STARTED:
|
||||
case FIAT_PAYMENT_STARTED_MSG_SENT:
|
||||
case FIAT_PAYMENT_RECEIPT_MSG_RECEIVED:
|
||||
case PAYOUT_TX_COMMITTED:
|
||||
case PAYOUT_TX_SENT:
|
||||
case PAYOUT_BROAD_CASTED:
|
||||
break;
|
||||
case TAKE_OFFER_FEE_PUBLISH_FAILED:
|
||||
/* case TAKE_OFFER_FEE_PUBLISH_FAILED:
|
||||
errorMessage.set("An error occurred when paying the trade fee." + msg);
|
||||
takeOfferRequested = false;
|
||||
break;
|
||||
|
@ -293,7 +305,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
|
|||
case EXCEPTION:
|
||||
errorMessage.set(msg);
|
||||
takeOfferRequested = false;
|
||||
break;
|
||||
break;*/
|
||||
default:
|
||||
log.warn("Unhandled trade state: " + newValue);
|
||||
break;
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
package io.bitsquare.gui.main.portfolio.pendingtrades;
|
||||
|
||||
import io.bitsquare.gui.components.Popups;
|
||||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.CompletedView;
|
||||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.StartFiatView;
|
||||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.TradeWizardItem;
|
||||
|
@ -26,6 +25,8 @@ import io.bitsquare.gui.main.portfolio.pendingtrades.steps.WaitPayoutLockTimeVie
|
|||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.WaitTxInBlockchainView;
|
||||
import io.bitsquare.locale.BSResources;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -38,6 +39,7 @@ public class BuyerSubView extends TradeSubView {
|
|||
private TradeWizardItem payoutUnlock;
|
||||
private TradeWizardItem completed;
|
||||
|
||||
private final ChangeListener<PendingTradesViewModel.BuyerState> stateChangeListener;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor, Initialisation
|
||||
|
@ -45,6 +47,20 @@ public class BuyerSubView extends TradeSubView {
|
|||
|
||||
public BuyerSubView(PendingTradesViewModel model) {
|
||||
super(model);
|
||||
stateChangeListener = (ov, oldValue, newValue) -> applyState(newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate() {
|
||||
super.activate();
|
||||
model.getBuyerState().addListener(stateChangeListener);
|
||||
applyState(model.getBuyerState().get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
super.deactivate();
|
||||
model.getBuyerState().removeListener(stateChangeListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -63,9 +79,8 @@ public class BuyerSubView extends TradeSubView {
|
|||
// State
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
protected void applyState(PendingTradesViewModel.ViewState viewState) {
|
||||
log.debug("applyState " + viewState);
|
||||
protected void applyState(PendingTradesViewModel.BuyerState state) {
|
||||
log.debug("applyState " + state);
|
||||
|
||||
waitTxInBlockchain.setDisabled();
|
||||
startFiat.setDisabled();
|
||||
|
@ -76,10 +91,8 @@ public class BuyerSubView extends TradeSubView {
|
|||
if (tradeStepDetailsView != null)
|
||||
tradeStepDetailsView.deactivate();
|
||||
|
||||
switch (viewState) {
|
||||
case UNDEFINED:
|
||||
break;
|
||||
case BUYER_WAIT_TX_CONF:
|
||||
switch (state) {
|
||||
case WAIT_FOR_BLOCKCHAIN_CONFIRMATION:
|
||||
showItem(waitTxInBlockchain);
|
||||
|
||||
((WaitTxInBlockchainView) tradeStepDetailsView).setInfoLabelText("Deposit transaction has been published. You need to wait for at least " +
|
||||
|
@ -88,11 +101,11 @@ public class BuyerSubView extends TradeSubView {
|
|||
" be sure that the deposit funding has not been double spent. For higher trade volumes we" +
|
||||
" recommend to wait up to 6 confirmations.");*/
|
||||
break;
|
||||
case BUYER_START_PAYMENT:
|
||||
case REQUEST_START_FIAT_PAYMENT:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
showItem(startFiat);
|
||||
break;
|
||||
case BUYER_WAIT_CONFIRM_PAYMENT_RECEIVED:
|
||||
case WAIT_FOR_FIAT_PAYMENT_RECEIPT:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
startFiat.setCompleted();
|
||||
showItem(waitFiatReceived);
|
||||
|
@ -104,7 +117,7 @@ public class BuyerSubView extends TradeSubView {
|
|||
"the Bitcoin sellers payment account, the payout transaction will be published.",
|
||||
model.getCurrencyCode()));*/
|
||||
break;
|
||||
case BUYER_PAYOUT_FINALIZED:
|
||||
case WAIT_FOR_UNLOCK_PAYOUT:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
startFiat.setCompleted();
|
||||
waitFiatReceived.setCompleted();
|
||||
|
@ -113,7 +126,7 @@ public class BuyerSubView extends TradeSubView {
|
|||
((WaitPayoutLockTimeView) tradeStepDetailsView).setInfoLabelText("The payout transaction is signed and finalized by both parties." +
|
||||
"\nFor reducing bank charge back risks you need to wait until the payout gets unlocked to transfer your Bitcoin.");
|
||||
break;
|
||||
case BUYER_COMPLETED:
|
||||
case REQUEST_WITHDRAWAL:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
startFiat.setCompleted();
|
||||
waitFiatReceived.setCompleted();
|
||||
|
@ -131,7 +144,7 @@ public class BuyerSubView extends TradeSubView {
|
|||
"You can review the details to that trade any time in the closed trades screen.");
|
||||
completedView.setWithdrawAmountTextFieldText(model.getPayoutAmount());
|
||||
break;
|
||||
case MESSAGE_SENDING_FAILED:
|
||||
/*case MESSAGE_SENDING_FAILED:
|
||||
Popups.openWarningPopup("Sending message to trading peer failed.", model.getErrorMessage());
|
||||
break;
|
||||
case EXCEPTION:
|
||||
|
@ -139,9 +152,9 @@ public class BuyerSubView extends TradeSubView {
|
|||
Popups.openExceptionPopup(model.getTradeException());
|
||||
else
|
||||
Popups.openErrorPopup("An error occurred", model.getErrorMessage());
|
||||
break;
|
||||
break;*/
|
||||
default:
|
||||
log.warn("unhandled viewState " + viewState);
|
||||
log.warn("unhandled buyerState " + state);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@ import io.bitsquare.gui.util.BSFormatter;
|
|||
import io.bitsquare.gui.util.validation.BtcAddressValidator;
|
||||
import io.bitsquare.locale.BSResources;
|
||||
import io.bitsquare.trade.Trade;
|
||||
import io.bitsquare.trade.states.OffererTradeState;
|
||||
import io.bitsquare.trade.states.TakerTradeState;
|
||||
import io.bitsquare.trade.states.BuyerTradeState;
|
||||
import io.bitsquare.trade.states.SellerTradeState;
|
||||
|
||||
import org.bitcoinj.core.BlockChainListener;
|
||||
import org.bitcoinj.core.Coin;
|
||||
|
@ -53,16 +53,16 @@ import org.slf4j.LoggerFactory;
|
|||
public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTradesDataModel> implements ViewModel {
|
||||
private static final Logger log = LoggerFactory.getLogger(PendingTradesViewModel.class);
|
||||
|
||||
enum ViewState {
|
||||
/* enum ViewState {
|
||||
UNDEFINED,
|
||||
SELLER_WAIT_TX_CONF,
|
||||
SELLER_WAIT_PAYMENT_STARTED,
|
||||
SELLER_CONFIRM_RECEIVE_PAYMENT,
|
||||
WAIT_FOR_BLOCKCHAIN_CONFIRMATION,
|
||||
WAIT_FOR_FIAT_PAYMENT_STARTED,
|
||||
REQUEST_CONFIRM_FIAT_PAYMENT_RECEIVED,
|
||||
SELLER_REQUEST_PAYOUT_FINALIZE_MSG_SENT,
|
||||
SELLER_PAYOUT_FINALIZED,
|
||||
SELLER_COMPLETED,
|
||||
|
||||
BUYER_WAIT_TX_CONF,
|
||||
WAIT_FOR_BLOCKCHAIN_CONFIRMATION,
|
||||
BUYER_START_PAYMENT,
|
||||
BUYER_WAIT_CONFIRM_PAYMENT_RECEIVED,
|
||||
BUYER_PAYOUT_FINALIZED,
|
||||
|
@ -71,13 +71,36 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
MESSAGE_SENDING_FAILED,
|
||||
TIMEOUT,
|
||||
EXCEPTION
|
||||
}*/
|
||||
|
||||
interface State {
|
||||
}
|
||||
|
||||
enum BuyerState implements State {
|
||||
WAIT_FOR_BLOCKCHAIN_CONFIRMATION,
|
||||
REQUEST_START_FIAT_PAYMENT,
|
||||
WAIT_FOR_FIAT_PAYMENT_RECEIPT,
|
||||
WAIT_FOR_UNLOCK_PAYOUT,
|
||||
REQUEST_WITHDRAWAL
|
||||
}
|
||||
|
||||
enum SellerState implements State {
|
||||
WAIT_FOR_BLOCKCHAIN_CONFIRMATION,
|
||||
WAIT_FOR_FIAT_PAYMENT_STARTED,
|
||||
REQUEST_CONFIRM_FIAT_PAYMENT_RECEIVED,
|
||||
WAIT_FOR_PAYOUT_TX,
|
||||
WAIT_FOR_UNLOCK_PAYOUT,
|
||||
REQUEST_WITHDRAWAL
|
||||
}
|
||||
|
||||
private final BSFormatter formatter;
|
||||
private final InvalidationListener sellerStateListener;
|
||||
private final InvalidationListener buyerStateListener;
|
||||
private final BtcAddressValidator btcAddressValidator;
|
||||
private final ObjectProperty<ViewState> viewState = new SimpleObjectProperty<>(ViewState.UNDEFINED);
|
||||
|
||||
private final ObjectProperty<BuyerState> buyerState = new SimpleObjectProperty<>(BuyerState.WAIT_FOR_BLOCKCHAIN_CONFIRMATION);
|
||||
private final ObjectProperty<SellerState> sellerState = new SimpleObjectProperty<>(SellerState.WAIT_FOR_BLOCKCHAIN_CONFIRMATION);
|
||||
|
||||
private final StringProperty txId = new SimpleStringProperty();
|
||||
private final BooleanProperty withdrawalButtonDisable = new SimpleBooleanProperty(true);
|
||||
|
||||
|
@ -93,8 +116,8 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
|
||||
this.formatter = formatter;
|
||||
this.btcAddressValidator = btcAddressValidator;
|
||||
this.sellerStateListener = (ov) -> updateSellerState();
|
||||
this.buyerStateListener = (ov) -> updateBuyerState();
|
||||
this.sellerStateListener = (ov) -> applySellerState();
|
||||
this.buyerStateListener = (ov) -> applyBuyerState();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -105,8 +128,8 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
dataModel.getBuyerProcessState().addListener(buyerStateListener);
|
||||
|
||||
if (dataModel.getTrade() != null) {
|
||||
updateSellerState();
|
||||
updateBuyerState();
|
||||
applySellerState();
|
||||
applyBuyerState();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -130,8 +153,12 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
// Getters
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ReadOnlyObjectProperty<ViewState> getViewState() {
|
||||
return viewState;
|
||||
ReadOnlyObjectProperty<BuyerState> getBuyerState() {
|
||||
return buyerState;
|
||||
}
|
||||
|
||||
ReadOnlyObjectProperty<SellerState> getSellerState() {
|
||||
return sellerState;
|
||||
}
|
||||
|
||||
public ReadOnlyStringProperty getTxId() {
|
||||
|
@ -304,97 +331,58 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
// States
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private void updateSellerState() {
|
||||
if (dataModel.getSellerProcessState().get() instanceof TakerTradeState.ProcessState) {
|
||||
TakerTradeState.ProcessState processState = (TakerTradeState.ProcessState) dataModel.getSellerProcessState().get();
|
||||
log.debug("updateSellerState (TakerTradeState) " + processState);
|
||||
private void applySellerState() {
|
||||
if (dataModel.getSellerProcessState().get() instanceof SellerTradeState.ProcessState) {
|
||||
SellerTradeState.ProcessState processState = (SellerTradeState.ProcessState) dataModel.getSellerProcessState().get();
|
||||
log.debug("updateSellerState (SellerTradeState) " + processState);
|
||||
if (processState != null) {
|
||||
switch (processState) {
|
||||
case UNDEFINED:
|
||||
case TAKE_OFFER_FEE_TX_CREATED:
|
||||
case TAKE_OFFER_FEE_PUBLISHED:
|
||||
break;
|
||||
case TAKE_OFFER_FEE_PUBLISH_FAILED:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
|
||||
case DEPOSIT_PUBLISHED_MSG_RECEIVED:
|
||||
sellerState.set(SellerState.WAIT_FOR_BLOCKCHAIN_CONFIRMATION);
|
||||
break;
|
||||
|
||||
case DEPOSIT_PUBLISHED:
|
||||
viewState.set(ViewState.SELLER_WAIT_TX_CONF);
|
||||
break;
|
||||
|
||||
case DEPOSIT_CONFIRMED:
|
||||
viewState.set(ViewState.SELLER_WAIT_PAYMENT_STARTED);
|
||||
sellerState.set(SellerState.WAIT_FOR_FIAT_PAYMENT_STARTED);
|
||||
break;
|
||||
|
||||
case FIAT_PAYMENT_STARTED:
|
||||
viewState.set(ViewState.SELLER_CONFIRM_RECEIVE_PAYMENT);
|
||||
|
||||
case FIAT_PAYMENT_STARTED_MSG_RECEIVED:
|
||||
sellerState.set(SellerState.REQUEST_CONFIRM_FIAT_PAYMENT_RECEIVED);
|
||||
break;
|
||||
|
||||
case REQUEST_PAYOUT_FINALIZE_MSG_SENT:
|
||||
viewState.set(ViewState.SELLER_REQUEST_PAYOUT_FINALIZE_MSG_SENT);
|
||||
|
||||
case FIAT_PAYMENT_RECEIPT:
|
||||
break;
|
||||
case PAYOUT_FINALIZED:
|
||||
viewState.set(ViewState.SELLER_PAYOUT_FINALIZED);
|
||||
case FIAT_PAYMENT_RECEIPT_MSG_SENT:
|
||||
sellerState.set(SellerState.WAIT_FOR_PAYOUT_TX);
|
||||
break;
|
||||
|
||||
|
||||
case PAYOUT_TX_RECEIVED:
|
||||
break;
|
||||
case PAYOUT_TX_COMMITTED:
|
||||
sellerState.set(SellerState.WAIT_FOR_UNLOCK_PAYOUT);
|
||||
break;
|
||||
|
||||
|
||||
case PAYOUT_BROAD_CASTED:
|
||||
viewState.set(ViewState.SELLER_COMPLETED);
|
||||
sellerState.set(SellerState.REQUEST_WITHDRAWAL);
|
||||
break;
|
||||
case PAYOUT_BROAD_CASTED_FAILED:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
|
||||
|
||||
/* case PAYOUT_BROAD_CASTED_FAILED:
|
||||
// sellerState.set(SellerState.EXCEPTION);
|
||||
break;
|
||||
|
||||
case MESSAGE_SENDING_FAILED:
|
||||
viewState.set(ViewState.MESSAGE_SENDING_FAILED);
|
||||
//sellerState.set(SellerState.MESSAGE_SENDING_FAILED);
|
||||
break;
|
||||
case EXCEPTION:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
break;
|
||||
|
||||
default:
|
||||
log.warn("unhandled processState " + processState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (dataModel.getSellerProcessState().get() instanceof OffererTradeState.ProcessState) {
|
||||
OffererTradeState.ProcessState processState = (OffererTradeState.ProcessState) dataModel.getSellerProcessState().get();
|
||||
log.debug("updateSellerState (OffererTradeState) " + processState);
|
||||
if (processState != null) {
|
||||
switch (processState) {
|
||||
case UNDEFINED:
|
||||
break;
|
||||
|
||||
case DEPOSIT_PUBLISHED:
|
||||
viewState.set(ViewState.SELLER_WAIT_TX_CONF);
|
||||
break;
|
||||
case DEPOSIT_CONFIRMED:
|
||||
viewState.set(ViewState.SELLER_WAIT_PAYMENT_STARTED);
|
||||
break;
|
||||
|
||||
case FIAT_PAYMENT_STARTED:
|
||||
viewState.set(ViewState.SELLER_CONFIRM_RECEIVE_PAYMENT);
|
||||
break;
|
||||
|
||||
case REQUEST_PAYOUT_FINALIZE_MSG_SENT:
|
||||
viewState.set(ViewState.SELLER_REQUEST_PAYOUT_FINALIZE_MSG_SENT);
|
||||
break;
|
||||
case PAYOUT_FINALIZED:
|
||||
viewState.set(ViewState.SELLER_PAYOUT_FINALIZED);
|
||||
break;
|
||||
|
||||
case PAYOUT_BROAD_CASTED:
|
||||
viewState.set(ViewState.SELLER_COMPLETED);
|
||||
break;
|
||||
case PAYOUT_BROAD_CASTED_FAILED:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
break;
|
||||
|
||||
case MESSAGE_SENDING_FAILED:
|
||||
viewState.set(ViewState.MESSAGE_SENDING_FAILED);
|
||||
break;
|
||||
case EXCEPTION:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
break;
|
||||
// sellerState.set(SellerState.EXCEPTION);
|
||||
break;*/
|
||||
|
||||
default:
|
||||
log.warn("unhandled processState " + processState);
|
||||
|
@ -407,94 +395,59 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
}
|
||||
}
|
||||
|
||||
private void updateBuyerState() {
|
||||
if (dataModel.getBuyerProcessState().get() instanceof TakerTradeState.ProcessState) {
|
||||
TakerTradeState.ProcessState processState = (TakerTradeState.ProcessState) dataModel.getBuyerProcessState().get();
|
||||
log.debug("updateBuyerState (TakerTradeState)" + processState);
|
||||
if (processState != null) {
|
||||
switch (processState) {
|
||||
case UNDEFINED:
|
||||
case TAKE_OFFER_FEE_TX_CREATED:
|
||||
case TAKE_OFFER_FEE_PUBLISHED:
|
||||
break;
|
||||
case TAKE_OFFER_FEE_PUBLISH_FAILED:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
break;
|
||||
|
||||
case DEPOSIT_PUBLISHED:
|
||||
viewState.set(ViewState.BUYER_WAIT_TX_CONF);
|
||||
break;
|
||||
case DEPOSIT_CONFIRMED:
|
||||
viewState.set(ViewState.BUYER_START_PAYMENT);
|
||||
break;
|
||||
|
||||
case FIAT_PAYMENT_STARTED:
|
||||
viewState.set(ViewState.BUYER_WAIT_CONFIRM_PAYMENT_RECEIVED);
|
||||
break;
|
||||
|
||||
case PAYOUT_FINALIZED:
|
||||
viewState.set(ViewState.BUYER_PAYOUT_FINALIZED);
|
||||
break;
|
||||
|
||||
case PAYOUT_BROAD_CASTED:
|
||||
viewState.set(ViewState.BUYER_COMPLETED);
|
||||
break;
|
||||
case PAYOUT_BROAD_CASTED_FAILED:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
break;
|
||||
|
||||
case MESSAGE_SENDING_FAILED:
|
||||
viewState.set(ViewState.MESSAGE_SENDING_FAILED);
|
||||
break;
|
||||
case TIMEOUT:
|
||||
viewState.set(ViewState.TIMEOUT);
|
||||
break;
|
||||
case EXCEPTION:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
break;
|
||||
|
||||
default:
|
||||
log.warn("unhandled viewState " + processState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (dataModel.getBuyerProcessState().get() instanceof OffererTradeState.ProcessState) {
|
||||
OffererTradeState.ProcessState processState = (OffererTradeState.ProcessState) dataModel.getBuyerProcessState().get();
|
||||
log.debug("updateBuyerState (OffererTradeState) " + processState);
|
||||
private void applyBuyerState() {
|
||||
if (dataModel.getBuyerProcessState().get() instanceof BuyerTradeState.ProcessState) {
|
||||
BuyerTradeState.ProcessState processState = (BuyerTradeState.ProcessState) dataModel.getBuyerProcessState().get();
|
||||
log.debug("updateBuyerState (BuyerTradeState) " + processState);
|
||||
if (processState != null) {
|
||||
switch (processState) {
|
||||
case UNDEFINED:
|
||||
break;
|
||||
|
||||
|
||||
case DEPOSIT_PUBLISHED:
|
||||
viewState.set(ViewState.BUYER_WAIT_TX_CONF);
|
||||
case DEPOSIT_PUBLISHED_MSG_SENT:
|
||||
buyerState.set(BuyerState.WAIT_FOR_BLOCKCHAIN_CONFIRMATION);
|
||||
break;
|
||||
|
||||
|
||||
case DEPOSIT_CONFIRMED:
|
||||
viewState.set(ViewState.BUYER_START_PAYMENT);
|
||||
buyerState.set(BuyerState.REQUEST_START_FIAT_PAYMENT);
|
||||
break;
|
||||
|
||||
|
||||
case FIAT_PAYMENT_STARTED:
|
||||
viewState.set(ViewState.BUYER_WAIT_CONFIRM_PAYMENT_RECEIVED);
|
||||
break;
|
||||
case FIAT_PAYMENT_STARTED_MSG_SENT:
|
||||
buyerState.set(BuyerState.WAIT_FOR_FIAT_PAYMENT_RECEIPT);
|
||||
break;
|
||||
|
||||
case PAYOUT_FINALIZED:
|
||||
viewState.set(ViewState.BUYER_PAYOUT_FINALIZED);
|
||||
|
||||
case FIAT_PAYMENT_RECEIPT_MSG_RECEIVED:
|
||||
case PAYOUT_TX_COMMITTED:
|
||||
break;
|
||||
case PAYOUT_TX_SENT:
|
||||
buyerState.set(BuyerState.WAIT_FOR_UNLOCK_PAYOUT);
|
||||
break;
|
||||
|
||||
|
||||
case PAYOUT_BROAD_CASTED:
|
||||
viewState.set(ViewState.BUYER_COMPLETED);
|
||||
buyerState.set(BuyerState.REQUEST_WITHDRAWAL);
|
||||
break;
|
||||
case PAYOUT_BROAD_CASTED_FAILED:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
|
||||
|
||||
/* case PAYOUT_BROAD_CASTED_FAILED:
|
||||
// buyerState.set(BuyerState.EXCEPTION);
|
||||
break;
|
||||
|
||||
|
||||
case MESSAGE_SENDING_FAILED:
|
||||
viewState.set(ViewState.MESSAGE_SENDING_FAILED);
|
||||
// buyerState.set(BuyerState.MESSAGE_SENDING_FAILED);
|
||||
break;
|
||||
case EXCEPTION:
|
||||
viewState.set(ViewState.EXCEPTION);
|
||||
// buyerState.set(BuyerState.EXCEPTION);
|
||||
break;
|
||||
|
||||
*/
|
||||
default:
|
||||
log.warn("unhandled viewState " + processState);
|
||||
break;
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
package io.bitsquare.gui.main.portfolio.pendingtrades;
|
||||
|
||||
import io.bitsquare.gui.components.Popups;
|
||||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.CompletedView;
|
||||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.ConfirmFiatReceivedView;
|
||||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.TradeWizardItem;
|
||||
|
@ -26,6 +25,8 @@ import io.bitsquare.gui.main.portfolio.pendingtrades.steps.WaitPayoutLockTimeVie
|
|||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.WaitTxInBlockchainView;
|
||||
import io.bitsquare.locale.BSResources;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -38,6 +39,7 @@ public class SellerSubView extends TradeSubView {
|
|||
private TradeWizardItem payoutUnlock;
|
||||
private TradeWizardItem completed;
|
||||
|
||||
private final ChangeListener<PendingTradesViewModel.SellerState> stateChangeListener;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor, Initialisation
|
||||
|
@ -45,6 +47,20 @@ public class SellerSubView extends TradeSubView {
|
|||
|
||||
public SellerSubView(PendingTradesViewModel model) {
|
||||
super(model);
|
||||
stateChangeListener = (ov, oldValue, newValue) -> applyState(newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate() {
|
||||
super.activate();
|
||||
model.getSellerState().addListener(stateChangeListener);
|
||||
applyState(model.getSellerState().get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
super.deactivate();
|
||||
model.getSellerState().removeListener(stateChangeListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -63,8 +79,7 @@ public class SellerSubView extends TradeSubView {
|
|||
// State
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
protected void applyState(PendingTradesViewModel.ViewState viewState) {
|
||||
protected void applyState(PendingTradesViewModel.SellerState viewState) {
|
||||
log.debug("applyState " + viewState);
|
||||
|
||||
waitTxInBlockchain.setDisabled();
|
||||
|
@ -77,9 +92,7 @@ public class SellerSubView extends TradeSubView {
|
|||
tradeStepDetailsView.deactivate();
|
||||
|
||||
switch (viewState) {
|
||||
case UNDEFINED:
|
||||
break;
|
||||
case SELLER_WAIT_TX_CONF:
|
||||
case WAIT_FOR_BLOCKCHAIN_CONFIRMATION:
|
||||
showItem(waitTxInBlockchain);
|
||||
|
||||
((WaitTxInBlockchainView) tradeStepDetailsView).setInfoLabelText("Deposit transaction has been published. " +
|
||||
|
@ -91,7 +104,7 @@ public class SellerSubView extends TradeSubView {
|
|||
"For higher trade volumes it is recommended to wait up to 6 confirmations.",
|
||||
model.getCurrencyCode()));*/
|
||||
break;
|
||||
case SELLER_WAIT_PAYMENT_STARTED:
|
||||
case WAIT_FOR_FIAT_PAYMENT_STARTED:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
showItem(waitFiatStarted);
|
||||
|
||||
|
@ -104,7 +117,7 @@ public class SellerSubView extends TradeSubView {
|
|||
"the {0} payment has been started.",
|
||||
model.getCurrencyCode()));*/
|
||||
break;
|
||||
case SELLER_CONFIRM_RECEIVE_PAYMENT:
|
||||
case REQUEST_CONFIRM_FIAT_PAYMENT_RECEIVED:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
waitFiatStarted.setCompleted();
|
||||
showItem(confirmFiatReceived);
|
||||
|
@ -119,7 +132,7 @@ public class SellerSubView extends TradeSubView {
|
|||
model.getCurrencyCode()));*/
|
||||
|
||||
break;
|
||||
case SELLER_REQUEST_PAYOUT_FINALIZE_MSG_SENT:
|
||||
case WAIT_FOR_PAYOUT_TX:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
waitFiatStarted.setCompleted();
|
||||
confirmFiatReceived.setCompleted();
|
||||
|
@ -132,7 +145,7 @@ public class SellerSubView extends TradeSubView {
|
|||
((WaitPayoutFinalizedView) tradeStepDetailsView).setInfoLabelText("We requested the trading peer to sign and finalize the payout transaction." +
|
||||
"\nIt might be that the other peer is offline, so we need to wait until he finalize the transaction when he goes online again.");
|
||||
break;
|
||||
case SELLER_PAYOUT_FINALIZED:
|
||||
case WAIT_FOR_UNLOCK_PAYOUT:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
waitFiatStarted.setCompleted();
|
||||
confirmFiatReceived.setCompleted();
|
||||
|
@ -141,7 +154,7 @@ public class SellerSubView extends TradeSubView {
|
|||
((WaitPayoutLockTimeView) tradeStepDetailsView).setInfoLabelText("The payout transaction is signed and finalized by both parties." +
|
||||
"\nFor reducing bank charge back risks you need to wait until the payout gets unlocked to transfer your Bitcoin.");
|
||||
break;
|
||||
case SELLER_COMPLETED:
|
||||
case REQUEST_WITHDRAWAL:
|
||||
waitTxInBlockchain.setCompleted();
|
||||
waitFiatStarted.setCompleted();
|
||||
confirmFiatReceived.setCompleted();
|
||||
|
@ -160,7 +173,7 @@ public class SellerSubView extends TradeSubView {
|
|||
|
||||
completedView.setWithdrawAmountTextFieldText(model.getPayoutAmount());
|
||||
break;
|
||||
case MESSAGE_SENDING_FAILED:
|
||||
/* case MESSAGE_SENDING_FAILED:
|
||||
Popups.openWarningPopup("Sending message to trading peer failed.", model.getErrorMessage());
|
||||
break;
|
||||
case EXCEPTION:
|
||||
|
@ -168,7 +181,7 @@ public class SellerSubView extends TradeSubView {
|
|||
Popups.openExceptionPopup(model.getTradeException());
|
||||
else
|
||||
Popups.openErrorPopup("An error occurred", model.getErrorMessage());
|
||||
break;
|
||||
break;*/
|
||||
default:
|
||||
log.warn("unhandled viewState " + viewState);
|
||||
break;
|
||||
|
|
|
@ -21,7 +21,6 @@ import io.bitsquare.gui.main.portfolio.pendingtrades.steps.TradeStepDetailsView;
|
|||
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.TradeWizardItem;
|
||||
import io.bitsquare.gui.util.Layout;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.scene.layout.*;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
|
@ -31,7 +30,6 @@ public abstract class TradeSubView extends HBox {
|
|||
private static final Logger log = LoggerFactory.getLogger(TradeSubView.class);
|
||||
|
||||
protected final PendingTradesViewModel model;
|
||||
protected final ChangeListener<PendingTradesViewModel.ViewState> offererStateChangeListener;
|
||||
protected VBox leftVBox;
|
||||
protected AnchorPane contentPane;
|
||||
protected TradeStepDetailsView tradeStepDetailsView;
|
||||
|
@ -47,17 +45,12 @@ public abstract class TradeSubView extends HBox {
|
|||
setSpacing(Layout.PADDING_WINDOW);
|
||||
buildViews();
|
||||
|
||||
offererStateChangeListener = (ov, oldValue, newValue) -> applyState(newValue);
|
||||
}
|
||||
|
||||
public void activate() {
|
||||
model.getViewState().addListener(offererStateChangeListener);
|
||||
applyState(model.getViewState().get());
|
||||
}
|
||||
|
||||
public void deactivate() {
|
||||
model.getViewState().removeListener(offererStateChangeListener);
|
||||
|
||||
if (tradeStepDetailsView != null)
|
||||
tradeStepDetailsView.deactivate();
|
||||
}
|
||||
|
@ -67,8 +60,6 @@ public abstract class TradeSubView extends HBox {
|
|||
// Misc
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected abstract void applyState(PendingTradesViewModel.ViewState state);
|
||||
|
||||
private void buildViews() {
|
||||
addLeftBox();
|
||||
addContentPane();
|
||||
|
|
|
@ -105,7 +105,6 @@ public class StartFiatView extends TradeStepDetailsView {
|
|||
|
||||
private void onPaymentStarted(ActionEvent actionEvent) {
|
||||
log.debug("onPaymentStarted");
|
||||
model.fiatPaymentStarted();
|
||||
paymentStartedButton.setDisable(true);
|
||||
statusProgressIndicator.setVisible(true);
|
||||
statusProgressIndicator.setProgress(-1);
|
||||
|
@ -113,6 +112,8 @@ public class StartFiatView extends TradeStepDetailsView {
|
|||
root = statusProgressIndicator.getScene().getRoot();
|
||||
// We deactivate mouse interaction to avoid that user leaves screen
|
||||
root.setMouseTransparent(true);
|
||||
|
||||
model.fiatPaymentStarted();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue