From a03f00ee9a03bc0a12c67a6c3c7316a2ceef42cd Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Tue, 31 Oct 2023 20:29:54 +0100 Subject: [PATCH] set up default mount service as pre fallbackProvider --- .../org/cryptomator/common/vaults/Vault.java | 23 ++++++++++++------- .../common/vaults/VaultModule.java | 14 +++++------ .../cryptomator/ui/unlock/UnlockWorkflow.java | 5 ++-- .../vaultoptions/MountOptionsController.java | 8 +++++-- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/cryptomator/common/vaults/Vault.java b/src/main/java/org/cryptomator/common/vaults/Vault.java index 696952510..5223025d0 100644 --- a/src/main/java/org/cryptomator/common/vaults/Vault.java +++ b/src/main/java/org/cryptomator/common/vaults/Vault.java @@ -14,7 +14,7 @@ import org.cryptomator.common.ObservableUtil; import org.cryptomator.common.mount.ActualMountService; import org.cryptomator.common.mount.FuseRestartRequiredException; import org.cryptomator.common.mount.Mounter; -import org.cryptomator.common.mount.WindowsDriveLetters; +import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.cryptofs.CryptoFileSystem; import org.cryptomator.cryptofs.CryptoFileSystemProperties; @@ -76,14 +76,23 @@ public class Vault { private final Mounter mounter; private final BooleanProperty showingStats; private final ObservableValue actualMountService; - private final List mountProviders; private final ObservableValue selectedMountService; private final AtomicReference firstUsedProblematicFuseMountService; private final AtomicReference mountHandle = new AtomicReference<>(null); @Inject - Vault(VaultSettings vaultSettings, VaultConfigCache configCache, AtomicReference cryptoFileSystem, List mountProviders, VaultState state, @Named("lastKnownException") ObjectProperty lastKnownException, VaultStats stats, WindowsDriveLetters windowsDriveLetters, Mounter mounter, @Named("vaultMountService") ObservableValue actualMountService, @Named("FUPFMS") AtomicReference firstUsedProblematicFuseMountService) { + Vault(Settings settings, + VaultSettings vaultSettings, + VaultConfigCache configCache, + AtomicReference cryptoFileSystem, + List mountProviders, + VaultState state, + @Named("lastKnownException") ObjectProperty lastKnownException, + VaultStats stats, + Mounter mounter, + @Named("vaultMountService") ObservableValue actualMountService, + @Named("FUPFMS") AtomicReference firstUsedProblematicFuseMountService) { this.vaultSettings = vaultSettings; this.configCache = configCache; this.cryptoFileSystem = cryptoFileSystem; @@ -101,9 +110,9 @@ public class Vault { this.mounter = mounter; this.showingStats = new SimpleBooleanProperty(false); this.actualMountService = actualMountService; - this.mountProviders = mountProviders; var fallbackProvider = mountProviders.stream().findFirst().orElse(null); - this.selectedMountService = ObservableUtil.mapWithDefault(vaultSettings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); + var defaultMountService = ObservableUtil.mapWithDefault(settings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); + this.selectedMountService = ObservableUtil.mapWithDefault(vaultSettings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(defaultMountService.getValue()), defaultMountService.getValue()); this.firstUsedProblematicFuseMountService = firstUsedProblematicFuseMountService; } @@ -157,9 +166,7 @@ public class Vault { if (cryptoFileSystem.get() != null) { throw new IllegalStateException("Already unlocked."); } - var fallbackProvider = mountProviders.stream().findFirst().orElse(null); - var selMountServ = ObservableUtil.mapWithDefault(vaultSettings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); - var fuseRestartRequired = selMountServ.map(s -> // + var fuseRestartRequired = selectedMountService.map(s -> // firstUsedProblematicFuseMountService.get() != null // && VaultModule.isProblematicFuseService(s) // && !firstUsedProblematicFuseMountService.get().equals(s)).getValue(); diff --git a/src/main/java/org/cryptomator/common/vaults/VaultModule.java b/src/main/java/org/cryptomator/common/vaults/VaultModule.java index 7e08e5e8a..b172a1e03 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultModule.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultModule.java @@ -10,6 +10,7 @@ import dagger.Provides; import org.cryptomator.common.Nullable; import org.cryptomator.common.ObservableUtil; import org.cryptomator.common.mount.ActualMountService; +import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.cryptofs.CryptoFileSystem; import org.cryptomator.integrations.mount.MountService; @@ -39,18 +40,17 @@ public class VaultModule { @Provides @Named("vaultMountService") @PerVault - static ObservableValue provideMountService(VaultSettings vaultSettings, List serviceImpls, @Named("FUPFMS") AtomicReference fupfms) { + static ObservableValue provideMountService(Settings settings, VaultSettings vaultSettings, List serviceImpls, @Named("FUPFMS") AtomicReference fupfms) { var fallbackProvider = serviceImpls.stream().findFirst().orElse(null); - var observableMountService = ObservableUtil.mapWithDefault(vaultSettings.mountService, // + var defaultMountService = ObservableUtil.mapWithDefault(settings.mountService, serviceName -> serviceImpls.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); + return ObservableUtil.mapWithDefault(vaultSettings.mountService, // desiredServiceImpl -> { // var serviceFromSettings = serviceImpls.stream().filter(serviceImpl -> serviceImpl.getClass().getName().equals(desiredServiceImpl)).findAny(); // - var targetedService = serviceFromSettings.orElse(fallbackProvider); + var targetedService = serviceFromSettings.orElse(defaultMountService.getValue()); return applyWorkaroundForProblematicFuse(targetedService, serviceFromSettings.isPresent(), fupfms); }, // - () -> { // - return applyWorkaroundForProblematicFuse(fallbackProvider, true, fupfms); - }); - return observableMountService; + () -> applyWorkaroundForProblematicFuse(defaultMountService.getValue(), true, fupfms) + ); } //see https://github.com/cryptomator/cryptomator/issues/2786 diff --git a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java index 533ab0ac5..98385f1d6 100644 --- a/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java +++ b/src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java @@ -96,7 +96,7 @@ public class UnlockWorkflow extends Task { }); } - private void handleFuseRestartRequiredError(FuseRestartRequiredException frre) { + private void handleFuseRestartRequiredError(FuseRestartRequiredException fRRE) { Platform.runLater(() -> { window.setScene(fuseRestartRequiredScene.get()); window.show(); @@ -133,8 +133,7 @@ public class UnlockWorkflow extends Task { Throwable throwable = super.getException(); if(throwable instanceof IllegalMountPointException impe) { handleIllegalMountPointError(impe); - } - else if (throwable instanceof FuseRestartRequiredException fRRE) { + } else if (throwable instanceof FuseRestartRequiredException fRRE) { handleFuseRestartRequiredError(fRRE); } else { handleGenericError(throwable); diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java index 8b57a22da..1907f7ead 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java @@ -4,6 +4,7 @@ import com.google.common.base.Strings; import dagger.Lazy; import org.cryptomator.common.ObservableUtil; import org.cryptomator.common.mount.WindowsDriveLetters; +import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.common.vaults.Vault; import org.cryptomator.common.vaults.VaultModule; @@ -58,6 +59,7 @@ public class MountOptionsController implements FxController { private final ObservableValue mountFlagsSupported; private final ObservableValue directoryPath; private final List mountProviders; + private final ObservableValue defaultMountService; private final ObservableValue selectedMountService; private final ObservableValue fuseRestartRequired; private final BooleanExpression loopbackPortSupported; @@ -80,6 +82,7 @@ public class MountOptionsController implements FxController { @Inject MountOptionsController(@VaultOptionsWindow Stage window, // + Settings settings, // @VaultOptionsWindow Vault vault, // WindowsDriveLetters windowsDriveLetters, // ResourceBundle resourceBundle, // @@ -94,7 +97,8 @@ public class MountOptionsController implements FxController { this.application = application; this.mountProviders = mountProviders; var fallbackProvider = mountProviders.stream().findFirst().orElse(null); - this.selectedMountService = ObservableUtil.mapWithDefault(vaultSettings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); + this.defaultMountService = ObservableUtil.mapWithDefault(settings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), fallbackProvider); + this.selectedMountService = ObservableUtil.mapWithDefault(vaultSettings.mountService, serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(defaultMountService.getValue()), defaultMountService.getValue()); this.fuseRestartRequired = selectedMountService.map(s -> // firstUsedProblematicFuseMountService.get() != null // && VaultModule.isProblematicFuseService(s) // @@ -363,7 +367,7 @@ public class MountOptionsController implements FxController { @Override public String toString(MountService provider) { if (provider == null) { - return resourceBundle.getString("preferences.volume.type.default"); + return resourceBundle.getString("preferences.volume.type.default") + " (" + defaultMountService.getValue().displayName() + ")"; } else { return provider.displayName(); }