diff --git a/app/src/main/java/io/xpipe/app/ext/SingletonSessionStore.java b/app/src/main/java/io/xpipe/app/ext/SingletonSessionStore.java index c2d6e5c1d..0fbac0329 100644 --- a/app/src/main/java/io/xpipe/app/ext/SingletonSessionStore.java +++ b/app/src/main/java/io/xpipe/app/ext/SingletonSessionStore.java @@ -8,6 +8,10 @@ public interface SingletonSessionStore stopSessionIfNeeded(); } + default boolean supportsSession() { + return true; + } + default boolean isSessionRunning() { return getCache("sessionRunning", Boolean.class, false); } @@ -36,6 +40,10 @@ public interface SingletonSessionStore } default T startSessionIfNeeded() throws Exception { + if (!supportsSession()) { + return null; + } + synchronized (this) { var s = getSession(); if (s != null) { diff --git a/app/src/main/java/io/xpipe/app/ext/SingletonSessionStoreProvider.java b/app/src/main/java/io/xpipe/app/ext/SingletonSessionStoreProvider.java index c9f2c922b..36fa6d3fb 100644 --- a/app/src/main/java/io/xpipe/app/ext/SingletonSessionStoreProvider.java +++ b/app/src/main/java/io/xpipe/app/ext/SingletonSessionStoreProvider.java @@ -5,6 +5,7 @@ import io.xpipe.app.hub.action.impl.ToggleActionProvider; import io.xpipe.app.hub.comp.*; import io.xpipe.app.platform.LabelGraphic; +import io.xpipe.app.storage.DataStorage; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ObservableBooleanValue; @@ -32,6 +33,10 @@ public interface SingletonSessionStoreProvider extends DataStoreProvider { return new SystemStateComp(Bindings.createObjectBinding( () -> { SingletonSessionStore s = w.getEntry().getStore().asNeeded(); + if (!s.supportsSession()) { + return SystemStateComp.State.SUCCESS; + } + if (!s.isSessionEnabled() || (s.isSessionEnabled() && !s.isSessionRunning())) { return SystemStateComp.State.OTHER; } @@ -71,7 +76,19 @@ public interface SingletonSessionStoreProvider extends DataStoreProvider { action.executeAsync(); } }); + + t.setCustomVisibility(Bindings.createBooleanBinding( + () -> { + SingletonSessionStore s = sec.getWrapper().getEntry().getStore().asNeeded(); + return s.supportsSession() && (showToggleWhenInactive(sec.getWrapper().getStore().getValue()) || s.isSessionEnabled()); + }, + sec.getWrapper().getCache())); + t.tooltipKey("enabled"); return t; } + + default boolean showToggleWhenInactive(DataStore store) { + return true; + } } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java index 7af2b0070..4ef054b38 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java @@ -31,6 +31,13 @@ public abstract class AbstractServiceStore implements SingletonSessionStore { - AbstractServiceStore s = - sec.getWrapper().getEntry().getStore().asNeeded(); - if (s.getHost() == null - || !s.getHost().getStore().requiresTunnel() - || !s.getHost().getStore().isLocallyTunnelable()) { - return false; - } - - return true; - }, - sec.getWrapper().getCache())); - return new DenseStoreEntryComp(sec, toggle); + public boolean showToggleWhenInactive(DataStore store) { + return false; } @Override