Explorar el Código

Fixes #1547: "Custom path" retains invalid value/state (#1548)

Co-authored-by: Sebastian Stenzel <sebastian.stenzel@gmail.com>
JaniruTEC hace 3 años
padre
commit
1ef3e948be

+ 16 - 8
src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java

@@ -27,6 +27,7 @@ import javafx.stage.DirectoryChooser;
 import javafx.stage.Stage;
 import javafx.util.StringConverter;
 import java.io.File;
+import java.nio.file.InvalidPathException;
 import java.nio.file.Path;
 import java.util.ResourceBundle;
 import java.util.Set;
@@ -94,7 +95,9 @@ public class MountOptionsController implements FxController {
 		driveLetterSelection.setConverter(new WinDriveLetterLabelConverter(windowsDriveLetters, resourceBundle));
 		driveLetterSelection.setValue(vault.getVaultSettings().winDriveLetter().get());
 
-		if (vault.getVaultSettings().useCustomMountPath().get() && !getRestrictToStableFuseOnWindows() /* to prevent invalid states */) {
+		if (vault.getVaultSettings().useCustomMountPath().get()
+				&& vault.getVaultSettings().getCustomMountPath().isPresent()
+				&& !getRestrictToStableFuseOnWindows() /* to prevent invalid states */) {
 			mountPoint.selectToggle(mountPointCustomDir);
 		} else if (!Strings.isNullOrEmpty(vault.getVaultSettings().winDriveLetter().get())) {
 			mountPoint.selectToggle(mountPointWinDriveLetter);
@@ -125,25 +128,30 @@ public class MountOptionsController implements FxController {
 	}
 
 	@FXML
-	private void chooseCustomMountPoint() {
+	public void chooseCustomMountPoint() {
+		chooseCustomMountPointOrReset(mountPointCustomDir);
+	}
+
+	private void chooseCustomMountPointOrReset(Toggle previousMountToggle) {
 		DirectoryChooser directoryChooser = new DirectoryChooser();
 		directoryChooser.setTitle(resourceBundle.getString("vaultOptions.mount.mountPoint.directoryPickerTitle"));
 		try {
-			directoryChooser.setInitialDirectory(Path.of(System.getProperty("user.home")).toFile());
-		} catch (Exception e) {
-			//NO-OP
+			var initialDir = vault.getVaultSettings().getCustomMountPath().orElse(System.getProperty("user.home"));
+			directoryChooser.setInitialDirectory(Path.of(initialDir).toFile());
+		} catch (InvalidPathException e) {
+			// no-op
 		}
 		File file = directoryChooser.showDialog(window);
 		if (file != null) {
 			vault.getVaultSettings().customMountPath().set(file.getAbsolutePath());
 		} else {
-			vault.getVaultSettings().customMountPath().set(null);
+			mountPoint.selectToggle(previousMountToggle);
 		}
 	}
 
-	private void toggleMountPoint(@SuppressWarnings("unused") ObservableValue<? extends Toggle> observable, @SuppressWarnings("unused") Toggle oldValue, Toggle newValue) {
+	private void toggleMountPoint(@SuppressWarnings("unused") ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) {
 		if (mountPointCustomDir.equals(newValue) && Strings.isNullOrEmpty(vault.getVaultSettings().customMountPath().get())) {
-			chooseCustomMountPoint();
+			chooseCustomMountPointOrReset(oldValue);
 		}
 	}