From e5c1ebed1d092800d21441d728e14d5bcd84970b Mon Sep 17 00:00:00 2001 From: crschnick Date: Sat, 20 Apr 2024 05:46:59 +0000 Subject: [PATCH] Fixes --- .../app/terminal/ExternalTerminalType.java | 18 ++++++------------ .../io/xpipe/app/util/DataStoreFormatter.java | 2 +- .../io/xpipe/core/process/ShellDialects.java | 4 ++-- .../io/xpipe/core/util/CoreJacksonModule.java | 4 ++-- .../ext/base/action/BrowseStoreAction.java | 14 ++++++++++++-- .../io/xpipe/ext/base/action/ScanAction.java | 13 ++++++++++++- .../base/desktop/DesktopEnvironmentStore.java | 7 +++---- 7 files changed, 38 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java index 39084cdb..fb2f28ab 100644 --- a/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java +++ b/app/src/main/java/io/xpipe/app/terminal/ExternalTerminalType.java @@ -155,7 +155,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { } @Override - public FailableFunction remoteLaunchCommand() { + public FailableFunction remoteLaunchCommand(ShellDialect systemDialect) { return launchConfiguration -> { var toExecute = CommandBuilder.of() .add(executable, "-v", "--title") @@ -566,7 +566,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { } @Override - public FailableFunction remoteLaunchCommand() { + public FailableFunction remoteLaunchCommand(ShellDialect systemDialect) { return launchConfiguration -> { var toExecute = CommandBuilder.of() .add("open", "-a") @@ -628,7 +628,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { all.addAll(MACOS_TERMINALS); } if (remote) { - all.removeIf(externalTerminalType -> externalTerminalType.remoteLaunchCommand() == null); + all.removeIf(externalTerminalType -> externalTerminalType.remoteLaunchCommand(null) == null); } // Prefer recommended all.sort(Comparator.comparingInt(o -> (o.isRecommended() ? -1 : 0))); @@ -672,7 +672,7 @@ public interface ExternalTerminalType extends PrefsChoiceValue { default void launch(LaunchConfiguration configuration) throws Exception {} - default FailableFunction remoteLaunchCommand() { + default FailableFunction remoteLaunchCommand(ShellDialect systemDialect) { return null; } @@ -714,12 +714,6 @@ public interface ExternalTerminalType extends PrefsChoiceValue { var open = scriptDialect.getOpenScriptCommand(scriptFile.toString()); return open; } - - public CommandBuilder appendDialectLaunchCommand(CommandBuilder b) { - var open = getDialectLaunchCommand(); - b.add(open); - return b; - } } abstract class MacOsType extends ExternalApplicationType.MacApplication implements ExternalTerminalType { @@ -751,12 +745,12 @@ public interface ExternalTerminalType extends PrefsChoiceValue { } @Override - public FailableFunction remoteLaunchCommand() { + public FailableFunction remoteLaunchCommand(ShellDialect systemDialect) { return launchConfiguration -> { var args = toCommand(launchConfiguration); args.add(0, executable); if (explicityAsync) { - args = launchConfiguration.getScriptDialect().launchAsnyc(args); + args = systemDialect.launchAsnyc(args); } return args.buildSimple(); }; diff --git a/app/src/main/java/io/xpipe/app/util/DataStoreFormatter.java b/app/src/main/java/io/xpipe/app/util/DataStoreFormatter.java index 91a1fd4f..87d3676a 100644 --- a/app/src/main/java/io/xpipe/app/util/DataStoreFormatter.java +++ b/app/src/main/java/io/xpipe/app/util/DataStoreFormatter.java @@ -37,7 +37,7 @@ public class DataStoreFormatter { return formattedOsName(s.getOsName()); } - if (s.getShellDialect().equals(ShellDialects.UNSUPPORTED)) { + if (s.getShellDialect().equals(ShellDialects.NO_INTERACTION)) { return null; } diff --git a/core/src/main/java/io/xpipe/core/process/ShellDialects.java b/core/src/main/java/io/xpipe/core/process/ShellDialects.java index f4c4f95d..7805ab7d 100644 --- a/core/src/main/java/io/xpipe/core/process/ShellDialects.java +++ b/core/src/main/java/io/xpipe/core/process/ShellDialects.java @@ -23,7 +23,7 @@ public class ShellDialects { public static ShellDialect CSH; public static ShellDialect FISH; - public static ShellDialect UNSUPPORTED; + public static ShellDialect NO_INTERACTION; public static ShellDialect CISCO; public static ShellDialect MIKROTIK; public static ShellDialect RBASH; @@ -74,7 +74,7 @@ public class ShellDialects { CSH = byId("csh"); ASH = byId("ash"); SH = byId("sh"); - UNSUPPORTED = byId("unsupported"); + NO_INTERACTION = byId("unsupported"); CISCO = byId("cisco"); MIKROTIK = byId("mikrotik"); RBASH = byId("rbash"); diff --git a/core/src/main/java/io/xpipe/core/util/CoreJacksonModule.java b/core/src/main/java/io/xpipe/core/util/CoreJacksonModule.java index 9ca22943..1b43cd61 100644 --- a/core/src/main/java/io/xpipe/core/util/CoreJacksonModule.java +++ b/core/src/main/java/io/xpipe/core/util/CoreJacksonModule.java @@ -96,7 +96,7 @@ public class CoreJacksonModule extends SimpleModule { @Override public ShellDialect deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - var tree = JacksonMapper.getDefault().readTree(p); + JsonNode tree = JacksonMapper.getDefault().readTree(p); if (tree.isObject()) { var t = (JsonNode) tree.get("type"); if (t == null) { @@ -105,7 +105,7 @@ public class CoreJacksonModule extends SimpleModule { return ShellDialects.byNameIfPresent(t.asText()).orElse(null); } - return ShellDialects.byNameIfPresent(p.getValueAsString()).orElse(null); + return ShellDialects.byNameIfPresent(tree.asText()).orElse(null); } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/action/BrowseStoreAction.java b/ext/base/src/main/java/io/xpipe/ext/base/action/BrowseStoreAction.java index a713ac2a..9f4e2256 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/action/BrowseStoreAction.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/action/BrowseStoreAction.java @@ -6,11 +6,11 @@ import io.xpipe.app.core.AppLayoutModel; import io.xpipe.app.ext.ActionProvider; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; +import io.xpipe.core.process.ShellDialects; +import io.xpipe.core.process.ShellStoreState; import io.xpipe.core.store.ShellStore; - import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ObservableValue; - import lombok.Value; public class BrowseStoreAction implements ActionProvider { @@ -19,6 +19,16 @@ public class BrowseStoreAction implements ActionProvider { public DataStoreCallSite getDataStoreCallSite() { return new DataStoreCallSite() { + @Override + public boolean isApplicable(DataStoreEntryRef o) { + var state = o.get().getStorePersistentState(); + if (state instanceof ShellStoreState shellStoreState) { + return shellStoreState.getShellDialect() != ShellDialects.NO_INTERACTION; + } else { + return true; + } + } + @Override public ActionProvider.Action createAction(DataStoreEntryRef store) { return new Action(store.get()); diff --git a/ext/base/src/main/java/io/xpipe/ext/base/action/ScanAction.java b/ext/base/src/main/java/io/xpipe/ext/base/action/ScanAction.java index a8227fa2..d30abb9e 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/action/ScanAction.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/action/ScanAction.java @@ -5,6 +5,8 @@ import io.xpipe.app.ext.ActionProvider; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; import io.xpipe.app.util.ScanAlert; +import io.xpipe.core.process.ShellDialects; +import io.xpipe.core.process.ShellStoreState; import io.xpipe.core.store.ShellStore; import javafx.beans.value.ObservableValue; @@ -34,7 +36,16 @@ public class ScanAction implements ActionProvider { @Override public boolean isApplicable(DataStoreEntryRef o) { - return o.get().getProvider().canHaveSubShells(); + if (!o.get().getProvider().canHaveSubShells()) { + return false; + } + + var state = o.get().getStorePersistentState(); + if (state instanceof ShellStoreState shellStoreState) { + return shellStoreState.getShellDialect() != ShellDialects.NO_INTERACTION; + } else { + return true; + } } @Override diff --git a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopEnvironmentStore.java b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopEnvironmentStore.java index ad2379eb..35786bf6 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopEnvironmentStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopEnvironmentStore.java @@ -89,17 +89,16 @@ public class DesktopEnvironmentStore extends JacksonizedValue } public void runDesktopTerminal(String name, String script) throws Exception { - var launchCommand = terminal.remoteLaunchCommand(); + var launchCommand = terminal.remoteLaunchCommand(base.getStore().getUsedDialect()); var toExecute = (script != null ? getMergedInitCommands( script + "\n" + dialect.getPauseCommand() + "\n" + dialect.getNormalExitCommand()) : getMergedInitCommands(null)); var scriptFile = base.getStore().createScript(dialect, toExecute); var launchScriptFile = base.getStore() - .createScript( - dialect, dialect.prepareTerminalInitFileOpenCommand(dialect, null, scriptFile.toString())); + .createScript(dialect, dialect.prepareTerminalInitFileOpenCommand(dialect, null, scriptFile.toString())); var launchConfig = - new ExternalTerminalType.LaunchConfiguration(null, name, name, launchScriptFile, getUsedDialect()); + new ExternalTerminalType.LaunchConfiguration(null, name, name, launchScriptFile, dialect); base.getStore().runDesktopScript(name, launchCommand.apply(launchConfig)); }