From e6744fb727253487b15182b1cbbddd5e38191a0d Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Tue, 17 Mar 2015 13:25:15 +0100 Subject: [PATCH] Handle errors at take offer screen --- .../trade/takeoffer/TakeOfferDataModel.java | 72 +------ .../main/trade/takeoffer/TakeOfferView.fxml | 2 +- .../main/trade/takeoffer/TakeOfferView.java | 204 ++++++++---------- .../trade/takeoffer/TakeOfferViewModel.java | 180 ++++++++++++---- .../io/bitsquare/gui/util/Transitions.java | 2 + .../main/java/io/bitsquare/offer/Offer.java | 12 +- .../CheckOfferAvailabilityProtocol.java | 4 +- .../trade/taker/SellerAsTakerProtocol.java | 39 +++- .../resources/i18n/displayStrings.properties | 1 - 9 files changed, 295 insertions(+), 221 deletions(-) diff --git a/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java b/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java index 3e7eb2d499..7f0e04f8de 100644 --- a/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java +++ b/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferDataModel.java @@ -21,13 +21,13 @@ import io.bitsquare.btc.AddressEntry; import io.bitsquare.btc.FeePolicy; import io.bitsquare.btc.WalletService; import io.bitsquare.btc.listeners.BalanceListener; -import io.bitsquare.offer.Offer; -import io.bitsquare.persistence.Persistence; -import io.bitsquare.user.Preferences; -import io.bitsquare.trade.Trade; -import io.bitsquare.trade.TradeManager; import io.bitsquare.common.viewfx.model.Activatable; import io.bitsquare.common.viewfx.model.DataModel; +import io.bitsquare.offer.Offer; +import io.bitsquare.persistence.Persistence; +import io.bitsquare.trade.Trade; +import io.bitsquare.trade.TradeManager; +import io.bitsquare.user.Preferences; import org.bitcoinj.core.Coin; import org.bitcoinj.utils.ExchangeRate; @@ -63,11 +63,8 @@ class TakeOfferDataModel implements Activatable, DataModel { private Offer offer; private AddressEntry addressEntry; - final StringProperty requestTakeOfferErrorMessage = new SimpleStringProperty(); - final StringProperty transactionId = new SimpleStringProperty(); final StringProperty btcCode = new SimpleStringProperty(); - final BooleanProperty requestTakeOfferSuccess = new SimpleBooleanProperty(); final BooleanProperty isWalletFunded = new SimpleBooleanProperty(); final BooleanProperty useMBTC = new SimpleBooleanProperty(); @@ -78,8 +75,6 @@ class TakeOfferDataModel implements Activatable, DataModel { final ObjectProperty offerFeeAsCoin = new SimpleObjectProperty<>(); final ObjectProperty networkFeeAsCoin = new SimpleObjectProperty<>(); - final ObjectProperty offerIsAvailable = new SimpleObjectProperty<>(Offer.State.UNKNOWN); - @Inject public TakeOfferDataModel(TradeManager tradeManager, WalletService walletService, @@ -130,64 +125,11 @@ class TakeOfferDataModel implements Activatable, DataModel { }); updateBalance(walletService.getBalanceForAddress(addressEntry.getAddress())); - offer.stateProperty().addListener((observable, oldValue, newValue) -> { - offerIsAvailable.set(newValue); - }); tradeManager.checkOfferAvailability(offer); } - void takeOffer() { - final Trade trade = tradeManager.takeOffer(amountAsCoin.get(), offer); - trade.stateProperty().addListener((ov, oldValue, newValue) -> { - log.debug("trade state = " + newValue); - String errorMessage = ""; - if (newValue.getErrorMessage() != null) - errorMessage = "\nError message: " + newValue.getErrorMessage(); - - switch (newValue) { - case OPEN: - break; - case OFFERER_ACCEPTED: - break; - case OFFERER_REJECTED: - requestTakeOfferErrorMessage.set("Take offer request got rejected. Maybe another trader has taken the offer in the meantime."); - break; - case TAKE_OFFER_FEE_TX_CREATED: - break; - case DEPOSIT_PUBLISHED: - case DEPOSIT_CONFIRMED: - // TODO Check why DEPOSIT_CONFIRMED can happen, refactor state handling - // TODO null pointer happened here! - if (trade.getDepositTx() != null) { - transactionId.set(trade.getDepositTx().getHashAsString()); - requestTakeOfferSuccess.set(true); - } - else { - log.warn("trade.getDepositTx() = null. at trade state " + newValue + - " That should not happen and needs more investigation why it can happen."); - } - break; - case FIAT_PAYMENT_STARTED: - break; - case TAKE_OFFER_FEE_PUBLISH_FAILED: - requestTakeOfferErrorMessage.set("An error occurred when paying the trade fee." + errorMessage); - break; - case MESSAGE_SENDING_FAILED: - requestTakeOfferErrorMessage.set("An error occurred when sending a message to the offerer. Maybe there are connection problems. " + - "Please try later again." + errorMessage); - break; - case PAYOUT_PUBLISHED: - break; - case FAULT: - requestTakeOfferErrorMessage.set(errorMessage); - break; - - - default: - log.error("Unhandled trade state: " + newValue); - break; - } - }); + Trade takeOffer() { + return tradeManager.takeOffer(amountAsCoin.get(), offer); } void calculateVolume() { diff --git a/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml b/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml index 3761c9e678..ea35034a35 100644 --- a/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml +++ b/core/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml @@ -136,7 +136,7 @@