Bladeren bron

Moved actual choosing of MPCs to MountPointHelper

JaniruTEC 4 jaren geleden
bovenliggende
commit
422ce4a387

+ 4 - 30
main/commons/src/main/java/org/cryptomator/common/mountpoint/MacVolumeMountChooser.java

@@ -3,25 +3,22 @@ package org.cryptomator.common.mountpoint;
 import org.apache.commons.lang3.SystemUtils;
 import org.cryptomator.common.settings.VaultSettings;
 import org.cryptomator.common.vaults.Volume;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Optional;
 
 class MacVolumeMountChooser implements MountPointChooser {
 
-	private static final Logger LOG = LoggerFactory.getLogger(MacVolumeMountChooser.class);
-	private static final int MAX_MOUNTPOINT_CREATION_RETRIES = 10;
 	private static final Path VOLUME_PATH = Path.of("/Volumes");
 
 	private final VaultSettings vaultSettings;
+	private final MountPointHelper helper;
 
 	@Inject
-	public MacVolumeMountChooser(VaultSettings vaultSettings) {
+	public MacVolumeMountChooser(VaultSettings vaultSettings, MountPointHelper helper) {
 		this.vaultSettings = vaultSettings;
+		this.helper = helper;
 	}
 
 	@Override
@@ -31,30 +28,7 @@ class MacVolumeMountChooser implements MountPointChooser {
 
 	@Override
 	public Optional<Path> chooseMountPoint(Volume caller) {
-		return Optional.of(VOLUME_PATH).map(this::choose);
-	}
-
-	private Path choose(Path parent) {
-		String basename = this.vaultSettings.mountName().get();
-		//regular
-		Path mountPoint = parent.resolve(basename);
-		if (Files.notExists(mountPoint)) {
-			return mountPoint;
-		}
-		//with id
-		mountPoint = parent.resolve(basename + " (" + vaultSettings.getId() + ")");
-		if (Files.notExists(mountPoint)) {
-			return mountPoint;
-		}
-		//with id and count
-		for (int i = 1; i < MAX_MOUNTPOINT_CREATION_RETRIES; i++) {
-			mountPoint = parent.resolve(basename + "_(" + vaultSettings.getId() + ")_" + i);
-			if (Files.notExists(mountPoint)) {
-				return mountPoint;
-			}
-		}
-		LOG.error("Failed to find feasible mountpoint at /Volumes/{}_x. Giving up after {} attempts.", basename, MAX_MOUNTPOINT_CREATION_RETRIES);
-		return null;
+		return Optional.of(VOLUME_PATH).map(dir -> this.helper.chooseTemporaryMountPoint(this.vaultSettings, dir));
 	}
 
 	@Override

+ 27 - 1
main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointHelper.java

@@ -1,11 +1,13 @@
 package org.cryptomator.common.mountpoint;
 
 import org.cryptomator.common.Environment;
+import org.cryptomator.common.settings.VaultSettings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import java.io.File;
 import java.io.IOException;
 import java.nio.file.DirectoryNotEmptyException;
 import java.nio.file.Files;
@@ -19,6 +21,8 @@ class MountPointHelper {
 
 	public static Logger LOG = LoggerFactory.getLogger(MountPointHelper.class);
 
+	private static final int MAX_TMPMOUNTPOINT_CREATION_RETRIES = 10;
+
 	private final Optional<Path> tmpMountPointDir;
 	private volatile boolean alreadyChecked = false;
 
@@ -27,6 +31,28 @@ class MountPointHelper {
 		this.tmpMountPointDir = env.getMountPointsDir();
 	}
 
+	public Path chooseTemporaryMountPoint(VaultSettings vaultSettings, Path parentDir) {
+		String basename = vaultSettings.mountName().get();
+		//regular
+		Path mountPoint = parentDir.resolve(basename);
+		if (Files.notExists(mountPoint)) {
+			return mountPoint;
+		}
+		//with id
+		mountPoint = parentDir.resolve(basename + " (" + vaultSettings.getId() + ")");
+		if (Files.notExists(mountPoint)) {
+			return mountPoint;
+		}
+		//with id and count
+		for (int i = 1; i < MAX_TMPMOUNTPOINT_CREATION_RETRIES; i++) {
+			mountPoint = parentDir.resolve(basename + "_(" + vaultSettings.getId() + ")_" + i);
+			if (Files.notExists(mountPoint)) {
+				return mountPoint;
+			}
+		}
+		LOG.error("Failed to find feasible mountpoint at {}{}{}_x. Giving up after {} attempts.", parentDir, File.separator, basename, MAX_TMPMOUNTPOINT_CREATION_RETRIES);
+		return null;
+	}
 
 	public synchronized void clearIrregularUnmountDebrisIfNeeded() {
 		if (alreadyChecked || tmpMountPointDir.isEmpty()) {
@@ -88,7 +114,7 @@ class MountPointHelper {
 	}
 
 	private void ensureIsEmpty(Path dir) throws IOException {
-		if(Files.newDirectoryStream(dir).iterator().hasNext()) {
+		if (Files.newDirectoryStream(dir).iterator().hasNext()) {
 			throw new DirectoryNotEmptyException(dir.toString());
 		}
 	}

+ 1 - 27
main/commons/src/main/java/org/cryptomator/common/mountpoint/TemporaryMountPointChooser.java

@@ -7,7 +7,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
-import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -16,7 +15,6 @@ import java.util.Optional;
 class TemporaryMountPointChooser implements MountPointChooser {
 
 	private static final Logger LOG = LoggerFactory.getLogger(TemporaryMountPointChooser.class);
-	private static final int MAX_TMPMOUNTPOINT_CREATION_RETRIES = 10;
 
 	private final VaultSettings vaultSettings;
 	private final Environment environment;
@@ -44,31 +42,7 @@ class TemporaryMountPointChooser implements MountPointChooser {
 		//clean leftovers of not-regularly unmounted vaults
 		//see https://github.com/cryptomator/cryptomator/issues/1013 and https://github.com/cryptomator/cryptomator/issues/1061
 		helper.clearIrregularUnmountDebrisIfNeeded();
-		return this.environment.getMountPointsDir().map(this::choose);
-	}
-
-
-	private Path choose(Path parent) {
-		String basename = this.vaultSettings.mountName().get();
-		//regular
-		Path mountPoint = parent.resolve(basename);
-		if (Files.notExists(mountPoint)) {
-			return mountPoint;
-		}
-		//with id
-		mountPoint = parent.resolve(basename + " (" + vaultSettings.getId() + ")");
-		if (Files.notExists(mountPoint)) {
-			return mountPoint;
-		}
-		//with id and count
-		for (int i = 1; i < MAX_TMPMOUNTPOINT_CREATION_RETRIES; i++) {
-			mountPoint = parent.resolve(basename + "_(" + vaultSettings.getId() + ")_" + i);
-			if (Files.notExists(mountPoint)) {
-				return mountPoint;
-			}
-		}
-		LOG.error("Failed to find feasible mountpoint at {}{}{}_x. Giving up after {} attempts.", parent, File.separator, basename, MAX_TMPMOUNTPOINT_CREATION_RETRIES);
-		return null;
+		return this.environment.getMountPointsDir().map(dir -> this.helper.chooseTemporaryMountPoint(this.vaultSettings, dir));
 	}
 
 	@Override