From 03b5b67a428108a7a710b5d24985cd40406eec12 Mon Sep 17 00:00:00 2001 From: crschnick Date: Fri, 4 Aug 2023 00:02:26 +0000 Subject: [PATCH] Improve store toggles [stage] --- .../xpipe/app/comp/base/StoreToggleComp.java | 46 +++++++++++++++++++ .../core/{AppLock.java => AppDataLock.java} | 2 +- .../xpipe/app/exchange/OpenExchangeImpl.java | 2 +- .../xpipe/app/launcher/LauncherCommand.java | 6 +-- 4 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/io/xpipe/app/comp/base/StoreToggleComp.java rename app/src/main/java/io/xpipe/app/core/{AppLock.java => AppDataLock.java} (97%) 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 new file mode 100644 index 000000000..27a452a7e --- /dev/null +++ b/app/src/main/java/io/xpipe/app/comp/base/StoreToggleComp.java @@ -0,0 +1,46 @@ +package io.xpipe.app.comp.base; + +import io.xpipe.app.comp.storage.store.StoreSection; +import io.xpipe.app.core.AppI18n; +import io.xpipe.app.fxcomps.SimpleComp; +import io.xpipe.app.fxcomps.util.BindingsHelper; +import io.xpipe.app.storage.DataStoreEntry; +import javafx.beans.binding.Bindings; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.scene.layout.Region; + +import java.util.function.Consumer; + +public class StoreToggleComp extends SimpleComp { + + private final String nameKey; + private final StoreSection section; + private final BooleanProperty value; + private final Consumer onChange; + + public StoreToggleComp(String nameKey, StoreSection section, boolean initial, Consumer onChange) { + this.nameKey = nameKey; + this.section = section; + this.value = new SimpleBooleanProperty(initial); + this.onChange = onChange; + } + + @Override + protected Region createSimple() { + var disable = section.getWrapper().getState().map(state -> state != DataStoreEntry.State.COMPLETE_AND_VALID); + var visible = BindingsHelper.persist(Bindings.createBooleanBinding( + () -> { + return (section.getWrapper().getState().getValue() == DataStoreEntry.State.COMPLETE_AND_VALID + || section.getWrapper().getState().getValue() == DataStoreEntry.State.VALIDATING) + && section.getShowDetails().get(); + }, + section.getWrapper().getState(), + section.getShowDetails())); + var t = new NamedToggleComp(value, AppI18n.observable(nameKey)) + .visible(visible) + .disable(disable); + value.addListener((observable, oldValue, newValue) -> onChange.accept(newValue)); + return t.createRegion(); + } +} diff --git a/app/src/main/java/io/xpipe/app/core/AppLock.java b/app/src/main/java/io/xpipe/app/core/AppDataLock.java similarity index 97% rename from app/src/main/java/io/xpipe/app/core/AppLock.java rename to app/src/main/java/io/xpipe/app/core/AppDataLock.java index af89f3aa8..2adb51f2c 100644 --- a/app/src/main/java/io/xpipe/app/core/AppLock.java +++ b/app/src/main/java/io/xpipe/app/core/AppDataLock.java @@ -8,7 +8,7 @@ import java.nio.channels.FileLock; import java.nio.file.Files; import java.nio.file.Path; -public class AppLock { +public class AppDataLock { private static FileChannel channel; private static FileLock lock; diff --git a/app/src/main/java/io/xpipe/app/exchange/OpenExchangeImpl.java b/app/src/main/java/io/xpipe/app/exchange/OpenExchangeImpl.java index e9a38369b..7d6534c4c 100644 --- a/app/src/main/java/io/xpipe/app/exchange/OpenExchangeImpl.java +++ b/app/src/main/java/io/xpipe/app/exchange/OpenExchangeImpl.java @@ -10,7 +10,7 @@ public class OpenExchangeImpl extends OpenExchange @Override public Response handleRequest(BeaconHandler handler, Request msg) { - if (msg.getArguments().size() == 0) { + if (msg.getArguments().isEmpty()) { OperationMode.switchToAsync(OperationMode.GUI); } diff --git a/app/src/main/java/io/xpipe/app/launcher/LauncherCommand.java b/app/src/main/java/io/xpipe/app/launcher/LauncherCommand.java index 641411225..62e052928 100644 --- a/app/src/main/java/io/xpipe/app/launcher/LauncherCommand.java +++ b/app/src/main/java/io/xpipe/app/launcher/LauncherCommand.java @@ -1,6 +1,6 @@ package io.xpipe.app.launcher; -import io.xpipe.app.core.AppLock; +import io.xpipe.app.core.AppDataLock; import io.xpipe.app.core.AppLogs; import io.xpipe.app.core.mode.OperationMode; import io.xpipe.app.issue.ErrorEvent; @@ -74,7 +74,7 @@ public class LauncherCommand implements Callable { con.constructSocket(); con.performSimpleExchange( FocusExchange.Request.builder().mode(getEffectiveMode()).build()); - if (inputs.size() > 0) { + if (!inputs.isEmpty()) { con.performSimpleExchange( OpenExchange.Request.builder().arguments(inputs).build()); } @@ -95,7 +95,7 @@ public class LauncherCommand implements Callable { // Even in case we are unable to reach another beacon server // there might be another instance running, for example // starting up or listening on another port - if (!AppLock.lock()) { + if (!AppDataLock.lock()) { TrackEvent.info("Data directory is already locked. Quitting ..."); OperationMode.halt(0); }