Browse Source

set up default mount service as pre fallbackProvider

Jan-Peter Klein 1 year ago
parent
commit
a03f00ee9a

+ 15 - 8
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> actualMountService;
-	private final List<MountService> mountProviders;
 	private final ObservableValue<MountService> selectedMountService;
 	private final AtomicReference<MountService> firstUsedProblematicFuseMountService;
 
 	private final AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
 
 	@Inject
-	Vault(VaultSettings vaultSettings, VaultConfigCache configCache, AtomicReference<CryptoFileSystem> cryptoFileSystem, List<MountService> mountProviders, VaultState state, @Named("lastKnownException") ObjectProperty<Exception> lastKnownException, VaultStats stats, WindowsDriveLetters windowsDriveLetters, Mounter mounter, @Named("vaultMountService") ObservableValue<ActualMountService> actualMountService, @Named("FUPFMS") AtomicReference<MountService> firstUsedProblematicFuseMountService) {
+	Vault(Settings settings,
+		  VaultSettings vaultSettings,
+		  VaultConfigCache configCache,
+		  AtomicReference<CryptoFileSystem> cryptoFileSystem,
+		  List<MountService> mountProviders,
+		  VaultState state,
+		  @Named("lastKnownException") ObjectProperty<Exception> lastKnownException,
+		  VaultStats stats,
+		  Mounter mounter,
+		  @Named("vaultMountService") ObservableValue<ActualMountService> actualMountService,
+		  @Named("FUPFMS") AtomicReference<MountService> 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();

+ 7 - 7
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<ActualMountService> provideMountService(VaultSettings vaultSettings, List<MountService> serviceImpls, @Named("FUPFMS") AtomicReference<MountService> fupfms) {
+	static ObservableValue<ActualMountService> provideMountService(Settings settings, VaultSettings vaultSettings, List<MountService> serviceImpls, @Named("FUPFMS") AtomicReference<MountService> 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

+ 2 - 3
src/main/java/org/cryptomator/ui/unlock/UnlockWorkflow.java

@@ -96,7 +96,7 @@ public class UnlockWorkflow extends Task<Boolean> {
 		});
 	}
 
-	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<Boolean> {
 		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);

+ 6 - 2
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<Boolean> mountFlagsSupported;
 	private final ObservableValue<String> directoryPath;
 	private final List<MountService> mountProviders;
+	private final ObservableValue<MountService> defaultMountService;
 	private final ObservableValue<MountService> selectedMountService;
 	private final ObservableValue<Boolean> 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();
 			}