From dc0f01a4ff0e2d0856a4570e0f88bd1abbbf09c3 Mon Sep 17 00:00:00 2001 From: crschnick Date: Thu, 8 Jan 2026 13:32:06 +0000 Subject: [PATCH] Improve startup shell error handling --- .../io/xpipe/app/core/check/AppShellChecker.java | 14 +++++++++----- .../io/xpipe/app/issue/ErrorHandlerDialog.java | 7 ++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/core/check/AppShellChecker.java b/app/src/main/java/io/xpipe/app/core/check/AppShellChecker.java index 33e55375b..157cc088b 100644 --- a/app/src/main/java/io/xpipe/app/core/check/AppShellChecker.java +++ b/app/src/main/java/io/xpipe/app/core/check/AppShellChecker.java @@ -22,6 +22,12 @@ public abstract class AppShellChecker { } var originalErr = selfTestErrorCheck(); + + // If we are already in fallback mode and can somehow continue, we should do so instantly + if (originalErr.isPresent() && originalErr.get().isCanContinue() && !isDefaultShell) { + return; + } + if (originalErr.isPresent() && (shouldAttemptFallbackForProcessStartFail() || !originalErr.get().isProcessSpawnIssue())) { @@ -37,12 +43,10 @@ public abstract class AppShellChecker { var fallbackErr = selfTestErrorCheck(); if (fallbackErr.isPresent()) { var msg = formatMessage(fallbackErr.get().getMessage()); - var event = ErrorEventFactory.fromThrowable(new IllegalStateException(msg)); + var event = ErrorEventFactory.fromThrowable(new IllegalStateException(msg)) + .documentationLink(DocumentationLink.LOCAL_SHELL_WARNING); // Only make it terminal if both shells can't continue - if (originalErr.get().isCanContinue()) { - // Toggle back if both shells have issues - toggleFallback(); - } else if (!fallbackErr.get().isCanContinue()) { + if (!fallbackErr.get().isCanContinue()) { event.term(); } event.handle(); diff --git a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java index 8d7aa8f68..84b3d0de9 100644 --- a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java +++ b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java @@ -11,6 +11,7 @@ import io.xpipe.app.process.ProcessOutputException; import io.xpipe.app.util.Deobfuscator; import javafx.application.Platform; +import javafx.beans.property.SimpleBooleanProperty; import javafx.geometry.Insets; import javafx.scene.control.TextArea; import javafx.scene.layout.Region; @@ -57,16 +58,16 @@ public class ErrorHandlerDialog { false)); } if (event.isReportable()) { + var reported = new SimpleBooleanProperty(); errorModal.addButton(new ModalButton( "report", () -> { if (UserReportComp.show(event)) { - comp.getTakenAction().setValue(ErrorAction.ignore()); - errorModal.close(); + reported.set(true); } }, false, - false)); + false)).augment(button -> button.disableProperty().bind(reported)); errorModal.addButtonBarComp(Comp.hspacer()); } var hasCustomActions = event.getCustomActions().size() > 0 || event.getLink() != null;