diff --git a/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java b/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java index da3bf2c0..9c62ecac 100644 --- a/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/SyncCategory.java @@ -3,9 +3,17 @@ package io.xpipe.app.prefs; import io.xpipe.app.comp.base.ButtonComp; import io.xpipe.app.core.AppI18n; import io.xpipe.app.fxcomps.Comp; +import io.xpipe.app.fxcomps.impl.StackComp; import io.xpipe.app.storage.DataStorage; +import io.xpipe.app.storage.DataStorageSyncHandler; import io.xpipe.app.util.DesktopHelper; import io.xpipe.app.util.OptionsBuilder; +import io.xpipe.app.util.ThreadHelper; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import org.kordamp.ikonli.javafx.FontIcon; + +import java.util.List; public class SyncCategory extends AppPrefsCategory { @@ -16,6 +24,14 @@ public class SyncCategory extends AppPrefsCategory { public Comp create() { var prefs = AppPrefs.get(); + var terminalTest = new StackComp( + List.of(new ButtonComp(AppI18n.observable("test"), new FontIcon("mdi2p-play"), () -> { + ThreadHelper.runAsync(() -> { + DataStorageSyncHandler.getInstance().validateConnection(); + }); + }).padding(new Insets(6, 10, 6, 6)))) + .padding(new Insets(10, 0, 0, 0)) + .apply(struc -> struc.get().setAlignment(Pos.CENTER_LEFT)); var builder = new OptionsBuilder(); builder.addTitle("sync") .sub(new OptionsBuilder() @@ -23,8 +39,10 @@ public class SyncCategory extends AppPrefsCategory { .description("enableGitStorageDescription") .addToggle(prefs.enableGitStorage) .nameAndDescription("storageGitRemote") - .addString(prefs.storageGitRemote, true) + .addString(prefs.storageGitRemote) .disable(prefs.enableGitStorage.not()) + .addComp(terminalTest) + .disable(prefs.storageGitRemote.isNull().and(prefs.enableGitStorage)) .addComp(prefs.getCustomComp("gitVaultIdentityStrategy")) .nameAndDescription("openDataDir") .addComp(new ButtonComp(AppI18n.observable("openDataDirButton"), () -> { diff --git a/app/src/main/java/io/xpipe/app/storage/DataStorageSyncHandler.java b/app/src/main/java/io/xpipe/app/storage/DataStorageSyncHandler.java index 5ea25648..bf8eaac5 100644 --- a/app/src/main/java/io/xpipe/app/storage/DataStorageSyncHandler.java +++ b/app/src/main/java/io/xpipe/app/storage/DataStorageSyncHandler.java @@ -10,6 +10,8 @@ public interface DataStorageSyncHandler { return (DataStorageSyncHandler) ProcessControlProvider.get().getGitStorageHandler(); } + void validateConnection(); + boolean supportsSync(); void init(); diff --git a/app/src/main/java/io/xpipe/app/update/AppInstaller.java b/app/src/main/java/io/xpipe/app/update/AppInstaller.java index 6e521cfa..ae809640 100644 --- a/app/src/main/java/io/xpipe/app/update/AppInstaller.java +++ b/app/src/main/java/io/xpipe/app/update/AppInstaller.java @@ -151,7 +151,7 @@ public class AppInstaller { var name = AppProperties.get().isStaging() ? "xpipe-ptb" : "xpipe"; var command = String.format( """ - function exec { + exec() { echo "Installing downloaded .deb installer ..." echo "+ sudo apt install \\"%s\\"" DEBIAN_FRONTEND=noninteractive sudo apt-get install -qy "%s" || return 1 @@ -191,7 +191,7 @@ public class AppInstaller { var name = AppProperties.get().isStaging() ? "xpipe-ptb" : "xpipe"; var command = String.format( """ - function exec { + exec() { echo "Installing downloaded .rpm installer ..." echo "+ sudo rpm -U -v --force \\"%s\\"" sudo rpm -U -v --force "%s" || return 1 @@ -231,7 +231,7 @@ public class AppInstaller { var name = AppProperties.get().isStaging() ? "xpipe-ptb" : "xpipe"; var command = String.format( """ - function exec { + exec() { echo "Installing downloaded .pkg installer ..." echo "+ sudo installer -verboseR -allowUntrusted -pkg \\"%s\\" -target /" sudo installer -verboseR -allowUntrusted -pkg "%s" -target / || return 1