From 8b9377cf4ef5a47662e6b70f4037f301ca8084b9 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 11 Jan 2023 16:35:12 +0100 Subject: [PATCH] only fix custom mount flags, if explicitly desired. Otherwise use the ones provided by mount service --- .../org/cryptomator/common/vaults/Vault.java | 24 ++----------------- .../vaultoptions/MountOptionsController.java | 12 ++++++++-- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/cryptomator/common/vaults/Vault.java b/src/main/java/org/cryptomator/common/vaults/Vault.java index c49c1a9d1..5a13141a8 100644 --- a/src/main/java/org/cryptomator/common/vaults/Vault.java +++ b/src/main/java/org/cryptomator/common/vaults/Vault.java @@ -13,7 +13,6 @@ import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.Constants; import org.cryptomator.common.Environment; import org.cryptomator.common.mount.ActualMountService; -import org.cryptomator.common.mount.MountModule; import org.cryptomator.common.mount.WindowsDriveLetters; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VaultSettings; @@ -75,7 +74,6 @@ public class Vault { private final VaultState state; private final ObjectProperty lastKnownException; private final ObservableValue mountService; - private final ObservableValue defaultMountFlags; private final VaultConfigCache configCache; private final VaultStats stats; private final StringBinding displayablePath; @@ -101,7 +99,6 @@ public class Vault { this.state = state; this.lastKnownException = lastKnownException; this.mountService = mountService; - this.defaultMountFlags = mountService.map(s -> s.service().getDefaultMountFlags()); this.stats = stats; this.displayablePath = Bindings.createStringBinding(this::getDisplayablePath, vaultSettings.path()); this.locked = Bindings.createBooleanBinding(this::isLocked, state); @@ -170,7 +167,7 @@ public class Vault { case LOOPBACK_PORT -> builder.setLoopbackPort(settings.port().get()); //TODO: move port from settings to vaultsettings (see https://github.com/cryptomator/cryptomator/tree/feature/mount-setting-per-vault) case LOOPBACK_HOST_NAME -> env.getLoopbackAlias().ifPresent(builder::setLoopbackHostName); case READ_ONLY -> builder.setReadOnly(vaultSettings.usesReadOnlyMode().get()); - case MOUNT_FLAGS -> builder.setMountFlags(defaultMountFlags.getValue()); // TODO use custom mount flags (pre-populated with default mount flags) + case MOUNT_FLAGS -> builder.setMountFlags(Objects.requireNonNullElse(vaultSettings.mountFlags().getValue(), mountService.getDefaultMountFlags())); case VOLUME_ID -> builder.setVolumeId(vaultSettings.getId()); case VOLUME_NAME -> builder.setVolumeName(vaultSettings.mountName().get()); } @@ -186,7 +183,7 @@ public class Vault { } else if (mountService.hasCapability(MOUNT_WITHIN_EXISTING_PARENT)) { Files.createDirectories(defaultMountPointBase); builder.setMountpoint(defaultMountPointBase); - } else if (mountService.hasCapability(MOUNT_TO_EXISTING_DIR) ) { + } else if (mountService.hasCapability(MOUNT_TO_EXISTING_DIR)) { var mountPoint = defaultMountPointBase.resolve(vaultSettings.mountName().get()); Files.createDirectories(mountPoint); builder.setMountpoint(mountPoint); @@ -381,23 +378,6 @@ public class Vault { return !Strings.isNullOrEmpty(vaultSettings.mountFlags().get()); } - public ObservableValue defaultMountFlagsProperty() { - return defaultMountFlags; - } - - public String getDefaultMountFlags() { - return defaultMountFlags.getValue(); - } - - public String getEffectiveMountFlags() { - String mountFlags = vaultSettings.mountFlags().get(); - if (Strings.isNullOrEmpty(mountFlags)) { - return ""; //TODO: should the provider provide dem defaults?? - } else { - return mountFlags; - } - } - public VaultConfigCache getVaultConfigCache() { return configCache; } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java index bc4d0cda0..bc054180b 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java @@ -34,6 +34,7 @@ public class MountOptionsController implements FxController { private final WindowsDriveLetters windowsDriveLetters; private final ResourceBundle resourceBundle; + private final ObservableValue defaultMountFlags; private final ObservableValue mountpointDirSupported; private final ObservableValue mountpointDriveLetterSupported; private final ObservableValue readOnlySupported; @@ -59,6 +60,13 @@ public class MountOptionsController implements FxController { this.vault = vault; this.windowsDriveLetters = windowsDriveLetters; this.resourceBundle = resourceBundle; + this.defaultMountFlags = mountService.map(as -> { + if (as.service().hasCapability(MountCapability.MOUNT_FLAGS)) { + return as.service().getDefaultMountFlags(); + } else { + return ""; + } + }); this.mountpointDirSupported = mountService.map(as -> as.service().hasCapability(MountCapability.MOUNT_TO_EXISTING_DIR) || as.service().hasCapability(MountCapability.MOUNT_WITHIN_EXISTING_PARENT)); this.mountpointDriveLetterSupported = mountService.map(as -> as.service().hasCapability(MountCapability.MOUNT_AS_DRIVE_LETTER)); this.mountFlagsSupported = mountService.map(as -> as.service().hasCapability(MountCapability.MOUNT_FLAGS)); @@ -101,12 +109,12 @@ public class MountOptionsController implements FxController { if (customMountFlagsCheckbox.isSelected()) { readOnlyCheckbox.setSelected(false); // to prevent invalid states mountFlagsField.textProperty().unbind(); - vault.setCustomMountFlags(vault.defaultMountFlagsProperty().getValue()); + vault.setCustomMountFlags(defaultMountFlags.getValue()); mountFlagsField.textProperty().bindBidirectional(vault.getVaultSettings().mountFlags()); } else { mountFlagsField.textProperty().unbindBidirectional(vault.getVaultSettings().mountFlags()); vault.setCustomMountFlags(null); - mountFlagsField.textProperty().bind(vault.defaultMountFlagsProperty()); + mountFlagsField.textProperty().bind(defaultMountFlags); } }