mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-18 10:41:26 +00:00
Added/Refactored exceptions to account for more cases
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class HideawayAlreadyExistsException extends IllegalMountPointException {
|
||||
|
||||
public HideawayAlreadyExistsException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointCouldNotBeClearedException extends IllegalMountPointException {
|
||||
|
||||
public MountPointCouldNotBeClearedException(Path path) {
|
||||
super(path, "Mountpoint could not be cleared: " + path.toString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.cryptomator.common.mount;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MountPointNotEmptyDirectoryException extends IllegalMountPointException {
|
||||
|
||||
public MountPointNotEmptyDirectoryException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
}
|
||||
@@ -7,4 +7,8 @@ public class MountPointNotExistsException extends IllegalMountPointException {
|
||||
public MountPointNotExistsException(Path path, String msg) {
|
||||
super(path, msg);
|
||||
}
|
||||
|
||||
public MountPointNotExistsException(Path path) {
|
||||
super(path, "Mountpoint does not exist: " + path);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,16 +19,16 @@ public final class MountWithinParentUtil {
|
||||
|
||||
private MountWithinParentUtil() {}
|
||||
|
||||
static void prepareParentNoMountPoint(Path mountPoint) throws IllegalMountPointException {
|
||||
static void prepareParentNoMountPoint(Path mountPoint) throws IllegalMountPointException, MountPointPreparationException {
|
||||
Path hideaway = getHideaway(mountPoint);
|
||||
var mpExists = Files.exists(mountPoint, LinkOption.NOFOLLOW_LINKS);
|
||||
var hideExists = Files.exists(hideaway, LinkOption.NOFOLLOW_LINKS);
|
||||
|
||||
//TODO: possible improvement by just deleting an _empty_ hideaway
|
||||
if (mpExists && hideExists) { //both resources exist (whatever type)
|
||||
throw new IllegalMountPointException(mountPoint);
|
||||
throw new HideawayAlreadyExistsException(mountPoint, "Hideaway (" + hideaway + ") already exists for mountpoint: " + mountPoint);
|
||||
} else if (!mpExists && !hideExists) { //neither mountpoint nor hideaway exist
|
||||
throw new IllegalMountPointException(mountPoint);
|
||||
throw new MountPointNotExistsException(mountPoint);
|
||||
} else if (!mpExists) { //only hideaway exists
|
||||
checkIsDirectory(hideaway);
|
||||
LOG.info("Mountpoint {} seems to be not properly cleaned up. Will be fixed on unmount.", mountPoint);
|
||||
@@ -51,7 +51,7 @@ public final class MountWithinParentUtil {
|
||||
int attempts = 0;
|
||||
while (!Files.notExists(mountPoint)) {
|
||||
if (attempts >= 10) {
|
||||
throw new IllegalMountPointException(mountPoint, "Path could not be cleared: " + mountPoint);
|
||||
throw new MountPointCouldNotBeClearedException(mountPoint);
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
attempts++;
|
||||
@@ -98,14 +98,14 @@ public final class MountWithinParentUtil {
|
||||
|
||||
private static void checkIsDirectory(Path toCheck) throws IllegalMountPointException {
|
||||
if (!Files.isDirectory(toCheck, LinkOption.NOFOLLOW_LINKS)) {
|
||||
throw new IllegalMountPointException(toCheck);
|
||||
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint is not a directory: " + toCheck);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkIsEmpty(Path toCheck) throws IllegalMountPointException, IOException {
|
||||
try (var dirStream = Files.list(toCheck)) {
|
||||
if (dirStream.findFirst().isPresent()) {
|
||||
throw new IllegalMountPointException(toCheck);
|
||||
throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint directory is not empty: " + toCheck);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user