From e9f6854df81542978c53b07e8d14b59a7b30bfc5 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 10 Jun 2025 13:31:41 +0200 Subject: [PATCH] added unlock flow when opening vault via app launch event (#3888) --- .../common/vaults/VaultListManager.java | 2 +- .../ui/fxapp/AppLaunchEventHandler.java | 26 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java index f66f976dc..6dacfcb8a 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java @@ -106,7 +106,7 @@ public class VaultListManager { vaultList.addAll(vaults); } - private Optional get(Path vaultPath) { + public Optional get(Path vaultPath) { assert vaultPath.isAbsolute(); assert vaultPath.normalize().equals(vaultPath); return vaultList.stream() // diff --git a/src/main/java/org/cryptomator/ui/fxapp/AppLaunchEventHandler.java b/src/main/java/org/cryptomator/ui/fxapp/AppLaunchEventHandler.java index 39e40600e..9d0702314 100644 --- a/src/main/java/org/cryptomator/ui/fxapp/AppLaunchEventHandler.java +++ b/src/main/java/org/cryptomator/ui/fxapp/AppLaunchEventHandler.java @@ -12,6 +12,7 @@ import javax.inject.Named; import javafx.application.Platform; import java.io.IOException; import java.nio.file.Path; +import java.util.Optional; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; @@ -58,29 +59,30 @@ class AppLaunchEventHandler { switch (event.type()) { case REVEAL_APP -> appWindows.showMainWindow(); case OPEN_FILE -> Platform.runLater(() -> { - event.pathsToOpen().forEach(this::addOrRevealVault); + event.pathsToOpen().forEach(this::openPotentialVault); }); default -> LOG.warn("Unsupported event type: {}", event.type()); } } // TODO deduplicate MainWindowController... - private void addOrRevealVault(Path potentialVaultPath) { + private void openPotentialVault(Path path) { assert Platform.isFxApplicationThread(); try { - final Vault v; - if (potentialVaultPath.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) { - v = vaultListManager.add(potentialVaultPath.getParent()); + Path potentialVaultPath = path.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT) ? path.getParent() : path; + final Optional v = vaultListManager.get(potentialVaultPath); + if (v.isPresent()) { + if (v.get().isUnlocked()) { + vaultService.reveal(v.get()); + } else if (v.get().isLocked()) { + appWindows.startUnlockWorkflow(v.get(), null); + } } else { - v = vaultListManager.add(potentialVaultPath); + vaultListManager.add(potentialVaultPath); + LOG.debug("Added vault {}", potentialVaultPath); } - - if (v.isUnlocked()) { - vaultService.reveal(v); - } - LOG.debug("Added vault {}", potentialVaultPath); } catch (IOException e) { - LOG.error("Failed to add vault " + potentialVaultPath, e); + LOG.error("Failed to add vault " + path, e); } }