diff --git a/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java b/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java index 47ced99999..f162f1a039 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java +++ b/src/main/java/io/bitsquare/gui/main/trade/createoffer/CreateOfferView.java @@ -234,8 +234,10 @@ public class CreateOfferView extends ActivatableViewAndModel offerFeeAsCoin = new SimpleObjectProperty<>(); final ObjectProperty networkFeeAsCoin = new SimpleObjectProperty<>(); + final ObjectProperty offerIsAvailable = new SimpleObjectProperty<>(OfferAvailableState + .UNKNOWN); + + // + private boolean isActivated; @Inject - public TakeOfferDataModel(TradeManager tradeManager, WalletService walletService, Preferences preferences, + public TakeOfferDataModel(TradeManager tradeManager, WalletService walletService, MessageService messageService, + Preferences preferences, Persistence persistence) { this.tradeManager = tradeManager; this.walletService = walletService; + this.messageService = messageService; this.preferences = preferences; this.persistence = persistence; @@ -94,11 +113,13 @@ class TakeOfferDataModel implements Activatable, DataModel { @Override public void activate() { + isActivated = true; btcCode.bind(preferences.btcDenominationProperty()); } @Override public void deactivate() { + isActivated = false; btcCode.unbind(); } @@ -126,8 +147,50 @@ class TakeOfferDataModel implements Activatable, DataModel { } }); updateBalance(walletService.getBalanceForAddress(addressEntry.getAddress())); + + getPeerAddress(offer); } + // TODO: Should be moved to a domain and handled with add/remove listeners instead of isActivated + // or maybe with rx? + private void getPeerAddress(Offer offer) { + messageService.getPeerAddress(offer.getMessagePublicKey(), new GetPeerAddressListener() { + @Override + public void onResult(Peer peer) { + if (isActivated) + isOfferAvailable(peer, offer.getId()); + } + + @Override + public void onFailed() { + if (isActivated) + log.error("The offerers address have not been found. That should never happen."); + } + }); + } + + private void isOfferAvailable(Peer peer, String offerId) { + messageService.sendMessage(peer, new RequestIsOfferAvailableMessage(offerId), + new OutgoingMessageListener() { + @Override + public void onResult() { + if (isActivated) { + log.trace("RequestIsOfferAvailableMessage successfully arrived at peer"); + offerIsAvailable.set(OfferAvailableState.OFFER_AVAILABLE); + } + } + + @Override + public void onFailed() { + if (isActivated) { + log.error("RequestIsOfferAvailableMessage did not arrive at peer"); + offerIsAvailable.set(OfferAvailableState.OFFER_NOT_AVAILABLE); + } + } + }); + } + + void takeOffer() { final Trade trade = tradeManager.takeOffer(amountAsCoin.get(), offer); trade.stateProperty().addListener((ov, oldValue, newValue) -> { @@ -214,7 +277,6 @@ class TakeOfferDataModel implements Activatable, DataModel { } - WalletService getWalletService() { return walletService; } diff --git a/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml b/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml index 86732a5f01..3761c9e678 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml +++ b/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferView.fxml @@ -61,7 +61,8 @@ - + @@ -108,7 +109,8 @@ - + @@ -121,8 +123,19 @@ + + + + + +