remove 'danger' from warning on shut down with offers

This commit is contained in:
woodser 2023-08-16 10:24:52 -04:00
parent 9c5d0702ba
commit de7e40e0f0
2 changed files with 64 additions and 47 deletions

View File

@ -703,6 +703,17 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
return offer.isMyOffer(keyRing); return offer.isMyOffer(keyRing);
} }
public boolean hasOpenOffers() {
synchronized (openOffers) {
for (OpenOffer openOffer : getOpenOffers()) {
if (openOffer.getState() == OpenOffer.State.AVAILABLE) {
return true;
}
}
return false;
}
}
public List<OpenOffer> getOpenOffers() { public List<OpenOffer> getOpenOffers() {
synchronized (openOffers) { synchronized (openOffers) {
return new ArrayList<>(getObservableList()); return new ArrayList<>(getObservableList());

View File

@ -36,7 +36,6 @@ import haveno.common.setup.GracefulShutDownHandler;
import haveno.common.setup.UncaughtExceptionHandler; import haveno.common.setup.UncaughtExceptionHandler;
import haveno.common.util.Utilities; import haveno.common.util.Utilities;
import haveno.core.locale.Res; import haveno.core.locale.Res;
import haveno.core.offer.OpenOffer;
import haveno.core.offer.OpenOfferManager; import haveno.core.offer.OpenOfferManager;
import haveno.core.support.dispute.arbitration.ArbitrationManager; import haveno.core.support.dispute.arbitration.ArbitrationManager;
import haveno.core.support.dispute.mediation.MediationManager; import haveno.core.support.dispute.mediation.MediationManager;
@ -336,14 +335,64 @@ public class HavenoApp extends Application implements UncaughtExceptionHandler {
} }
private void shutDownByUser() { private void shutDownByUser() {
String potentialIssues = checkTradesAtShutdown() + checkDisputesAtShutdown() + checkOffersAtShutdown(); promptUserAtShutdown().thenAccept(okToShutDown -> {
promptUserAtShutdown(potentialIssues).thenAccept(asyncOkToShutDown -> { if (okToShutDown) {
if (asyncOkToShutDown) {
stop(); stop();
} }
}); });
} }
private CompletableFuture<Boolean> promptUserAtShutdown() {
final CompletableFuture<Boolean> resp = new CompletableFuture<>();
// check for trade or dispute issues
String issues = checkTradesAtShutdown() + checkDisputesAtShutdown();
if (issues.length() > 0) {
String key = Utilities.encodeToHex(Hash.getSha256Hash(issues));
if (injector.getInstance(Preferences.class).showAgain(key) && !DevEnv.isDevMode()) {
new Popup().warning(issues)
.actionButtonText(Res.get("shared.okWait"))
.onAction(() -> resp.complete(false))
.closeButtonText(Res.get("shared.closeAnywayDanger"))
.onClose(() -> resp.complete(true))
.dontShowAgainId(key)
.width(800)
.show();
return resp;
}
}
// check for open offers
if (injector.getInstance(OpenOfferManager.class).hasOpenOffers()) {
String key = "showOpenOfferWarnPopupAtShutDown";
if (injector.getInstance(Preferences.class).showAgain(key) && !DevEnv.isDevMode()) {
new Popup().warning(Res.get("popup.info.shutDownWithOpenOffers"))
.actionButtonText(Res.get("shared.shutDown"))
.onAction(() -> resp.complete(true))
.closeButtonText(Res.get("shared.cancel"))
.onClose(() -> resp.complete(false))
.dontShowAgainId(key)
.show();
return resp;
}
}
// if no warning popup has been shown yet, prompt user if they really intend to shut down
String key = "popup.info.shutDownQuery";
if (injector.getInstance(Preferences.class).showAgain(key) && !DevEnv.isDevMode()) {
new Popup().headLine(Res.get("popup.info.shutDownQuery"))
.actionButtonText(Res.get("shared.yes"))
.onAction(() -> resp.complete(true))
.closeButtonText(Res.get("shared.no"))
.onClose(() -> resp.complete(false))
.dontShowAgainId(key)
.show();
} else {
resp.complete(true);
}
return resp;
}
private String checkTradesAtShutdown() { private String checkTradesAtShutdown() {
log.info("Checking trades at shutdown"); log.info("Checking trades at shutdown");
Instant fiveMinutesAgo = Instant.ofEpochSecond(Instant.now().getEpochSecond() - TimeUnit.MINUTES.toSeconds(5)); Instant fiveMinutesAgo = Instant.ofEpochSecond(Instant.now().getEpochSecond() - TimeUnit.MINUTES.toSeconds(5));
@ -369,49 +418,6 @@ public class HavenoApp extends Application implements UncaughtExceptionHandler {
return ""; return "";
} }
private String checkOffersAtShutdown() {
log.info("Checking offers at shutdown");
for (OpenOffer openOffer : injector.getInstance(OpenOfferManager.class).getObservableList()) {
if (openOffer.getState().equals(OpenOffer.State.AVAILABLE)) {
return Res.get("popup.info.shutDownWithOpenOffers") + System.lineSeparator() + System.lineSeparator();
}
}
return "";
}
private CompletableFuture<Boolean> promptUserAtShutdown(String issueInfo) {
final CompletableFuture<Boolean> asyncStatus = new CompletableFuture<>();
if (issueInfo.length() > 0) {
// We maybe show a popup to inform user that some issues are pending
String key = Utilities.encodeToHex(Hash.getSha256Hash(issueInfo));
if (injector.getInstance(Preferences.class).showAgain(key) && !DevEnv.isDevMode()) {
new Popup().warning(issueInfo)
.actionButtonText(Res.get("shared.okWait"))
.onAction(() -> asyncStatus.complete(false))
.closeButtonText(Res.get("shared.closeAnywayDanger"))
.onClose(() -> asyncStatus.complete(true))
.dontShowAgainId(key)
.width(800)
.show();
return asyncStatus;
}
}
// if no warning popup has been shown yet, prompt user if they really intend to shut down
String key = "popup.info.shutDownQuery";
if (injector.getInstance(Preferences.class).showAgain(key) && !DevEnv.isDevMode()) {
new Popup().headLine(Res.get("popup.info.shutDownQuery"))
.actionButtonText(Res.get("shared.yes"))
.onAction(() -> asyncStatus.complete(true))
.closeButtonText(Res.get("shared.no"))
.onClose(() -> asyncStatus.complete(false))
.dontShowAgainId(key)
.show();
} else {
asyncStatus.complete(true);
}
return asyncStatus;
}
// Used for debugging trade process // Used for debugging trade process
private void showDebugWindow(Scene scene, Injector injector) { private void showDebugWindow(Scene scene, Injector injector) {
ViewLoader viewLoader = injector.getInstance(ViewLoader.class); ViewLoader viewLoader = injector.getInstance(ViewLoader.class);