set up default mount service as pre fallbackProvider

This commit is contained in:
Jan-Peter Klein
2023-10-31 20:29:54 +01:00
parent 80af32bd82
commit a03f00ee9a
4 changed files with 30 additions and 20 deletions

View File

@@ -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();

View File

@@ -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

View File

@@ -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);

View File

@@ -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();
}