From f5b996ef0023b9893c49fa0626e498d4711825e9 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Thu, 3 Mar 2016 02:52:37 +0100 Subject: [PATCH] Add availability check at take offer --- .../offer/takeoffer/TakeOfferDataModel.java | 7 +- .../main/offer/takeoffer/TakeOfferView.java | 86 ++++++++++--------- .../offer/takeoffer/TakeOfferViewModel.java | 11 +-- 3 files changed, 55 insertions(+), 49 deletions(-) diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferDataModel.java b/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferDataModel.java index 95b15417a6..8f54b7167f 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferDataModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferDataModel.java @@ -28,7 +28,6 @@ import io.bitsquare.btc.blockchain.BlockchainService; import io.bitsquare.btc.listeners.BalanceListener; import io.bitsquare.btc.pricefeed.PriceFeed; import io.bitsquare.common.UserThread; -import io.bitsquare.common.handlers.ResultHandler; import io.bitsquare.gui.common.model.ActivatableDataModel; import io.bitsquare.gui.main.overlays.notifications.Notification; import io.bitsquare.gui.main.overlays.popups.Popup; @@ -137,6 +136,9 @@ class TakeOfferDataModel extends ActivatableDataModel { if (isTabSelected) priceFeed.setCurrencyCode(offer.getCurrencyCode()); + + tradeManager.checkOfferAvailability(offer, () -> { + }); } @Override @@ -205,9 +207,6 @@ class TakeOfferDataModel extends ActivatableDataModel { priceFeed.setCurrencyCode(offer.getCurrencyCode()); } - void checkOfferAvailability(ResultHandler resultHandler) { - tradeManager.checkOfferAvailability(offer, resultHandler); - } void onTabSelected(boolean isSelected) { this.isTabSelected = isSelected; diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferView.java b/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferView.java index a490678e4b..454a45f375 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferView.java @@ -36,7 +36,6 @@ import io.bitsquare.gui.main.account.settings.AccountSettingsView; import io.bitsquare.gui.main.funds.FundsView; import io.bitsquare.gui.main.funds.withdrawal.WithdrawalView; import io.bitsquare.gui.main.offer.OfferView; -import io.bitsquare.gui.main.overlays.Overlay; import io.bitsquare.gui.main.overlays.popups.Popup; import io.bitsquare.gui.main.overlays.windows.OfferDetailsWindow; import io.bitsquare.gui.main.portfolio.PortfolioView; @@ -80,14 +79,14 @@ public class TakeOfferView extends ActivatableViewAndModel isOfferAvailablePopup; private ChangeListener feeFromFundingTxListener; @@ -149,7 +146,7 @@ public class TakeOfferView extends ActivatableViewAndModel model.dataModel.getCurrencyCode() + "/" + model.btcCode.get(), model.btcCode)); @@ -163,10 +160,6 @@ public class TakeOfferView extends ActivatableViewAndModel { if (newValue != null) { - if (isOfferAvailablePopup != null) { - isOfferAvailablePopup.hide(); - isOfferAvailablePopup = null; - } new Popup().warning(newValue).onClose(() -> { errorPopupDisplayed.set(true); model.resetOfferWarning(); @@ -187,22 +180,13 @@ public class TakeOfferView extends ActivatableViewAndModel a == null && b == null && !c && !d) - .subscribe((observable, oldValue, newValue) -> { - if (!oldValue && newValue) { - isOfferAvailablePopup = new Popup().information(BSResources.get("takeOffer.fundsBox.isOfferAvailable")) - .onClose(() -> { - model.resetErrorMessage(); - close(); - }); - isOfferAvailablePopup.show(); - } - }); + isOfferAvailableSubscription = EasyBind.subscribe(model.isOfferAvailable, newValue -> { + if (newValue) { + offerAvailabilitySpinner.setProgress(0); + offerAvailabilitySpinner.setVisible(false); + offerAvailabilitySpinnerLabel.setVisible(false); + } + }); isTakeOfferSpinnerVisibleSubscription = EasyBind.subscribe(model.isTakeOfferSpinnerVisible, newValue -> { takeOfferSpinner.setProgress(newValue ? -1 : 0); @@ -278,7 +262,7 @@ public class TakeOfferView extends ActivatableViewAndModel tuple = add2ButtonsAfterGroup(gridPane, ++gridRow, BSResources.get("takeOffer.amountPriceBox.next"), BSResources.get("shared.cancel")); - nextButton = tuple.first; + HBox hBox = new HBox(); + hBox.setSpacing(10); + + nextButton = new Button(BSResources.get("takeOffer.amountPriceBox.next")); + nextButton.setDefaultButton(true); nextButton.disableProperty().bind(model.isNextButtonDisabled); + nextButton.setOnAction(e -> onShowPayFundsScreen()); //UserThread.runAfter(() -> nextButton.requestFocus(), 100, TimeUnit.MILLISECONDS); - cancelButton1 = tuple.second; - cancelButton1.setDefaultButton(false); + + cancelButton1 = new Button(BSResources.get("shared.cancel")); cancelButton1.setOnAction(e -> close()); + cancelButton1.setDefaultButton(false); cancelButton1.setId("cancel-button"); - GridPane.setMargin(nextButton, new Insets(-35, 0, 0, 0)); - nextButton.setOnAction(e -> onShowPayFundsScreen()); + offerAvailabilitySpinner = new ProgressIndicator(0); + offerAvailabilitySpinner.setPrefSize(18, 18); + offerAvailabilitySpinner.setProgress(-1); + + offerAvailabilitySpinnerLabel = new Label(BSResources.get("takeOffer.fundsBox.isOfferAvailable")); + + hBox.setAlignment(Pos.CENTER_LEFT); + hBox.getChildren().addAll(nextButton, cancelButton1, offerAvailabilitySpinner, offerAvailabilitySpinnerLabel); + + GridPane.setRowIndex(hBox, ++gridRow); + GridPane.setColumnIndex(hBox, 1); + GridPane.setMargin(hBox, new Insets(-30, 0, 0, 0)); + gridPane.getChildren().add(hBox); } private void addFundingGroup() { @@ -597,9 +603,9 @@ public class TakeOfferView extends ActivatableViewAndModel close()); diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferViewModel.java index ae7ba5dcce..da4c8c096e 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/takeoffer/TakeOfferViewModel.java @@ -18,7 +18,6 @@ package io.bitsquare.gui.main.offer.takeoffer; import io.bitsquare.arbitration.Arbitrator; -import io.bitsquare.common.UserThread; import io.bitsquare.gui.common.model.ActivatableWithDataModel; import io.bitsquare.gui.common.model.ViewModel; import io.bitsquare.gui.util.BSFormatter; @@ -126,9 +125,6 @@ class TakeOfferViewModel extends ActivatableWithDataModel im offer.stateProperty().addListener(offerStateListener); applyOfferState(offer.stateProperty().get()); - // when getting back to an open screen we want to re-check again - UserThread.execute(() -> dataModel.checkOfferAvailability(() -> { - })); updateButtonDisableState(); } @@ -253,6 +249,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel im break; case AVAILABLE: isOfferAvailable.set(true); + updateButtonDisableState(); break; case NOT_AVAILABLE: if (takeOfferRequested) @@ -319,6 +316,9 @@ class TakeOfferViewModel extends ActivatableWithDataModel im break; } this.errorMessage.set(errorMessage + appendMsg); + + if (takeOfferSucceededHandler != null) + takeOfferSucceededHandler.run(); } else { this.errorMessage.set(null); } @@ -349,7 +349,8 @@ class TakeOfferViewModel extends ActivatableWithDataModel im private void updateButtonDisableState() { boolean inputDataValid = isBtcInputValid(amount.get()).isValid && dataModel.isMinAmountLessOrEqualAmount() - && !dataModel.isAmountLargerThanOfferAmount(); + && !dataModel.isAmountLargerThanOfferAmount() + && isOfferAvailable.get(); isNextButtonDisabled.set(!inputDataValid); isTakeOfferButtonDisabled.set(!(inputDataValid && dataModel.isWalletFunded.get()