From cbae6d156f1a2989d1d031d06ea3492113817613 Mon Sep 17 00:00:00 2001 From: crschnick Date: Wed, 29 Apr 2026 03:27:50 +0000 Subject: [PATCH] Rework --- .../java/io/xpipe/app/rdp/CustomRdpClient.java | 2 +- .../io/xpipe/app/rdp/DevolutionsRdpClient.java | 2 +- .../io/xpipe/app/rdp/ExternalRdpClient.java | 2 +- .../java/io/xpipe/app/rdp/FreeRdpClient.java | 2 +- .../java/io/xpipe/app/rdp/MstscRdpClient.java | 4 ++-- .../java/io/xpipe/app/rdp/RemminaRdpClient.java | 17 ++++++++++------- .../app/rdp/RemoteDesktopAppRdpClient.java | 2 +- .../io/xpipe/app/rdp/WindowsAppRdpClient.java | 2 +- 8 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java index b00bb140a..1cc62e609 100644 --- a/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/CustomRdpClient.java @@ -54,7 +54,7 @@ public class CustomRdpClient implements ExternalApplicationType, ExternalRdpClie } @Override - public boolean supportsPasswordPassing() { + public boolean supportsPasswordPassing(RdpLaunchConfig config) { return false; } diff --git a/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java index 5435f2b60..f002319a2 100644 --- a/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/DevolutionsRdpClient.java @@ -56,7 +56,7 @@ public class DevolutionsRdpClient implements ExternalApplicationType.WindowsType } @Override - public boolean supportsPasswordPassing() { + public boolean supportsPasswordPassing(RdpLaunchConfig config) { return false; } diff --git a/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java index 3b25ce7ee..25811acf6 100644 --- a/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/ExternalRdpClient.java @@ -83,7 +83,7 @@ public interface ExternalRdpClient extends PrefsValue { void launch(RdpLaunchConfig configuration) throws Exception; - boolean supportsPasswordPassing(); + boolean supportsPasswordPassing(RdpLaunchConfig config); String getWebsite(); diff --git a/app/src/main/java/io/xpipe/app/rdp/FreeRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/FreeRdpClient.java index 81f17f930..e65e8b589 100644 --- a/app/src/main/java/io/xpipe/app/rdp/FreeRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/FreeRdpClient.java @@ -66,7 +66,7 @@ public class FreeRdpClient implements ExternalRdpClient { } @Override - public boolean supportsPasswordPassing() { + public boolean supportsPasswordPassing(RdpLaunchConfig config) { return true; } diff --git a/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java index ba9a23ada..44fe78ad2 100644 --- a/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/MstscRdpClient.java @@ -199,7 +199,7 @@ public class MstscRdpClient implements ExternalApplicationType.PathApplication, } @Override - public boolean supportsPasswordPassing() { + public boolean supportsPasswordPassing(RdpLaunchConfig config) { return LocalShell.getLocalPowershell().isPresent(); } @@ -232,7 +232,7 @@ public class MstscRdpClient implements ExternalApplicationType.PathApplication, private RdpConfig getAdaptedConfig(RdpLaunchConfig configuration) throws Exception { var input = configuration.getConfig(); var pass = configuration.getPassword(); - if (input.get("password 51").isPresent() || !supportsPasswordPassing() || pass == null) { + if (input.get("password 51").isPresent() || !supportsPasswordPassing(configuration) || pass == null) { return input.overlay(Map.of("smart sizing", new RdpConfig.TypedValue("i", smartSizing ? "1" : "0"))); } diff --git a/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java index 3922eb0a7..e83a3f562 100644 --- a/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/RemminaRdpClient.java @@ -21,10 +21,14 @@ public class RemminaRdpClient implements ExternalApplicationType.LinuxApplicatio return List.of("auto connect", "password 51", "prompt for credentials", "smart sizing"); } + private boolean containsOnlyRecognizedOptions(RdpLaunchConfig configuration) { + var l = new HashSet<>(configuration.getConfig().getContent().keySet()); + toStrip().forEach(l::remove); + return l.size() == 2 && l.contains("username") && l.contains("full address"); + } + @Override public void launch(RdpLaunchConfig configuration) throws Exception { - RdpConfig c = configuration.getConfig(); - // Remmina does not support RemoteApps if (configuration.isRemoteApp()) { var freerdp = new FreeRdpClient(); @@ -34,9 +38,7 @@ public class RemminaRdpClient implements ExternalApplicationType.LinuxApplicatio } } - var l = new HashSet<>(c.getContent().keySet()); - toStrip().forEach(l::remove); - if (l.size() == 2 && l.contains("username") && l.contains("full address")) { + if (containsOnlyRecognizedOptions(configuration)) { var encrypted = RemminaHelper.encryptPassword(configuration.getPassword()); if (encrypted.isPresent()) { var file = RemminaHelper.writeRemminaRdpConfigFile(configuration, encrypted.get()); @@ -45,14 +47,15 @@ public class RemminaRdpClient implements ExternalApplicationType.LinuxApplicatio } } + RdpConfig c = configuration.getConfig(); var file = writeRdpConfigFile(configuration.getTitle(), c); launch(CommandBuilder.of().add("-c").addFile(file.toString())); LocalFileTracker.deleteOnExit(file); } @Override - public boolean supportsPasswordPassing() { - return false; + public boolean supportsPasswordPassing(RdpLaunchConfig config) { + return config.isRemoteApp() || containsOnlyRecognizedOptions(config); } @Override diff --git a/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java index 9f6cd2f57..6b2edb56c 100644 --- a/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/RemoteDesktopAppRdpClient.java @@ -34,7 +34,7 @@ public class RemoteDesktopAppRdpClient implements ExternalApplicationType.MacApp } @Override - public boolean supportsPasswordPassing() { + public boolean supportsPasswordPassing(RdpLaunchConfig config) { return false; } diff --git a/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java b/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java index 645145c24..1219c1a7c 100644 --- a/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java +++ b/app/src/main/java/io/xpipe/app/rdp/WindowsAppRdpClient.java @@ -33,7 +33,7 @@ public class WindowsAppRdpClient implements ExternalApplicationType.MacApplicati } @Override - public boolean supportsPasswordPassing() { + public boolean supportsPasswordPassing(RdpLaunchConfig config) { return false; }