diff --git a/app/src/main/java/io/xpipe/app/comp/base/StoreToggleComp.java b/app/src/main/java/io/xpipe/app/comp/base/StoreToggleComp.java index 9aa03175b..c6fd0ba7c 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/StoreToggleComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/StoreToggleComp.java @@ -8,8 +8,10 @@ import io.xpipe.app.util.ThreadHelper; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableBooleanValue; import javafx.scene.layout.Region; import lombok.AllArgsConstructor; +import lombok.Setter; import java.util.function.Consumer; @@ -20,6 +22,8 @@ public class StoreToggleComp extends SimpleComp { private final StoreSection section; private final BooleanProperty value; private final Consumer onChange; + @Setter + private ObservableBooleanValue customVisibility = new SimpleBooleanProperty(true); public StoreToggleComp(String nameKey, StoreSection section, boolean initial, Consumer onChange) { this.nameKey = nameKey; @@ -28,16 +32,28 @@ public class StoreToggleComp extends SimpleComp { this.onChange = onChange; } + public StoreToggleComp(String nameKey, StoreSection section, BooleanProperty initial, Consumer onChange) { + this.nameKey = nameKey; + this.section = section; + this.value = initial; + this.onChange = onChange; + } + @Override protected Region createSimple() { var disable = section.getWrapper().getValidity().map(state -> state != DataStoreEntry.Validity.COMPLETE); var visible = Bindings.createBooleanBinding( () -> { + if (!this.customVisibility.get()) { + return false; + } + return section.getWrapper().getValidity().getValue() == DataStoreEntry.Validity.COMPLETE && section.getShowDetails().get(); }, section.getWrapper().getValidity(), - section.getShowDetails()); + section.getShowDetails(), + this.customVisibility); var t = new ToggleSwitchComp(value, AppI18n.observable(nameKey)) .visible(visible) .disable(disable); diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java index a7f5d0cce..7ee778180 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java @@ -114,7 +114,7 @@ public abstract class StoreEntryComp extends SimpleComp { var loading = LoadingOverlayComp.noProgress( Comp.of(() -> button), - wrapper.getInRefresh().and(wrapper.getObserving().not())); + wrapper.getBusy().or(wrapper.getEntry().getProvider().busy(wrapper))); return loading.createRegion(); } diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java index 17a58aafb..a8ba919d8 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryWrapper.java @@ -10,12 +10,12 @@ import io.xpipe.app.storage.DataStoreColor; import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.util.ThreadHelper; import javafx.beans.property.*; -import javafx.collections.FXCollections; import lombok.Getter; import java.time.Duration; import java.time.Instant; import java.util.Comparator; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -26,15 +26,14 @@ public class StoreEntryWrapper { private final DataStoreEntry entry; private final Property lastAccess; private final BooleanProperty disabled = new SimpleBooleanProperty(); - private final BooleanProperty inRefresh = new SimpleBooleanProperty(); - private final BooleanProperty observing = new SimpleBooleanProperty(); + private final BooleanProperty busy = new SimpleBooleanProperty(); private final Property validity = new SimpleObjectProperty<>(); private final Map actionProviders; private final Property> defaultActionProvider; private final BooleanProperty deletable = new SimpleBooleanProperty(); private final BooleanProperty expanded = new SimpleBooleanProperty(); private final Property persistentState = new SimpleObjectProperty<>(); - private final MapProperty cache = new SimpleMapProperty<>(FXCollections.observableHashMap()); + private final Property> cache = new SimpleObjectProperty<>(Map.of()); private final Property color = new SimpleObjectProperty<>(); private final Property category = new SimpleObjectProperty<>(); private final Property summary = new SimpleObjectProperty<>(); @@ -112,12 +111,12 @@ public class StoreEntryWrapper { disabled.setValue(entry.isDisabled()); validity.setValue(entry.getValidity()); expanded.setValue(entry.isExpanded()); - observing.setValue(entry.isObserving()); persistentState.setValue(entry.getStorePersistentState()); - cache.putAll(entry.getStoreCache()); + // Use map copy to recognize update + cache.setValue(new HashMap<>(entry.getStoreCache())); color.setValue(entry.getColor()); - inRefresh.setValue(entry.isInRefresh()); + busy.setValue(entry.isInRefresh()); deletable.setValue(entry.getConfiguration().isDeletable() || AppPrefs.get().developerDisableGuiRestrictions().getValue()); diff --git a/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java b/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java index 2e3a9b4c9..65745fd8d 100644 --- a/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java +++ b/app/src/main/java/io/xpipe/app/ext/DataStoreProvider.java @@ -18,12 +18,19 @@ import io.xpipe.core.util.JacksonizedValue; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; import javafx.beans.property.Property; +import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ObservableBooleanValue; import javafx.beans.value.ObservableValue; import java.util.List; public interface DataStoreProvider { + + default ObservableBooleanValue busy(StoreEntryWrapper wrapper) { + return new SimpleBooleanProperty(false); + } + default boolean editByDefault() { return false; } diff --git a/app/src/main/java/io/xpipe/app/ext/SingletonSessionStoreProvider.java b/app/src/main/java/io/xpipe/app/ext/SingletonSessionStoreProvider.java new file mode 100644 index 000000000..57d3175c7 --- /dev/null +++ b/app/src/main/java/io/xpipe/app/ext/SingletonSessionStoreProvider.java @@ -0,0 +1,68 @@ +package io.xpipe.app.ext; + +import io.xpipe.app.comp.base.StoreToggleComp; +import io.xpipe.app.comp.base.SystemStateComp; +import io.xpipe.app.comp.store.StoreEntryComp; +import io.xpipe.app.comp.store.StoreEntryWrapper; +import io.xpipe.app.comp.store.StoreSection; +import io.xpipe.app.fxcomps.Comp; +import io.xpipe.app.util.ThreadHelper; +import io.xpipe.core.store.SingletonSessionStore; +import javafx.beans.binding.Bindings; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.value.ObservableBooleanValue; + +public interface SingletonSessionStoreProvider extends DataStoreProvider { + + @Override + public default ObservableBooleanValue busy(StoreEntryWrapper wrapper) { + return Bindings.createBooleanBinding(() -> { + SingletonSessionStore s = wrapper.getEntry().getStore().asNeeded(); + return s.isEnabled() != s.isRunning(); + }, wrapper.getCache()); + } + + @Override + public default StoreEntryComp customEntryComp(StoreSection sec, boolean preferLarge) { + var t = createToggleComp(sec); + return StoreEntryComp.create(sec.getWrapper(), t, preferLarge); + } + + default Comp createToggleComp(StoreSection sec) { + var enabled = new SimpleBooleanProperty(); + sec.getWrapper().getCache().subscribe((newValue) -> { + SingletonSessionStore s = sec.getWrapper().getEntry().getStore().asNeeded(); + enabled.set(s.isEnabled()); + }); + + var t = new StoreToggleComp(null, sec, enabled, aBoolean -> { + SingletonSessionStore s = sec.getWrapper().getEntry().getStore().asNeeded(); + if (s.isEnabled() != aBoolean) { + ThreadHelper.runFailableAsync(() -> { + if (aBoolean) { + s.startSessionIfNeeded(); + } else { + s.stopSessionIfNeeded(); + } + }); + } + }); + return t; + } + + public default Comp stateDisplay(StoreEntryWrapper w) { + return new SystemStateComp( + Bindings.createObjectBinding( + () -> { + SingletonSessionStore s = w.getEntry().getStore().asNeeded(); + if (!s.isEnabled()) { + return SystemStateComp.State.OTHER; + } + + return s.isRunning() + ? SystemStateComp.State.SUCCESS + : SystemStateComp.State.FAILURE; + }, + w.getCache())); + } +} diff --git a/app/src/main/java/io/xpipe/app/ext/SingletonToggleSessionStoreProvider.java b/app/src/main/java/io/xpipe/app/ext/SingletonToggleSessionStoreProvider.java deleted file mode 100644 index b9fc6f674..000000000 --- a/app/src/main/java/io/xpipe/app/ext/SingletonToggleSessionStoreProvider.java +++ /dev/null @@ -1,71 +0,0 @@ -package io.xpipe.app.ext; - -import io.xpipe.app.comp.base.StoreToggleComp; -import io.xpipe.app.comp.base.SystemStateComp; -import io.xpipe.app.comp.store.StoreEntryComp; -import io.xpipe.app.comp.store.StoreEntryWrapper; -import io.xpipe.app.comp.store.StoreSection; -import io.xpipe.app.fxcomps.Comp; -import io.xpipe.app.storage.DataStorage; -import io.xpipe.app.storage.DataStoreEntry; -import io.xpipe.core.store.SingletonToggleSessionStore; -import io.xpipe.core.store.ToggleSessionState; -import javafx.beans.binding.Bindings; -import javafx.beans.property.SimpleBooleanProperty; - -public interface SingletonToggleSessionStoreProvider extends DataStoreProvider { - - @Override - public default StoreEntryComp customEntryComp(StoreSection sec, boolean preferLarge) { - SingletonToggleSessionStore s = sec.getWrapper().getEntry().getStore().asNeeded(); - - var enabled = new SimpleBooleanProperty(); - sec.getWrapper().getPersistentState().subscribe((newValue) -> { - var rdps = (ToggleSessionState) newValue; - enabled.set(rdps.getEnabled() != null ? rdps.getEnabled() : false); - }); - - var t = new StoreToggleComp(null, sec, enabled, aBoolean -> { - var state = s.getState(); - if (state.getEnabled() != aBoolean) { - state.setEnabled(aBoolean); - s.setState(state); - sec.getWrapper().getEntry().validate(); - } - }); - return StoreEntryComp.create(sec.getWrapper(), t, preferLarge); - } - - public default Comp stateDisplay(StoreEntryWrapper w) { - SingletonToggleSessionStore st = w.getEntry().getStore().asNeeded(); - return new SystemStateComp( - Bindings.createObjectBinding( - () -> { - ToggleSessionState s = (ToggleSessionState) w.getPersistentState().getValue(); - if (s.getEnabled() == null || !s.getEnabled()) { - return SystemStateComp.State.OTHER; - } - - return s.getRunning() != null && s.getRunning() - ? SystemStateComp.State.SUCCESS - : SystemStateComp.State.FAILURE; - }, - w.getPersistentState(), - w.getCache())); - } - - @Override - public default void storageInit() { - for (DataStoreEntry e : DataStorage.get().getStoreEntries()) { - if (getStoreClasses().stream() - .anyMatch(aClass -> - e.getStore() != null && e.getStore().getClass().equals(aClass))) { - SingletonToggleSessionStore tunnelStore = e.getStore().asNeeded(); - var state = tunnelStore.getState(); - state.setEnabled(false); - tunnelStore.setState(state); - } - } - } - -} diff --git a/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java b/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java index 2989e4017..f3c3c7f77 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStoreEntry.java @@ -47,10 +47,6 @@ public class DataStoreEntry extends StorageElement { @NonFinal boolean inRefresh; - @NonFinal - @Setter - boolean observing; - @Getter @NonFinal DataStoreProvider provider; diff --git a/app/src/main/java/io/xpipe/app/util/ObservableDataStore.java b/app/src/main/java/io/xpipe/app/util/ObservableDataStore.java deleted file mode 100644 index 3c96a1a9c..000000000 --- a/app/src/main/java/io/xpipe/app/util/ObservableDataStore.java +++ /dev/null @@ -1,48 +0,0 @@ -package io.xpipe.app.util; - -import io.xpipe.app.storage.DataStorage; -import io.xpipe.core.store.DataStore; -import io.xpipe.core.store.InternalCacheDataStore; - -import java.util.Timer; -import java.util.TimerTask; - -public interface ObservableDataStore extends DataStore, InternalCacheDataStore { - - default void toggleObserverState(boolean state) { - setObserverState(state); - var entry = DataStorage.get().getStoreEntry(this); - entry.setObserving(state); - if (state) { - var timer = getCache("oberserverTimer", Timer.class, null); - if (timer == null) { - timer = new Timer(true); - timer.scheduleAtFixedRate( - new TimerTask() { - @Override - public void run() { - if (getObserverState()) { - refresh(); - } - } - }, - 0, - 20000); - setCache("oberserverTimer", timer); - } - } - } - - default boolean getObserverState() { - return getCache("observerState", Boolean.class, false); - } - - default void setObserverState(boolean state) { - setCache("observerState", state); - } - - private void refresh() { - var entry = DataStorage.get().getStoreEntry(this); - DataStorage.get().refreshChildren(entry); - } -} diff --git a/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java b/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java index 681df6c91..2d63f58d5 100644 --- a/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java +++ b/core/src/main/java/io/xpipe/core/store/SingletonSessionStore.java @@ -1,6 +1,6 @@ package io.xpipe.core.store; -public interface SingletonSessionStore extends InternalCacheDataStore { +public interface SingletonSessionStore extends ExpandedLifecycleStore, InternalCacheDataStore { static abstract class Session { @@ -11,7 +11,27 @@ public interface SingletonSessionStore public abstract void stop() throws Exception; } - void onSessionUpdate(boolean active); + @Override + public default void finalizeValidate() throws Exception { + stopSessionIfNeeded(); + } + + default void setEnabled(boolean value) { + setCache("sessionEnabled", value); + } + + default boolean isRunning() { + return getCache("sessionRunning", Boolean.class, false); + } + + default boolean isEnabled() { + return getCache("sessionEnabled",Boolean.class,false); + } + + default void onSessionUpdate(boolean active) { + setEnabled(active); + setCache("sessionRunning", active); + } T newSession() throws Exception; @@ -22,30 +42,36 @@ public interface SingletonSessionStore return (T) getCache("session", getSessionClass(), null); } - default void startIfNeeded() throws Exception { - var s = getSession(); - if (s != null) { - if (s.isRunning()) { + default void startSessionIfNeeded() throws Exception { + synchronized (this) { + var s = getSession(); + setEnabled(true); + if (s != null) { + if (s.isRunning()) { + return; + } + + s.start(); return; } + s = newSession(); s.start(); - return; + setCache("session", s); + onSessionUpdate(true); } - - s = newSession(); - s.start(); - setCache("session", s); - onSessionUpdate(true); } - default void stopIfNeeded() throws Exception { - var ex = getSession(); - setCache("session", null); - if (ex != null) { - ex.stop(); - onSessionUpdate(false); + default void stopSessionIfNeeded() throws Exception { + synchronized (this) { + var ex = getSession(); + setEnabled(false); + if (ex != null) { + ex.stop(); + setCache("session", null); + onSessionUpdate(false); + } } } } diff --git a/core/src/main/java/io/xpipe/core/store/SingletonToggleSessionStore.java b/core/src/main/java/io/xpipe/core/store/SingletonToggleSessionStore.java deleted file mode 100644 index c72d3f90d..000000000 --- a/core/src/main/java/io/xpipe/core/store/SingletonToggleSessionStore.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.xpipe.core.store; - -public interface SingletonToggleSessionStore extends SingletonSessionStore, StatefulDataStore, ValidatableStore { - - @Override - default Class getStateClass() { - return ToggleSessionState.class; - } - - @Override - public default void onSessionUpdate(boolean active) { - var c = getState(); - c.setRunning(active); - if (!active) { - c.setEnabled(false); - } else { - c.setEnabled(true); - } - setState(c); - } - - @Override - public default void validate() throws Exception { - if (getState().getEnabled() != null) { - if (getState().getEnabled()) { - startIfNeeded(); - } else { - stopIfNeeded(); - } - } - } - -} diff --git a/core/src/main/java/io/xpipe/core/store/ToggleSessionState.java b/core/src/main/java/io/xpipe/core/store/ToggleSessionState.java deleted file mode 100644 index 2a93b63b3..000000000 --- a/core/src/main/java/io/xpipe/core/store/ToggleSessionState.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.xpipe.core.store; - -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -@Getter -@Setter -@SuperBuilder -@Jacksonized -public class ToggleSessionState extends DataStoreState { - - Boolean enabled; - Boolean running; - - @Override - public void merge(DataStoreState newer) { - var state = (ToggleSessionState) newer; - enabled = useNewer(enabled, state.enabled); - running = useNewer(running, state.running); - } - } \ No newline at end of file diff --git a/ext/base/src/main/java/io/xpipe/ext/base/action/ObserveStoreAction.java b/ext/base/src/main/java/io/xpipe/ext/base/action/ObserveStoreAction.java deleted file mode 100644 index 85212dfa0..000000000 --- a/ext/base/src/main/java/io/xpipe/ext/base/action/ObserveStoreAction.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.xpipe.ext.base.action; - -import io.xpipe.app.core.AppI18n; -import io.xpipe.app.ext.ActionProvider; -import io.xpipe.app.storage.DataStoreEntryRef; -import io.xpipe.app.util.ObservableDataStore; -import javafx.beans.value.ObservableValue; -import lombok.Value; - -public class ObserveStoreAction implements ActionProvider { - - @Override - public DataStoreCallSite getDataStoreCallSite() { - return new DataStoreCallSite() { - - @Override - public ActionProvider.Action createAction(DataStoreEntryRef store) { - return new Action(store); - } - - @Override - public Class getApplicableClass() { - return ObservableDataStore.class; - } - - @Override - public ObservableValue getName(DataStoreEntryRef store) { - return store.getStore().getObserverState() - ? AppI18n.observable("base.stopObserve") - : AppI18n.observable("base.observe"); - } - - @Override - public String getIcon(DataStoreEntryRef store) { - return store.getStore().getObserverState() ? "mdi2e-eye-off-outline" : "mdi2e-eye-outline"; - } - }; - } - - @Value - static class Action implements ActionProvider.Action { - - DataStoreEntryRef store; - - @Override - public boolean requiresJavaFXPlatform() { - return true; - } - - @Override - public void execute() { - store.getStore().toggleObserverState(!store.getStore().getObserverState()); - } - } -} diff --git a/ext/base/src/main/java/io/xpipe/ext/base/action/RefreshStoreAction.java b/ext/base/src/main/java/io/xpipe/ext/base/action/RefreshStoreChildrenAction.java similarity index 97% rename from ext/base/src/main/java/io/xpipe/ext/base/action/RefreshStoreAction.java rename to ext/base/src/main/java/io/xpipe/ext/base/action/RefreshStoreChildrenAction.java index 7da0c0663..895f324ae 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/action/RefreshStoreAction.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/action/RefreshStoreChildrenAction.java @@ -9,7 +9,7 @@ import io.xpipe.app.util.FixedHierarchyStore; import javafx.beans.value.ObservableValue; import lombok.Value; -public class RefreshStoreAction implements ActionProvider { +public class RefreshStoreChildrenAction implements ActionProvider { @Override public ActionProvider.DataStoreCallSite getDataStoreCallSite() { diff --git a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java index 16b907f37..b9f2b4343 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopApplicationStoreProvider.java @@ -32,7 +32,7 @@ public class DesktopApplicationStoreProvider implements DataStoreProvider { @Override public void execute() throws Exception { - s.getDesktop().getStore().runScript(store.getName(), s.getDesktop().getStore().getUsedDialect(), s.getFullCommand()); + s.getDesktop().getStore().runDesktopScript(store.getName(), s.getDesktop().getStore().getUsedDialect(), s.getFullCommand()); } }; } @@ -48,7 +48,7 @@ public class DesktopApplicationStoreProvider implements DataStoreProvider { @Override public void execute() throws Exception { - s.getDesktop().getStore().runScript(store.getName(), s.getDesktop().getStore().getUsedDialect(), s.getFullCommand()); + s.getDesktop().getStore().runDesktopScript(store.getName(), s.getDesktop().getStore().getUsedDialect(), s.getFullCommand()); } }; } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopBaseStore.java b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopBaseStore.java index 9bbf02b20..990007284 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopBaseStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/desktop/DesktopBaseStore.java @@ -9,9 +9,9 @@ public interface DesktopBaseStore extends DataStore { boolean supportsDesktopAccess(); - void runScript(String name, ShellDialect dialect, String script) throws Exception; + void runDesktopScript(String name, ShellDialect dialect, String script) throws Exception; - void runTerminal(String name, ExternalTerminalType terminalType, ShellDialect dialect, String script) throws Exception; + void runDesktopTerminal(String name, ExternalTerminalType terminalType, ShellDialect dialect, String script) throws Exception; ShellDialect getUsedDialect(); 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 08f6726c4..2ad830056 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 @@ -53,12 +53,12 @@ public class DesktopEnvironmentStore extends JacksonizedValue implements Desktop public void launch(String n, String commands) throws Exception { var fullName = n + " [" + getSelfEntry().getName() + "]"; - base.getStore().runScript(fullName, dialect, getMergedInitCommands(commands)); + base.getStore().runDesktopScript(fullName, dialect, getMergedInitCommands(commands)); } public void launchSelf() throws Exception { var fullName = getSelfEntry().getName(); - base.getStore().runTerminal(fullName, terminal, dialect, getMergedInitCommands(null)); + base.getStore().runDesktopTerminal(fullName, terminal, dialect, getMergedInitCommands(null)); } @Override @@ -67,13 +67,13 @@ public class DesktopEnvironmentStore extends JacksonizedValue implements Desktop } @Override - public void runScript(String name, ShellDialect dialect, String script) throws Exception { - base.getStore().runScript(name, dialect, script); + public void runDesktopScript(String name, ShellDialect dialect, String script) throws Exception { + base.getStore().runDesktopScript(name, dialect, script); } @Override - public void runTerminal(String name, ExternalTerminalType terminalType, ShellDialect dialect, String script) throws Exception { - base.getStore().runTerminal(name,terminalType,dialect,script); + public void runDesktopTerminal(String name, ExternalTerminalType terminalType, ShellDialect dialect, String script) throws Exception { + base.getStore().runDesktopTerminal(name,terminalType,dialect,script); } @Override diff --git a/ext/base/src/main/java/module-info.java b/ext/base/src/main/java/module-info.java index 3e9aff810..f5eb0d1f1 100644 --- a/ext/base/src/main/java/module-info.java +++ b/ext/base/src/main/java/module-info.java @@ -58,8 +58,7 @@ open module io.xpipe.ext.base { StoreStopAction, StoreStartAction, StorePauseAction, - CloneStoreAction, - RefreshStoreAction, + CloneStoreAction, RefreshStoreChildrenAction, ScanAction, LaunchAction, XPipeUrlAction,