diff --git a/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java b/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java index 150fed8a4..51b21763c 100644 --- a/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java +++ b/app/src/main/java/io/xpipe/app/prefs/AppPrefs.java @@ -875,7 +875,9 @@ public final class AppPrefs { rdpClientType.setValue(ExternalRdpClient.determineDefault(rdpClientType.get())); spiceClient.setValue(ExternalSpiceClient.determineDefault(spiceClient.getValue())); passwordManager.setValue(PasswordManager.determineDefault(passwordManager.getValue())); - terminalMultiplexer.setValue(TerminalMultiplexer.determineDefault(terminalMultiplexer.getValue())); + + // We don't want to set a multiplexer by default really + // terminalMultiplexer.setValue(TerminalMultiplexer.determineDefault(terminalMultiplexer.getValue())); PrefsProvider.getAll().forEach(prov -> prov.initDefaultValues()); } diff --git a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java index d470f037e..3416f2122 100644 --- a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java @@ -391,7 +391,7 @@ public class TerminalCategory extends AppPrefsCategory { return false; } - return TerminalProxyManager.getProxy().isEmpty() + return !TerminalProxyManager.hasConfiguredProxy() && !TerminalMultiplexerManager.isAvailableOnWindows(); }, prefs.terminalProxy(), diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java b/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java index 731cd7247..abe9fc3e1 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalLauncher.java @@ -252,7 +252,7 @@ public class TerminalLauncher { // Throw if not supported multiplexer.get().checkSupported(control); - var session = TerminalMultiplexerManager.getActiveMultiplexerSession(); + var session = TerminalMultiplexerManager.getActiveMultiplexerSession(true); if (session.isEmpty()) { return false; } diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalMultiplexerManager.java b/app/src/main/java/io/xpipe/app/terminal/TerminalMultiplexerManager.java index a8695d7a2..6e9570a9b 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalMultiplexerManager.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalMultiplexerManager.java @@ -107,6 +107,16 @@ public class TerminalMultiplexerManager { if (pendingMultiplexerLaunch == null) { // Give it a bit more time if it just started ThreadHelper.sleep(1000); + + // Wait for max 10s + for (int j = 0; j < 100; j++) { + if (getActiveMultiplexerSession(false).isPresent()) { + break; + } + + ThreadHelper.sleep(100); + } + break; } @@ -149,7 +159,7 @@ public class TerminalMultiplexerManager { return Optional.ofNullable(runningMultiplexerContainer); } - public static Optional getActiveMultiplexerSession() { + public static Optional getActiveMultiplexerSession(boolean includeStarting) { var mult = getEffectiveMultiplexer(); if (mult.isEmpty()) { return Optional.empty(); @@ -158,7 +168,7 @@ public class TerminalMultiplexerManager { var noSessions = TerminalView.get().getSessions().stream() .noneMatch(shellSession -> shellSession.getTerminal().isRunning() && (mult.get() == connectionHubRequests.get(shellSession.getRequest()))); - if (noSessions) { + if (includeStarting && noSessions) { var starting = TerminalView.get().getSessions().stream() .filter(shellSession -> shellSession.getTerminal().isRunning() && runningMultiplexerContainerType == mult.get() diff --git a/app/src/main/java/io/xpipe/app/terminal/TerminalProxyManager.java b/app/src/main/java/io/xpipe/app/terminal/TerminalProxyManager.java index 616846709..08f57af69 100644 --- a/app/src/main/java/io/xpipe/app/terminal/TerminalProxyManager.java +++ b/app/src/main/java/io/xpipe/app/terminal/TerminalProxyManager.java @@ -40,6 +40,21 @@ public class TerminalProxyManager { return id.equals("wsl"); } + public static boolean hasConfiguredProxy() { + var uuid = AppPrefs.get().terminalProxy().getValue(); + var hasCustomTerminalShell = uuid != null && !DataStorage.get().local().getUuid().equals(uuid); + if (!hasCustomTerminalShell) { + return false; + } + + var foundEntry = DataStorage.get().getStoreEntryIfPresent(uuid); + if (foundEntry.isEmpty()) { + return false; + } + + return true; + } + public static Optional getProxy() { var uuid = AppPrefs.get().terminalProxy().getValue(); var hasCustomTerminalShell =