diff --git a/core/src/main/java/haveno/core/xmr/Balances.java b/core/src/main/java/haveno/core/xmr/Balances.java index fe49b941..15f6ff8a 100644 --- a/core/src/main/java/haveno/core/xmr/Balances.java +++ b/core/src/main/java/haveno/core/xmr/Balances.java @@ -37,7 +37,6 @@ package haveno.core.xmr; import com.google.inject.Inject; import haveno.common.ThreadUtils; -import haveno.common.UserThread; import haveno.core.api.model.XmrBalanceInfo; import haveno.core.offer.OpenOffer; import haveno.core.offer.OpenOfferManager; @@ -163,18 +162,12 @@ public class Balances { // calculate reserved balance reservedBalance = reservedOfferBalance.add(reservedTradeBalance); + // play sound if funds received + boolean fundsReceived = balanceSumBefore != null && getNonTradeBalanceSum().compareTo(balanceSumBefore) > 0; + if (fundsReceived) HavenoUtils.playCashRegisterSound(); + // notify balance update - UserThread.execute(() -> { - - // check if funds received - boolean fundsReceived = balanceSumBefore != null && getNonTradeBalanceSum().compareTo(balanceSumBefore) > 0; - if (fundsReceived) { - HavenoUtils.playCashRegisterSound(); - } - - // increase counter to notify listeners - updateCounter.set(updateCounter.get() + 1); - }); + updateCounter.set(updateCounter.get() + 1); } } } diff --git a/desktop/src/main/java/haveno/desktop/main/MainView.java b/desktop/src/main/java/haveno/desktop/main/MainView.java index f294eea7..eaec5d11 100644 --- a/desktop/src/main/java/haveno/desktop/main/MainView.java +++ b/desktop/src/main/java/haveno/desktop/main/MainView.java @@ -353,7 +353,7 @@ public class MainView extends InitializableView { settingsButtonWithBadge.getStyleClass().add("new"); navigation.addListener((viewPath, data) -> { - UserThread.await(() -> { + UserThread.await(() -> { // TODO: this uses `await` to fix nagivation link from market view to offer book, but await can cause hanging, so execute should be used if (viewPath.size() != 2 || viewPath.indexOf(MainView.class) != 0) return; Class viewClass = viewPath.tip(); diff --git a/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferViewModel.java b/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferViewModel.java index fb971b62..48adb22f 100644 --- a/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferViewModel.java +++ b/desktop/src/main/java/haveno/desktop/main/offer/MutableOfferViewModel.java @@ -19,6 +19,8 @@ package haveno.desktop.main.offer; import com.google.inject.Inject; import com.google.inject.name.Named; + +import haveno.common.ThreadUtils; import haveno.common.UserThread; import haveno.common.app.DevEnv; import haveno.common.handlers.ErrorMessageHandler; @@ -108,7 +110,7 @@ public abstract class MutableOfferViewModel ext private String amountDescription; private String addressAsString; private final String paymentLabel; - private boolean createOfferRequested; + private boolean createOfferInProgress; public boolean createOfferCanceled; public final StringProperty amount = new SimpleStringProperty(); @@ -638,32 +640,37 @@ public abstract class MutableOfferViewModel ext /////////////////////////////////////////////////////////////////////////////////////////// void onPlaceOffer(Offer offer, Runnable resultHandler) { - errorMessage.set(null); - createOfferRequested = true; - createOfferCanceled = false; - - dataModel.onPlaceOffer(offer, transaction -> { - resultHandler.run(); - if (!createOfferCanceled) placeOfferCompleted.set(true); + ThreadUtils.execute(() -> { errorMessage.set(null); - }, errMessage -> { - createOfferRequested = false; - if (offer.getState() == Offer.State.OFFER_FEE_RESERVED) errorMessage.set(errMessage + Res.get("createOffer.errorInfo")); - else errorMessage.set(errMessage); + createOfferInProgress = true; + createOfferCanceled = false; + + dataModel.onPlaceOffer(offer, transaction -> { + createOfferInProgress = false; + resultHandler.run(); + if (!createOfferCanceled) placeOfferCompleted.set(true); + errorMessage.set(null); + }, errMessage -> { + createOfferInProgress = false; + if (offer.getState() == Offer.State.OFFER_FEE_RESERVED) errorMessage.set(errMessage + Res.get("createOffer.errorInfo")); + else errorMessage.set(errorMessage.get()); + + UserThread.execute(() -> { + updateButtonDisableState(); + updateSpinnerInfo(); + resultHandler.run(); + }); + }); UserThread.execute(() -> { updateButtonDisableState(); updateSpinnerInfo(); - resultHandler.run(); }); - }); - - updateButtonDisableState(); - updateSpinnerInfo(); + }, getClass().getSimpleName()); } public void onCancelOffer(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { - createOfferRequested = false; + log.info("Canceling posting offer {}", offer.getId()); createOfferCanceled = true; OpenOfferManager openOfferManager = HavenoUtils.openOfferManager; Optional openOffer = openOfferManager.getOpenOffer(offer.getId()); @@ -1355,7 +1362,7 @@ public abstract class MutableOfferViewModel ext inputDataValid = inputDataValid && getExtraInfoValidationResult().isValid; isNextButtonDisabled.set(!inputDataValid); - isPlaceOfferButtonDisabled.set(createOfferRequested || !inputDataValid || !dataModel.getIsXmrWalletFunded().get()); + isPlaceOfferButtonDisabled.set(createOfferInProgress || !inputDataValid || !dataModel.getIsXmrWalletFunded().get()); } private ValidationResult getExtraInfoValidationResult() {