From 23f89c1dc9350d0a18298df298812f704b953c6b Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Tue, 26 Nov 2019 17:21:28 +0100 Subject: [PATCH] Reevaluate vault state when selecting vault --- .../common/vaults/VaultListManager.java | 2 +- .../ui/mainwindow/VaultListController.java | 26 ++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java index 3bb3496b8..309c8bc29 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java @@ -76,7 +76,7 @@ public class VaultListManager { return comp.vault(); } - private VaultState determineVaultState(Path pathToVault) { + public static VaultState determineVaultState(Path pathToVault) { try { if (!CryptoFileSystemProvider.containsVault(pathToVault, MASTERKEY_FILENAME)) { return VaultState.MISSING; diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java index 82fe7c7c7..0da7063ce 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java @@ -1,14 +1,18 @@ package org.cryptomator.ui.mainwindow; +import javafx.beans.Observable; import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanBinding; import javafx.beans.property.ObjectProperty; +import javafx.beans.value.ObservableValue; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.ListView; import javafx.stage.Stage; import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultListManager; +import org.cryptomator.common.vaults.VaultState; import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.removevault.RemoveVaultComponent; @@ -23,7 +27,6 @@ public class VaultListController implements FxController { private static final Logger LOG = LoggerFactory.getLogger(VaultListController.class); - private final Stage window; private final ObservableList vaults; private final ObjectProperty selectedVault; private final VaultListCellFactory cellFactory; @@ -34,8 +37,7 @@ public class VaultListController implements FxController { public ListView vaultList; @Inject - VaultListController(@MainWindow Stage window, ObservableList vaults, ObjectProperty selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVault) { - this.window = window; + VaultListController(ObservableList vaults, ObjectProperty selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVault) { this.vaults = vaults; this.selectedVault = selectedVault; this.cellFactory = cellFactory; @@ -43,6 +45,7 @@ public class VaultListController implements FxController { this.removeVault = removeVault; this.noVaultSelected = selectedVault.isNull(); this.emptyVaultList = Bindings.isEmpty(vaults); + selectedVault.addListener(this::selectedVaultDidChange); } public void initialize() { @@ -59,6 +62,23 @@ public class VaultListController implements FxController { }); } + private void selectedVaultDidChange(@SuppressWarnings("unused") ObservableValue observableValue, @SuppressWarnings("unused") Vault oldValue, Vault newValue) { + VaultState reportedState = newValue.getState(); + switch (reportedState) { + case LOCKED: + case NEEDS_MIGRATION: + case MISSING: + VaultState determinedState = VaultListManager.determineVaultState(newValue.getPath()); + newValue.setState(determinedState); + break; + case ERROR: + case UNLOCKED: + case PROCESSING: + default: + // no-op + } + } + @FXML public void didClickAddVault() { addVaultWizard.build().showAddVaultWizard();