Browse Source

Show a dedicated message when mounting to an occupied Windows drive

The error message was restored from 6395f17. Fixes #2309.
Sebastian Schuberth 1 year ago
parent
commit
173b1e8386

+ 8 - 0
src/main/java/org/cryptomator/common/mount/MountPointInUseException.java

@@ -0,0 +1,8 @@
+package org.cryptomator.common.mount;
+
+public class MountPointInUseException extends IllegalMountPointException {
+
+	public MountPointInUseException(String msg) {
+		super(msg);
+	}
+}

+ 5 - 1
src/main/java/org/cryptomator/common/mount/Mounter.java

@@ -97,7 +97,11 @@ public class Mounter {
 				}
 			} else {
 				var mpIsDriveLetter = userChosenMountPoint.toString().matches("[A-Z]:\\\\");
-				if (!mpIsDriveLetter && canMountToParent && !canMountToDir) {
+				if (mpIsDriveLetter) {
+					if (driveLetters.getOccupied().contains(userChosenMountPoint)) {
+						throw new MountPointInUseException(userChosenMountPoint.toString());
+					}
+				} else if (canMountToParent && !canMountToDir) {
 					MountWithinParentUtil.prepareParentNoMountPoint(userChosenMountPoint);
 					cleanup = () -> {
 						MountWithinParentUtil.cleanup(userChosenMountPoint);

+ 2 - 0
src/main/java/org/cryptomator/ui/unlock/UnlockInvalidMountPointController.java

@@ -1,5 +1,6 @@
 package org.cryptomator.ui.unlock;
 
+import org.cryptomator.common.mount.MountPointInUseException;
 import org.cryptomator.common.mount.MountPointNotExistsException;
 import org.cryptomator.common.mount.MountPointNotSupportedException;
 import org.cryptomator.common.vaults.Vault;
@@ -41,6 +42,7 @@ public class UnlockInvalidMountPointController implements FxController {
 		var translationKey = switch (e) {
 			case MountPointNotSupportedException x -> "unlock.error.customPath.description.notSupported";
 			case MountPointNotExistsException x -> "unlock.error.customPath.description.notExists";
+			case MountPointInUseException x -> "unlock.error.customPath.description.inUse";
 			default -> "unlock.error.customPath.description.generic";
 		};
 		dialogDescription.setFormat(resourceBundle.getString(translationKey));

+ 1 - 0
src/main/resources/i18n/strings.properties

@@ -127,6 +127,7 @@ unlock.success.revealBtn=Reveal Drive
 unlock.error.customPath.message=Unable to mount vault to custom path
 unlock.error.customPath.description.notSupported=If you wish to keep using the custom path, please go to the preferences and select a volume type that supports it. Otherwise, go to the vault options and choose a supported mount point.
 unlock.error.customPath.description.notExists=The custom mount path does not exist. Either create it in your local filesystem or change it in the vault options.
+unlock.error.customPath.description.inUse=Drive letter "%s" is already in use.
 unlock.error.customPath.description.generic=You have selected a custom mount path for this vault, but using it failed with the message: %s
 ## Hub
 hub.noKeychain.message=Unable to access device key