diff --git a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java index 2a8f624b4..1515f2e3d 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java @@ -130,24 +130,33 @@ public class VaultListManager { private Vault create(VaultSettings vaultSettings) { var wrapper = new VaultConfigCache(vaultSettings); try { - try { - if (Objects.isNull(vaultSettings.lastKnownKeyLoader.get())) { - var keyIdScheme = wrapper.get().getKeyId().getScheme(); - vaultSettings.lastKnownKeyLoader.set(keyIdScheme); - } - } catch (NoSuchFileException e) { - LOG.warn("Vault config file not found."); - } var vaultState = determineVaultState(vaultSettings.path.get(), vaultSettings); if (vaultState == LOCKED) { //for legacy reasons: pre v8 vault do not have a config, but they are in the NEEDS_MIGRATION state wrapper.reloadConfig(); } + + if (vaultState != VaultState.Value.VAULT_CONFIG_MISSING) { + initializeLastKnownKeyLoaderIfPossible(vaultSettings, wrapper); + } + return vaultComponentFactory.create(vaultSettings, wrapper, vaultState, null).vault(); } catch (IOException e) { LOG.warn("Failed to determine vault state for {}", vaultSettings.path.get(), e); return vaultComponentFactory.create(vaultSettings, wrapper, ERROR, e).vault(); } } + + private void initializeLastKnownKeyLoaderIfPossible(VaultSettings vaultSettings, VaultConfigCache wrapper) throws IOException { + try { + if (vaultSettings.lastKnownKeyLoader.get() == null) { + var keyIdScheme = wrapper.get().getKeyId().getScheme(); + vaultSettings.lastKnownKeyLoader.set(keyIdScheme); + } + } catch (NoSuchFileException e) { + LOG.warn("Vault config file not found."); + } + } + public static VaultState.Value redetermineVaultState(Vault vault) { VaultState state = vault.stateProperty(); VaultState.Value previous = state.getValue();