diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java index d4ec76929..9a819baf8 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java @@ -85,9 +85,15 @@ public class UnlockController extends LocalizedFXMLViewController { @FXML private CheckBox savePassword; + @FXML + private CheckBox mountAfterUnlock; + @FXML private TextField mountName; + @FXML + private CheckBox revealAfterMount; + @FXML private Label winDriveLetterLabel; @@ -110,6 +116,8 @@ public class UnlockController extends LocalizedFXMLViewController { public void initialize() { advancedOptions.managedProperty().bind(advancedOptions.visibleProperty()); unlockButton.disableProperty().bind(passwordField.textProperty().isEmpty()); + mountName.disableProperty().bind(mountAfterUnlock.selectedProperty().not()); + revealAfterMount.disableProperty().bind(mountAfterUnlock.selectedProperty().not()); mountName.addEventFilter(KeyEvent.KEY_TYPED, this::filterAlphanumericKeyEvents); mountName.textProperty().addListener(this::mountNameDidChange); savePassword.setDisable(!keychainAccess.isPresent()); @@ -129,6 +137,11 @@ public class UnlockController extends LocalizedFXMLViewController { } void setVault(Vault vault) { + // TODO overheadhunter refactor + if (this.vault != null) { + this.vault.getVaultSettings().mountAfterUnlock().unbind(); + this.vault.getVaultSettings().revealAfterMount().unbind(); + } // trigger "default" change to refresh key bindings: unlockButton.setDefaultButton(false); unlockButton.setDefaultButton(true); @@ -165,6 +178,10 @@ public class UnlockController extends LocalizedFXMLViewController { Arrays.fill(storedPw, ' '); } } + mountAfterUnlock.setSelected(this.vault.getVaultSettings().mountAfterUnlock().get()); + revealAfterMount.setSelected(this.vault.getVaultSettings().revealAfterMount().get()); + this.vault.getVaultSettings().mountAfterUnlock().bind(mountAfterUnlock.selectedProperty()); + this.vault.getVaultSettings().revealAfterMount().bind(revealAfterMount.selectedProperty()); } // **************************************** @@ -318,8 +335,12 @@ public class UnlockController extends LocalizedFXMLViewController { private void unlock(CharSequence password) { try { vault.unlock(password); - vault.mount(); - vault.reveal(); + if (mountAfterUnlock.isSelected()) { + vault.mount(); + if (revealAfterMount.isSelected()) { + vault.reveal(); + } + } Platform.runLater(() -> { messageText.setText(null); listener.ifPresent(lstnr -> lstnr.didUnlock(vault)); diff --git a/main/ui/src/main/java/org/cryptomator/ui/logging/ConfigurableFileAppender.java b/main/ui/src/main/java/org/cryptomator/ui/logging/ConfigurableFileAppender.java index 9074f9a87..3a227bfd6 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/logging/ConfigurableFileAppender.java +++ b/main/ui/src/main/java/org/cryptomator/ui/logging/ConfigurableFileAppender.java @@ -50,12 +50,12 @@ public class ConfigurableFileAppender extends AbstractOutputStreamAppender layout) { if (name == null) { - LOGGER.error("No name provided for HomeDirectoryAwareFileAppender"); + LOGGER.error("No name provided for ConfigurableFileAppender"); return null; } if (pathPropertyName == null) { - LOGGER.error("No pathPropertyName provided for HomeDirectoryAwareFileAppender with name " + name); + LOGGER.error("No pathPropertyName provided for ConfigurableFileAppender with name " + name); return null; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java index c8f5ad88a..66b6419e2 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java +++ b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettings.java @@ -15,7 +15,9 @@ import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.fxmisc.easybind.EasyBind; +import javafx.beans.property.BooleanProperty; import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; @@ -28,6 +30,8 @@ public class VaultSettings { private final ObjectProperty path = new SimpleObjectProperty<>(); private final StringProperty mountName = new SimpleStringProperty(); private final StringProperty winDriveLetter = new SimpleStringProperty(); + private final BooleanProperty mountAfterUnlock = new SimpleBooleanProperty(); + private final BooleanProperty revealAfterMount = new SimpleBooleanProperty(); public VaultSettings(Settings settings, String id) { this.settings = settings; @@ -37,6 +41,7 @@ public class VaultSettings { path.addListener(this::somethingChanged); mountName.addListener(this::somethingChanged); winDriveLetter.addListener(this::somethingChanged); + mountAfterUnlock.addListener(this::somethingChanged); } private void somethingChanged(ObservableValue observable, Object oldValue, Object newValue) { @@ -107,6 +112,14 @@ public class VaultSettings { return winDriveLetter; } + public BooleanProperty mountAfterUnlock() { + return mountAfterUnlock; + } + + public BooleanProperty revealAfterMount() { + return revealAfterMount; + } + /* Hashcode/Equals */ @Override diff --git a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java index 42d480147..a7c696ab8 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java +++ b/main/ui/src/main/java/org/cryptomator/ui/settings/VaultSettingsJsonAdapter.java @@ -24,6 +24,8 @@ class VaultSettingsJsonAdapter { out.name("path").value(value.path().get().toString()); out.name("mountName").value(value.mountName().get()); out.name("winDriveLetter").value(value.winDriveLetter().get()); + out.name("mountAfterUnlock").value(value.mountAfterUnlock().get()); + out.name("revealAfterMount").value(value.revealAfterMount().get()); out.endObject(); } @@ -32,6 +34,8 @@ class VaultSettingsJsonAdapter { String path = null; String mountName = null; String winDriveLetter = null; + boolean mountAfterUnlock = true; + boolean revealAfterMount = true; in.beginObject(); while (in.hasNext()) { @@ -49,6 +53,12 @@ class VaultSettingsJsonAdapter { case "winDriveLetter": winDriveLetter = in.nextString(); break; + case "mountAfterUnlock": + mountAfterUnlock = in.nextBoolean(); + break; + case "revealAfterMount": + revealAfterMount = in.nextBoolean(); + break; default: LOG.warn("Unsupported vault setting found in JSON: " + name); in.skipValue(); @@ -60,6 +70,8 @@ class VaultSettingsJsonAdapter { vaultSettings.mountName().set(mountName); vaultSettings.path().set(Paths.get(path)); vaultSettings.winDriveLetter().set(winDriveLetter); + vaultSettings.mountAfterUnlock().set(mountAfterUnlock); + vaultSettings.revealAfterMount().set(revealAfterMount); return vaultSettings; } diff --git a/main/ui/src/main/resources/fxml/unlock.fxml b/main/ui/src/main/resources/fxml/unlock.fxml index cd27081da..97e407db6 100644 --- a/main/ui/src/main/resources/fxml/unlock.fxml +++ b/main/ui/src/main/resources/fxml/unlock.fxml @@ -72,12 +72,20 @@ -