diff --git a/src/main/java/org/cryptomator/common/settings/VaultSettings.java b/src/main/java/org/cryptomator/common/settings/VaultSettings.java index 7b7e319c9..4565aaedc 100644 --- a/src/main/java/org/cryptomator/common/settings/VaultSettings.java +++ b/src/main/java/org/cryptomator/common/settings/VaultSettings.java @@ -8,7 +8,6 @@ package org.cryptomator.common.settings; import com.google.common.base.CharMatcher; import com.google.common.base.Strings; import com.google.common.io.BaseEncoding; -import org.apache.commons.lang3.SystemUtils; import javafx.beans.Observable; import javafx.beans.binding.Bindings; @@ -55,6 +54,8 @@ public class VaultSettings { public final IntegerProperty autoLockIdleSeconds; public final ObjectProperty mountPoint; public final StringExpression mountName; + public final StringProperty mountService; + public final IntegerProperty port; VaultSettings(VaultSettingsJson json) { this.id = json.id; @@ -69,6 +70,8 @@ public class VaultSettings { this.autoLockWhenIdle = new SimpleBooleanProperty(this, "autoLockWhenIdle", json.autoLockWhenIdle); this.autoLockIdleSeconds = new SimpleIntegerProperty(this, "autoLockIdleSeconds", json.autoLockIdleSeconds); this.mountPoint = new SimpleObjectProperty<>(this, "mountPoint", json.mountPoint == null ? null : Path.of(json.mountPoint)); + this.mountService = new SimpleStringProperty(this, "mountService", json.mountService); + this.port = new SimpleIntegerProperty(this, "port", json.port); // mount name is no longer an explicit setting, see https://github.com/cryptomator/cryptomator/pull/1318 this.mountName = StringExpression.stringExpression(Bindings.createStringBinding(() -> { final String name; @@ -94,7 +97,7 @@ public class VaultSettings { } Observable[] observables() { - return new Observable[]{actionAfterUnlock, autoLockIdleSeconds, autoLockWhenIdle, displayName, maxCleartextFilenameLength, mountFlags, mountPoint, path, revealAfterMount, unlockAfterStartup, usesReadOnlyMode}; + return new Observable[]{actionAfterUnlock, autoLockIdleSeconds, autoLockWhenIdle, displayName, maxCleartextFilenameLength, mountFlags, mountPoint, path, revealAfterMount, unlockAfterStartup, usesReadOnlyMode, port, mountService}; } public static VaultSettings withRandomId() { @@ -123,6 +126,8 @@ public class VaultSettings { json.autoLockWhenIdle = autoLockWhenIdle.get(); json.autoLockIdleSeconds = autoLockIdleSeconds.get(); json.mountPoint = mountPoint.map(Path::toString).getValue(); + json.mountService = mountService.get(); + json.port = port.get(); return json; } diff --git a/src/main/java/org/cryptomator/common/settings/VaultSettingsJson.java b/src/main/java/org/cryptomator/common/settings/VaultSettingsJson.java index 2381203e5..cb03c401e 100644 --- a/src/main/java/org/cryptomator/common/settings/VaultSettingsJson.java +++ b/src/main/java/org/cryptomator/common/settings/VaultSettingsJson.java @@ -45,6 +45,12 @@ class VaultSettingsJson { @JsonProperty("autoLockIdleSeconds") int autoLockIdleSeconds = VaultSettings.DEFAULT_AUTOLOCK_IDLE_SECONDS; + @JsonProperty("mountService") + String mountService; + + @JsonProperty("port") + int port = Settings.DEFAULT_PORT; + @Deprecated(since = "1.7.0") @JsonProperty(value = "winDriveLetter", access = JsonProperty.Access.WRITE_ONLY) // WRITE_ONLY means value is "written" into the java object during deserialization. Upvote this: https://github.com/FasterXML/jackson-annotations/issues/233 String winDriveLetter; diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java index 4e97e7fd5..17794af4c 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java @@ -111,7 +111,7 @@ public class MountOptionsController implements FxController { this.settings = settings; this.mountProviders = mountProviders; var fallbackProvider = mountProviders.stream().findFirst().orElse(null); - this.selectedMountService = ObservableUtil.mapWithDefault(settings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); + this.selectedMountService = ObservableUtil.mapWithDefault(vaultSettings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); this.fuseRestartRequired = selectedMountService.map(s -> {// return firstUsedProblematicFuseMountService.get() != null // && MountModule.isProblematicFuseService(s) // @@ -152,15 +152,15 @@ public class MountOptionsController implements FxController { volumeTypeChoiceBox.getItems().add(null); volumeTypeChoiceBox.getItems().addAll(mountProviders); volumeTypeChoiceBox.setConverter(new MountServiceConverter()); - boolean autoSelected = settings.mountService.get() == null; + boolean autoSelected = vaultSettings.mountService.get() == null; volumeTypeChoiceBox.getSelectionModel().select(autoSelected ? null : selectedMountService.getValue()); volumeTypeChoiceBox.valueProperty().addListener((observableValue, oldProvider, newProvider) -> { var toSet = Optional.ofNullable(newProvider).map(nP -> nP.getClass().getName()).orElse(null); - settings.mountService.set(toSet); + vaultSettings.mountService.set(toSet); }); - loopbackPortField.setText(String.valueOf(settings.port.get())); - loopbackPortApplyButton.visibleProperty().bind(settings.port.asString().isNotEqualTo(loopbackPortField.textProperty())); + loopbackPortField.setText(String.valueOf(vaultSettings.port.get())); + loopbackPortApplyButton.visibleProperty().bind(vaultSettings.port.asString().isNotEqualTo(loopbackPortField.textProperty())); loopbackPortApplyButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateLoopbackPort, loopbackPortField.textProperty()).not()); } @@ -297,7 +297,7 @@ public class MountOptionsController implements FxController { public void doChangeLoopbackPort() { if (validateLoopbackPort()) { - settings.port.set(Integer.parseInt(loopbackPortField.getText())); + vaultSettings.port.set(Integer.parseInt(loopbackPortField.getText())); } }