mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-18 10:41:26 +00:00
set up default mount service as pre fallbackProvider
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user