fix hanging while posting or canceling offer
This commit is contained in:
parent
39909e7936
commit
bfef0f9492
3 changed files with 32 additions and 32 deletions
|
@ -37,7 +37,6 @@ package haveno.core.xmr;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import haveno.common.ThreadUtils;
|
import haveno.common.ThreadUtils;
|
||||||
import haveno.common.UserThread;
|
|
||||||
import haveno.core.api.model.XmrBalanceInfo;
|
import haveno.core.api.model.XmrBalanceInfo;
|
||||||
import haveno.core.offer.OpenOffer;
|
import haveno.core.offer.OpenOffer;
|
||||||
import haveno.core.offer.OpenOfferManager;
|
import haveno.core.offer.OpenOfferManager;
|
||||||
|
@ -163,18 +162,12 @@ public class Balances {
|
||||||
// calculate reserved balance
|
// calculate reserved balance
|
||||||
reservedBalance = reservedOfferBalance.add(reservedTradeBalance);
|
reservedBalance = reservedOfferBalance.add(reservedTradeBalance);
|
||||||
|
|
||||||
|
// play sound if funds received
|
||||||
|
boolean fundsReceived = balanceSumBefore != null && getNonTradeBalanceSum().compareTo(balanceSumBefore) > 0;
|
||||||
|
if (fundsReceived) HavenoUtils.playCashRegisterSound();
|
||||||
|
|
||||||
// notify balance update
|
// notify balance update
|
||||||
UserThread.execute(() -> {
|
updateCounter.set(updateCounter.get() + 1);
|
||||||
|
|
||||||
// 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);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -353,7 +353,7 @@ public class MainView extends InitializableView<StackPane, MainViewModel> {
|
||||||
settingsButtonWithBadge.getStyleClass().add("new");
|
settingsButtonWithBadge.getStyleClass().add("new");
|
||||||
|
|
||||||
navigation.addListener((viewPath, data) -> {
|
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;
|
if (viewPath.size() != 2 || viewPath.indexOf(MainView.class) != 0) return;
|
||||||
|
|
||||||
Class<? extends View> viewClass = viewPath.tip();
|
Class<? extends View> viewClass = viewPath.tip();
|
||||||
|
|
|
@ -19,6 +19,8 @@ package haveno.desktop.main.offer;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.name.Named;
|
import com.google.inject.name.Named;
|
||||||
|
|
||||||
|
import haveno.common.ThreadUtils;
|
||||||
import haveno.common.UserThread;
|
import haveno.common.UserThread;
|
||||||
import haveno.common.app.DevEnv;
|
import haveno.common.app.DevEnv;
|
||||||
import haveno.common.handlers.ErrorMessageHandler;
|
import haveno.common.handlers.ErrorMessageHandler;
|
||||||
|
@ -108,7 +110,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
|
||||||
private String amountDescription;
|
private String amountDescription;
|
||||||
private String addressAsString;
|
private String addressAsString;
|
||||||
private final String paymentLabel;
|
private final String paymentLabel;
|
||||||
private boolean createOfferRequested;
|
private boolean createOfferInProgress;
|
||||||
public boolean createOfferCanceled;
|
public boolean createOfferCanceled;
|
||||||
|
|
||||||
public final StringProperty amount = new SimpleStringProperty();
|
public final StringProperty amount = new SimpleStringProperty();
|
||||||
|
@ -638,32 +640,37 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void onPlaceOffer(Offer offer, Runnable resultHandler) {
|
void onPlaceOffer(Offer offer, Runnable resultHandler) {
|
||||||
errorMessage.set(null);
|
ThreadUtils.execute(() -> {
|
||||||
createOfferRequested = true;
|
|
||||||
createOfferCanceled = false;
|
|
||||||
|
|
||||||
dataModel.onPlaceOffer(offer, transaction -> {
|
|
||||||
resultHandler.run();
|
|
||||||
if (!createOfferCanceled) placeOfferCompleted.set(true);
|
|
||||||
errorMessage.set(null);
|
errorMessage.set(null);
|
||||||
}, errMessage -> {
|
createOfferInProgress = true;
|
||||||
createOfferRequested = false;
|
createOfferCanceled = false;
|
||||||
if (offer.getState() == Offer.State.OFFER_FEE_RESERVED) errorMessage.set(errMessage + Res.get("createOffer.errorInfo"));
|
|
||||||
else errorMessage.set(errMessage);
|
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(() -> {
|
UserThread.execute(() -> {
|
||||||
updateButtonDisableState();
|
updateButtonDisableState();
|
||||||
updateSpinnerInfo();
|
updateSpinnerInfo();
|
||||||
resultHandler.run();
|
|
||||||
});
|
});
|
||||||
});
|
}, getClass().getSimpleName());
|
||||||
|
|
||||||
updateButtonDisableState();
|
|
||||||
updateSpinnerInfo();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onCancelOffer(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
|
public void onCancelOffer(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
|
||||||
createOfferRequested = false;
|
log.info("Canceling posting offer {}", offer.getId());
|
||||||
createOfferCanceled = true;
|
createOfferCanceled = true;
|
||||||
OpenOfferManager openOfferManager = HavenoUtils.openOfferManager;
|
OpenOfferManager openOfferManager = HavenoUtils.openOfferManager;
|
||||||
Optional<OpenOffer> openOffer = openOfferManager.getOpenOffer(offer.getId());
|
Optional<OpenOffer> openOffer = openOfferManager.getOpenOffer(offer.getId());
|
||||||
|
@ -1355,7 +1362,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
|
||||||
inputDataValid = inputDataValid && getExtraInfoValidationResult().isValid;
|
inputDataValid = inputDataValid && getExtraInfoValidationResult().isValid;
|
||||||
|
|
||||||
isNextButtonDisabled.set(!inputDataValid);
|
isNextButtonDisabled.set(!inputDataValid);
|
||||||
isPlaceOfferButtonDisabled.set(createOfferRequested || !inputDataValid || !dataModel.getIsXmrWalletFunded().get());
|
isPlaceOfferButtonDisabled.set(createOfferInProgress || !inputDataValid || !dataModel.getIsXmrWalletFunded().get());
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValidationResult getExtraInfoValidationResult() {
|
private ValidationResult getExtraInfoValidationResult() {
|
||||||
|
|
Loading…
Reference in a new issue