diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java index 1bfd813e3..0c0e4761e 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java @@ -106,6 +106,11 @@ public class DokanyVolume implements Volume { return Optional.ofNullable(mountPoint); } + @Override + public MountPointRequirement getMountPointRequirement() { + return MountPointRequirement.EMPTY_MOUNT_POINT; + } + public static boolean isSupportedStatic() { return MountFactory.isApplicable(); } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java index bce307afc..e944d5fd6 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java @@ -182,6 +182,11 @@ public class FuseVolume implements Volume { return Optional.ofNullable(mountPoint); } + @Override + public MountPointRequirement getMountPointRequirement() { + return SystemUtils.IS_OS_WINDOWS ? MountPointRequirement.PARENT_NO_MOUNT_POINT : MountPointRequirement.EMPTY_MOUNT_POINT; + } + public static boolean isSupportedStatic() { return FuseMountFactory.isFuseSupported(); } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java b/main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java new file mode 100644 index 000000000..192079220 --- /dev/null +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java @@ -0,0 +1,36 @@ +package org.cryptomator.common.vaults; + +/** + * Enumeration used to indicate the requirements for mounting a vault + * using a specific {@link Volume VolumeProvider}, e.g. {@link FuseVolume}. + */ +public enum MountPointRequirement { + + /** + * No Mountpoint on the local filesystem required. (e.g. WebDAV) + */ + NONE, + + /** + * A parent folder is required, but the actual Mountpoint must not exist. + */ + PARENT_NO_MOUNT_POINT, + + /** + * A parent folder is required, but the actual Mountpoint may exist. + */ + PARENT_OPT_MOUNT_POINT, + + /** + * The actual Mountpoint must exist, must be empty and the parent must exist aswell. + */ + EMPTY_MOUNT_POINT; + +// /** +// * The actual Mountpoint must exist and may contain files. +// */ +// MOUNT_POINT; + + + +} \ No newline at end of file diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java index a0aa11be8..22759d61b 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java @@ -32,6 +32,8 @@ public interface Volume { Optional getMountPoint(); + MountPointRequirement getMountPointRequirement(); + // optional forced unmounting: default boolean supportsForcedUnmount() { diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java index a12236230..a8e84c80c 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java @@ -101,6 +101,11 @@ public class WebDavVolume implements Volume { return Optional.ofNullable(mountPoint); } + @Override + public MountPointRequirement getMountPointRequirement() { + return MountPointRequirement.NONE; + } + private String getLocalhostAliasOrNull() { try { InetAddress alias = InetAddress.getByName(LOCALHOST_ALIAS);