From 5645f9ba10e87d067e52a079dbcf14716a01c146 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Mon, 1 Dec 2014 02:57:23 +0100 Subject: [PATCH] Add isOnline check at take offer screen #313, fix #315 --- .../trade/createoffer/CreateOfferView.java | 4 +- .../trade/takeoffer/TakeOfferDataModel.java | 66 ++++++++++++++++++- .../main/trade/takeoffer/TakeOfferView.fxml | 19 +++++- .../main/trade/takeoffer/TakeOfferView.java | 36 +++++++--- .../trade/takeoffer/TakeOfferViewModel.java | 9 ++- .../java/io/bitsquare/trade/TradeManager.java | 23 ++++++- .../RespondToIsOfferAvailableMessage.java | 42 ++++++++++++ .../offerer/tasks/HandleTakeOfferRequest.java | 8 +-- .../RequestIsOfferAvailableMessage.java | 39 +++++++++++ .../resources/i18n/displayStrings.properties | 1 + 10 files changed, 225 insertions(+), 22 deletions(-) create mode 100644 src/main/java/io/bitsquare/trade/protocol/trade/offerer/messages/RespondToIsOfferAvailableMessage.java create mode 100644 src/main/java/io/bitsquare/trade/protocol/trade/taker/messages/RequestIsOfferAvailableMessage.java 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 @@ + + + + + +