From fb1078b35bb8578ca7afa1791cef22b37db3bd6e Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 6 Apr 2021 10:05:32 +0200 Subject: [PATCH] bump to SNAPSHOT nio-adapter and refactor Volume.mount() method: * returns void * add onExitAction parameter * adjust classes --- .../common/vaults/DokanyVolume.java | 14 +++++------ .../cryptomator/common/vaults/FuseVolume.java | 23 ++++++++----------- .../org/cryptomator/common/vaults/Vault.java | 4 +--- .../org/cryptomator/common/vaults/Volume.java | 3 ++- .../common/vaults/WebDavVolume.java | 4 ++-- main/pom.xml | 4 ++-- 6 files changed, 22 insertions(+), 30 deletions(-) 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 46aef447a..e96ed1930 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 @@ -5,9 +5,9 @@ import org.cryptomator.common.mountpoint.MountPointChooser; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.common.settings.VolumeImpl; import org.cryptomator.cryptofs.CryptoFileSystem; +import org.cryptomator.frontend.dokany.DokanyMountFailedException; import org.cryptomator.frontend.dokany.Mount; import org.cryptomator.frontend.dokany.MountFactory; -import org.cryptomator.frontend.dokany.MountFailedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,6 +16,7 @@ import javax.inject.Named; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.ExecutorService; +import java.util.function.Consumer; public class DokanyVolume extends AbstractVolume { @@ -24,15 +25,13 @@ public class DokanyVolume extends AbstractVolume { private static final String FS_TYPE_NAME = "CryptomatorFS"; private final VaultSettings vaultSettings; - private final MountFactory mountFactory; private Mount mount; @Inject - public DokanyVolume(VaultSettings vaultSettings, ExecutorService executorService, @Named("orderedMountPointChoosers") Iterable choosers) { + public DokanyVolume(VaultSettings vaultSettings, @Named("orderedMountPointChoosers") Iterable choosers) { super(choosers); this.vaultSettings = vaultSettings; - this.mountFactory = new MountFactory(executorService); } @Override @@ -41,17 +40,16 @@ public class DokanyVolume extends AbstractVolume { } @Override - public CompletionStage mount(CryptoFileSystem fs, String mountFlags) throws InvalidMountPointException, VolumeException { + public void mount(CryptoFileSystem fs, String mountFlags, Consumer onExitAction) throws InvalidMountPointException, VolumeException { this.mountPoint = determineMountPoint(); try { - this.mount = mountFactory.mount(fs.getPath("/"), mountPoint, vaultSettings.mountName().get(), FS_TYPE_NAME, mountFlags.strip()); - } catch (MountFailedException e) { + this.mount = MountFactory.mount(fs.getPath("/"), mountPoint, vaultSettings.mountName().get(), FS_TYPE_NAME, mountFlags.strip(), onExitAction); + } catch (DokanyMountFailedException e) { if (vaultSettings.getCustomMountPath().isPresent()) { LOG.warn("Failed to mount vault into {}. Is this directory currently accessed by another process (e.g. Windows Explorer)?", mountPoint); } throw new VolumeException("Unable to mount Filesystem", e); } - return CompletableFuture.failedFuture(new IllegalStateException("THOU SHOULD NOT PASS")); //FIXME } @Override 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 f6e884a7a..a1579fdaf 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 @@ -6,8 +6,8 @@ import org.cryptomator.common.mountpoint.InvalidMountPointException; import org.cryptomator.common.mountpoint.MountPointChooser; import org.cryptomator.common.settings.VolumeImpl; import org.cryptomator.cryptofs.CryptoFileSystem; -import org.cryptomator.frontend.fuse.mount.CommandFailedException; import org.cryptomator.frontend.fuse.mount.EnvironmentVariables; +import org.cryptomator.frontend.fuse.mount.FuseMountException; import org.cryptomator.frontend.fuse.mount.FuseMountFactory; import org.cryptomator.frontend.fuse.mount.FuseNotSupportedException; import org.cryptomator.frontend.fuse.mount.Mount; @@ -20,8 +20,7 @@ import javax.inject.Named; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; +import java.util.function.Consumer; import java.util.regex.Pattern; public class FuseVolume extends AbstractVolume { @@ -37,14 +36,12 @@ public class FuseVolume extends AbstractVolume { } @Override - public CompletionStage mount(CryptoFileSystem fs, String mountFlags) throws InvalidMountPointException, VolumeException { + public void mount(CryptoFileSystem fs, String mountFlags, Consumer onExitAction) throws InvalidMountPointException, VolumeException { this.mountPoint = determineMountPoint(); - - mount(fs.getPath("/"), mountFlags); - return CompletableFuture.failedFuture(new IllegalStateException("THOU SHOULD NOT PASS")); //FIXME + mount(fs.getPath("/"), mountFlags, onExitAction); } - private void mount(Path root, String mountFlags) throws VolumeException { + private void mount(Path root, String mountFlags, Consumer onExitAction) throws VolumeException { try { Mounter mounter = FuseMountFactory.getMounter(); EnvironmentVariables envVars = EnvironmentVariables.create() // @@ -52,8 +49,8 @@ public class FuseVolume extends AbstractVolume { .withMountPoint(mountPoint) // .withFileNameTranscoder(mounter.defaultFileNameTranscoder()) // .build(); - this.mount = mounter.mount(root, envVars); - } catch (CommandFailedException | FuseNotSupportedException e) { + this.mount = mounter.mount(root, envVars, onExitAction); + } catch ( FuseMountException | FuseNotSupportedException e) { throw new VolumeException("Unable to mount Filesystem", e); } } @@ -94,8 +91,7 @@ public class FuseVolume extends AbstractVolume { public synchronized void unmountForced() throws VolumeException { try { mount.unmountForced(); - mount.close(); - } catch (CommandFailedException e) { + } catch (FuseMountException e) { throw new VolumeException(e); } cleanupMountPoint(); @@ -105,8 +101,7 @@ public class FuseVolume extends AbstractVolume { public synchronized void unmount() throws VolumeException { try { mount.unmount(); - mount.close(); - } catch (CommandFailedException e) { + } catch (FuseMountException e) { throw new VolumeException(e); } cleanupMountPoint(); diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java index 5c87be3be..4a1295067 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java @@ -42,7 +42,6 @@ import java.util.EnumSet; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; import static org.cryptomator.common.Constants.MASTERKEY_FILENAME; @@ -140,13 +139,12 @@ public class Vault { cryptoFileSystem.set(fs); try { volume = volumeProvider.get(); - volume.mount(fs, getEffectiveMountFlags()).handle((voit, throwable) -> { + volume.mount(fs, getEffectiveMountFlags(), throwable -> { destroyCryptoFileSystem(); setState(VaultState.LOCKED); //TODO: possible race conditions of the vault state. Use Platform.runLater()? if (throwable != null) { LOG.warn("Unexpected unmount and lock of vault" + getDisplayName(), throwable); } - return CompletableFuture.completedFuture(null); }); } catch (Exception e) { destroyCryptoFileSystem(); 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 2ec05c6b0..f608122bf 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 @@ -8,6 +8,7 @@ import java.io.IOException; import java.nio.file.Path; import java.util.Optional; import java.util.concurrent.CompletionStage; +import java.util.function.Consumer; import java.util.stream.Stream; /** @@ -33,7 +34,7 @@ public interface Volume { * @param fs * @throws IOException */ - CompletionStage mount(CryptoFileSystem fs, String mountFlags) throws IOException, VolumeException, InvalidMountPointException; + void mount(CryptoFileSystem fs, String mountFlags, Consumer onExitAction) throws IOException, VolumeException, InvalidMountPointException; /** * Reveals the mounted volume. 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 53f336e97..352cfb489 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 @@ -19,6 +19,7 @@ import java.nio.file.Path; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; +import java.util.function.Consumer; import java.util.function.Supplier; public class WebDavVolume implements Volume { @@ -43,10 +44,9 @@ public class WebDavVolume implements Volume { } @Override - public CompletionStage mount(CryptoFileSystem fs, String mountFlags) throws VolumeException { + public void mount(CryptoFileSystem fs, String mountFlags, Consumer onExitAction) throws VolumeException { startServlet(fs); mountServlet(); - return CompletableFuture.failedFuture(new IllegalStateException("THOU SHOULD NOT PASS")); //FIXME } private void startServlet(CryptoFileSystem fs){ diff --git a/main/pom.xml b/main/pom.xml index 6a99761b9..51ed64413 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -30,8 +30,8 @@ 1.0.0-beta2 1.0.0-beta2 1.0.0-beta1 - 1.3.0 - 1.2.4 + 1.4.0-SNAPSHOT + 1.3.0-SNAPSHOT 1.2.0