Browse Source

added unlock flow when opening vault via app launch event (#3888)

Tobias Hagemann 1 month ago
parent
commit
e9f6854df8

+ 1 - 1
src/main/java/org/cryptomator/common/vaults/VaultListManager.java

@@ -106,7 +106,7 @@ public class VaultListManager {
 		vaultList.addAll(vaults);
 	}
 
-	private Optional<Vault> get(Path vaultPath) {
+	public Optional<Vault> get(Path vaultPath) {
 		assert vaultPath.isAbsolute();
 		assert vaultPath.normalize().equals(vaultPath);
 		return vaultList.stream() //

+ 14 - 12
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<Vault> 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);
 		}
 	}