diff --git a/src/main/java/org/cryptomator/common/CommonsModule.java b/src/main/java/org/cryptomator/common/CommonsModule.java index 5ea69da6d..ab52d43fd 100644 --- a/src/main/java/org/cryptomator/common/CommonsModule.java +++ b/src/main/java/org/cryptomator/common/CommonsModule.java @@ -21,9 +21,11 @@ import org.slf4j.LoggerFactory; import javax.inject.Named; import javax.inject.Singleton; +import javafx.beans.value.ObservableValue; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Comparator; +import java.util.List; import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; @@ -141,4 +143,13 @@ public abstract class CommonsModule { return new AtomicReference<>(null); } + @Provides + @Singleton + static ObservableValue provideDefaultMountService(List mountProviders, Settings settings) { + var fallbackProvider = mountProviders.stream().findFirst().orElse(null); + + return ObservableUtil.mapWithDefault(settings.mountService, // + serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), // + fallbackProvider); + } } diff --git a/src/main/java/org/cryptomator/common/mount/Mounter.java b/src/main/java/org/cryptomator/common/mount/Mounter.java index cf5f2b678..4bdaa580b 100644 --- a/src/main/java/org/cryptomator/common/mount/Mounter.java +++ b/src/main/java/org/cryptomator/common/mount/Mounter.java @@ -11,6 +11,7 @@ import org.cryptomator.integrations.mount.MountService; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; +import javafx.beans.value.ObservableValue; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -30,27 +31,28 @@ public class Mounter { private final Environment env; private final WindowsDriveLetters driveLetters; - private final Settings settings; private final List mountProviders; private final AtomicReference firstUsedProblematicFuseMountService; + private final ObservableValue defaultMountService; @Inject public Mounter(Environment env, // WindowsDriveLetters driveLetters, // - Settings settings, List mountProviders, // - @Named("FUPFMS") AtomicReference firstUsedProblematicFuseMountService) { + List mountProviders, // + @Named("FUPFMS") AtomicReference firstUsedProblematicFuseMountService, + ObservableValue defaultMountService) { this.env = env; this.driveLetters = driveLetters; - this.settings = settings; this.mountProviders = mountProviders; this.firstUsedProblematicFuseMountService = firstUsedProblematicFuseMountService; + this.defaultMountService = defaultMountService; } private class SettledMounter { - private MountService service; - private MountBuilder builder; - private VaultSettings vaultSettings; + private final MountService service; + private final MountBuilder builder; + private final VaultSettings vaultSettings; public SettledMounter(MountService service, MountBuilder builder, VaultSettings vaultSettings) { this.service = service; @@ -139,9 +141,7 @@ public class Mounter { } public MountHandle mount(VaultSettings vaultSettings, Path cryptoFsRoot) throws IOException, MountFailedException { - var fallbackProvider = mountProviders.stream().findFirst().orElse(null); - var defMntServ = mountProviders.stream().filter(s -> s.getClass().getName().equals(settings.mountService.getValue())).findFirst().orElse(fallbackProvider); - var selMntServ = mountProviders.stream().filter(s -> s.getClass().getName().equals(vaultSettings.mountService.getValue())).findFirst().orElse(defMntServ); + var selMntServ = mountProviders.stream().filter(s -> s.getClass().getName().equals(vaultSettings.mountService.getValue())).findFirst().orElse(defaultMountService.getValue()); var targetIsProblematicFuse = isProblematicFuseService(selMntServ); if (targetIsProblematicFuse && firstUsedProblematicFuseMountService.get() == null) { diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java index 0583e4fbb..edcf0bb23 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java @@ -2,7 +2,6 @@ package org.cryptomator.ui.vaultoptions; import com.google.common.base.Strings; import dagger.Lazy; -import org.cryptomator.common.ObservableUtil; import org.cryptomator.common.mount.Mounter; import org.cryptomator.common.mount.WindowsDriveLetters; import org.cryptomator.common.settings.Settings; @@ -88,7 +87,7 @@ public class MountOptionsController implements FxController { ResourceBundle resourceBundle, // Lazy application, // List mountProviders, // - @Named("FUPFMS") AtomicReference firstUsedProblematicFuseMountService) { + @Named("FUPFMS") AtomicReference firstUsedProblematicFuseMountService, ObservableValue defaultMountService) { this.window = window; this.vaultSettings = vault.getVaultSettings(); this.windowsDriveLetters = windowsDriveLetters; @@ -96,10 +95,7 @@ public class MountOptionsController implements FxController { this.directoryPath = vault.getVaultSettings().mountPoint.map(p -> isDriveLetter(p) ? null : p.toString()); this.application = application; this.mountProviders = mountProviders; - var fallbackProvider = mountProviders.stream().findFirst().orElse(null); - this.defaultMountService = ObservableUtil.mapWithDefault(settings.mountService, // - serviceName -> mountProviders.stream().filter(s -> s.getClass().getName().equals(serviceName)).findFirst().orElse(fallbackProvider), // - fallbackProvider); + this.defaultMountService = defaultMountService; this.selectedMountService = Bindings.createObjectBinding(this::reselectMountService, defaultMountService, vaultSettings.mountService); this.fuseRestartRequired = selectedMountService.map(s -> { return firstUsedProblematicFuseMountService.get() != null //