From b6d97528d278b19a7fd5d5764859618aae463763 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 13 Jan 2023 11:58:10 +0100 Subject: [PATCH] fix driveletter selection --- .../vaultoptions/MountOptionsController.java | 45 ++++++++----------- .../resources/fxml/vault_options_mount.fxml | 2 +- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java index c7662daeb..f0b26a407 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java @@ -39,7 +39,6 @@ public class MountOptionsController implements FxController { private final ObservableValue mountpointDriveLetterSupported; private final ObservableValue readOnlySupported; private final ObservableValue mountFlagsSupported; - private final ObservableValue driveLetter; private final ObservableValue directoryPath; @@ -71,7 +70,6 @@ public class MountOptionsController implements FxController { this.mountpointDriveLetterSupported = mountService.map(as -> as.service().hasCapability(MountCapability.MOUNT_AS_DRIVE_LETTER)); this.mountFlagsSupported = mountService.map(as -> as.service().hasCapability(MountCapability.MOUNT_FLAGS)); this.readOnlySupported = mountService.map(as -> as.service().hasCapability(MountCapability.READ_ONLY)); - this.driveLetter = vault.getVaultSettings().mountPoint().map(p -> isDriveLetter(p) ? p : null); this.directoryPath = vault.getVaultSettings().mountPoint().map(p -> isDriveLetter(p) ? null : p.toString()); } @@ -88,7 +86,7 @@ public class MountOptionsController implements FxController { //driveLetter choice box driveLetterSelection.getItems().addAll(windowsDriveLetters.getAll()); driveLetterSelection.setConverter(new WinDriveLetterLabelConverter(windowsDriveLetters, resourceBundle)); - driveLetterSelection.setOnShowing(event -> driveLetterSelection.setConverter(new WinDriveLetterLabelConverter(windowsDriveLetters, resourceBundle))); //TODO: does this work? + driveLetterSelection.setOnShowing(event -> driveLetterSelection.setConverter(new WinDriveLetterLabelConverter(windowsDriveLetters, resourceBundle))); //To check the reserved drive letters again //mountPoint toggle group var mountPoint = vault.getVaultSettings().getMountPoint(); @@ -98,7 +96,8 @@ public class MountOptionsController implements FxController { } else if (mountPoint.getParent() == null && isDriveLetter(mountPoint)) { //prepare and select drive letter mountPointToggleGroup.selectToggle(mountPointDriveLetterBtn); - } else if (driveLetterSelection.getValue() == null) { + driveLetterSelection.valueProperty().bindBidirectional(vault.getVaultSettings().mountPoint()); + } else { //prepare and select dir mountPointToggleGroup.selectToggle(mountPointDirBtn); } @@ -158,21 +157,23 @@ public class MountOptionsController implements FxController { } private void selectedToggleChanged(ObservableValue observable, Toggle oldToggle, Toggle newToggle) { - Path mountPointToBe = null; - try { - //Remark: the mountpoint corresponding to the newToggle must be null, otherwise it would not be new! - if (mountPointDriveLetterBtn.equals(newToggle)) { - mountPointToBe = driveLetterSelection.getItems().get(0); - } else if (mountPointDirBtn.equals(newToggle)) { - mountPointToBe = chooseCustomMountPointInternal(); - } - vault.getVaultSettings().mountPoint().set(mountPointToBe); - } catch (NoDirSelectedException e) { - if (!mountPointDirBtn.equals(oldToggle)) { - mountPointToggleGroup.selectToggle(oldToggle); - } else { - mountPointToggleGroup.selectToggle(mountPointAutoBtn); + //Remark: the mountpoint corresponding to the newToggle must be null, otherwise it would not be new! + driveLetterSelection.valueProperty().unbindBidirectional(vault.getVaultSettings().mountPoint()); + if (mountPointDriveLetterBtn.equals(newToggle)) { + vaultSettings.mountPoint().set(windowsDriveLetters.getFirstDesiredAvailable().orElse(windowsDriveLetters.getAll().stream().findAny().get())); + driveLetterSelection.valueProperty().bindBidirectional(vault.getVaultSettings().mountPoint()); + } else if (mountPointDirBtn.equals(newToggle)) { + try { + vaultSettings.mountPoint().set(chooseCustomMountPointInternal()); + } catch (NoDirSelectedException e) { + if (oldToggle != null && !mountPointDirBtn.equals(oldToggle)) { + mountPointToggleGroup.selectToggle(oldToggle); + } else { + mountPointToggleGroup.selectToggle(mountPointAutoBtn); + } } + } else { + vaultSettings.mountPoint().set(null); } } @@ -254,14 +255,6 @@ public class MountOptionsController implements FxController { return readOnlySupported.getValue(); } - public ObservableValue driveLetterProperty() { - return driveLetter; - } - - public Path getDriveLetter() { - return driveLetter.getValue(); - } - public ObservableValue directoryPathProperty() { return directoryPath; } diff --git a/src/main/resources/fxml/vault_options_mount.fxml b/src/main/resources/fxml/vault_options_mount.fxml index be2cea6b9..ce616c8b8 100644 --- a/src/main/resources/fxml/vault_options_mount.fxml +++ b/src/main/resources/fxml/vault_options_mount.fxml @@ -44,7 +44,7 @@ - +