From 915a3100a94e50aaa727adcac5ccfe4e9fc11eaa Mon Sep 17 00:00:00 2001 From: crschnick Date: Sat, 4 Nov 2023 05:31:36 +0000 Subject: [PATCH] Script fixes --- .../io/xpipe/ext/base/script/ScriptStore.java | 29 ++++++++++++++----- .../ext/base/script/SimpleScriptStore.java | 6 +++- .../resources/lang/translations_en.properties | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStore.java b/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStore.java index 2153d03ec..5891cad06 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/ScriptStore.java @@ -34,16 +34,11 @@ public abstract class ScriptStore extends JacksonizedValue implements DataStore, public static ShellControl controlWithScripts(ShellControl pc, List> initScripts, List> bringScripts) { var initFlattened = flatten(initScripts); - initFlattened.forEach(simpleScriptStore -> { - if (pc.getInitCommands().contains(simpleScriptStore)) { - return; - } - - pc.initWith(simpleScriptStore); - }); + var bringFlattened = flatten(bringScripts); pc.onInit(shellControl -> { - var bringFlattened = flatten(bringScripts); + passInitScripts(pc, initFlattened); + var dir = initScriptsDirectory(shellControl, bringFlattened); if (dir != null) { shellControl.initWith(new SimpleScriptSnippet(shellControl.getShellDialect().appendToPathVariableCommand(dir), ScriptSnippet.ExecutionType.TERMINAL_ONLY)); @@ -52,12 +47,30 @@ public abstract class ScriptStore extends JacksonizedValue implements DataStore, return pc; } + private static void passInitScripts(ShellControl pc, List scriptStores) throws Exception { + scriptStores.forEach(simpleScriptStore -> { + if (pc.getInitCommands().contains(simpleScriptStore)) { + return; + } + + if (!simpleScriptStore.getMinimumDialect().isCompatibleTo(pc.getShellDialect())) { + return; + } + + pc.initWith(simpleScriptStore); + }); + } + private static String initScriptsDirectory(ShellControl proc, List scriptStores) throws Exception { if (scriptStores.isEmpty()) { return null; } var applicable = scriptStores.stream().filter(simpleScriptStore -> simpleScriptStore.getMinimumDialect().isCompatibleTo(proc.getShellDialect())).toList(); + if (applicable.isEmpty()) { + return null; + } + var refs = applicable.stream().map(scriptStore -> { return DataStorage.get().getStoreEntries().stream().filter(dataStoreEntry -> dataStoreEntry.getStore() == scriptStore).findFirst().orElseThrow().ref(); }).toList(); diff --git a/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStore.java b/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStore.java index 2a6ddafe8..677312a76 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/script/SimpleScriptStore.java @@ -13,6 +13,7 @@ import lombok.extern.jackson.Jacksonized; import java.util.LinkedHashSet; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @SuperBuilder @@ -43,17 +44,20 @@ public class SimpleScriptStore extends ScriptStore implements ScriptSnippet { @Override public List> getEffectiveScripts() { return scripts != null - ? scripts.stream().filter(scriptStore -> scriptStore != null).toList() + ? scripts.stream().filter(Objects::nonNull).toList() : List.of(); } public void queryFlattenedScripts(LinkedHashSet all) { + // Prevent loop all.add(this); getEffectiveScripts().stream() .filter(scriptStoreDataStoreEntryRef -> !all.contains(scriptStoreDataStoreEntryRef.getStore())) .forEach(scriptStoreDataStoreEntryRef -> { scriptStoreDataStoreEntryRef.getStore().queryFlattenedScripts(all); }); + all.remove(this); + all.add(this); } @Override diff --git a/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties b/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties index f8523c556..aa4c88c98 100644 --- a/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties +++ b/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties @@ -74,7 +74,7 @@ snippetsDescription=Other scripts to run first snippetsDependenciesDescription=All possible scripts that should be run if applicable isDefault=Run on init in all compatible shells bringToShells=Bring to all compatible shells -isDefaultGroup=Enable all group scripts +isDefaultGroup=Run all group scripts on shell init executionType=Execution type executionTypeDescription=When to run this snippet minimumShellDialect=Shell type