diff --git a/.gitignore b/.gitignore index 4568d7a75..6ff6c8689 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,6 @@ out/ .idea_modules/ *.iws *.iml + +# Temporary file created by test launcher +main/launcher/ipcPort.tmp diff --git a/main/commons/pom.xml b/main/commons/pom.xml index 592f54595..fcef4fb7e 100644 --- a/main/commons/pom.xml +++ b/main/commons/pom.xml @@ -34,6 +34,10 @@ com.google.dagger dagger + + com.google.dagger + dagger-compiler + com.google.dagger diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java index a718cd4eb..38e905bcb 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java @@ -10,7 +10,6 @@ package org.cryptomator.ui.controllers; import java.io.IOException; -import java.nio.file.DirectoryNotEmptyException; import java.nio.file.FileAlreadyExistsException; import java.util.Objects; import java.util.Optional; @@ -125,8 +124,6 @@ public class InitializeController implements ViewController { listener.ifPresent(this::invokeListenerLater); } catch (FileAlreadyExistsException ex) { messageLabel.setText(localization.getString("initialize.messageLabel.alreadyInitialized")); - } catch (DirectoryNotEmptyException ex) { - messageLabel.setText(localization.getString("initialize.messageLabel.notEmpty")); } catch (IOException ex) { LOG.error("I/O Exception", ex); messageLabel.setText(localization.getString("initialize.messageLabel.initializationFailed")); diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java index cd661655f..e610d7aad 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java @@ -9,6 +9,8 @@ ******************************************************************************/ package org.cryptomator.ui.controllers; +import static org.cryptomator.ui.util.DialogBuilderUtil.buildErrorDialog; + import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -20,6 +22,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; +import java.util.stream.Stream; import javax.inject.Inject; import javax.inject.Named; @@ -261,7 +264,18 @@ public class MainController implements ViewController { } try { final Path vaultDir = file.toPath(); - if (!Files.exists(vaultDir)) { + if (Files.exists(vaultDir)) { + try (Stream stream = Files.list(vaultDir)) { + if (stream.filter(this::isNotHidden).findAny().isPresent()) { + buildErrorDialog( // + localization.getString("main.createVault.nonEmptyDir.title"), // + localization.getString("main.createVault.nonEmptyDir.header"), // + localization.getString("main.createVault.nonEmptyDir.content"), // + ButtonType.OK).show(); + return; + } + } + } else { Files.createDirectory(vaultDir); } addVault(vaultDir, true); @@ -270,6 +284,10 @@ public class MainController implements ViewController { } } + private boolean isNotHidden(Path file) { + return !file.getFileName().toString().startsWith("."); + } + @FXML private void didClickAddExistingVaults(ActionEvent event) { final FileChooser fileChooser = new FileChooser(); diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java b/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java index 16ff849a1..2b57d14ab 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java @@ -11,8 +11,6 @@ package org.cryptomator.ui.model; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; -import java.nio.file.DirectoryNotEmptyException; -import java.nio.file.DirectoryStream; import java.nio.file.FileAlreadyExistsException; import java.nio.file.FileSystem; import java.nio.file.Files; @@ -102,13 +100,6 @@ public class Vault { } public void create(CharSequence passphrase) throws IOException { - try (DirectoryStream stream = Files.newDirectoryStream(getPath())) { - for (Path file : stream) { - if (!file.getFileName().toString().startsWith(".")) { - throw new DirectoryNotEmptyException(getPath().toString()); - } - } - } if (!isValidVaultDirectory()) { CryptoFileSystemProvider.initialize(getPath(), MASTERKEY_FILENAME, passphrase); } else { diff --git a/main/ui/src/main/resources/localization/en.txt b/main/ui/src/main/resources/localization/en.txt index d1b457cee..fb27ddf01 100644 --- a/main/ui/src/main/resources/localization/en.txt +++ b/main/ui/src/main/resources/localization/en.txt @@ -16,6 +16,9 @@ main.addDirectory.contextMenu.open=Open Existing Vault main.directoryList.remove.confirmation.title=Remove Vault main.directoryList.remove.confirmation.header=Do you really want to remove this vault? main.directoryList.remove.confirmation.content=The vault will only be removed from the list. To permanently delete it, please delete the vault from your filesystem. +main.createVault.nonEmptyDir.title=Creating vault failed +main.createVault.nonEmptyDir.header=Chosen directory is not empty +main.createVault.nonEmptyDir.content=The selected directory already contains files (possibly hidden). A vault can only be created in an empty directory. # welcome.fxml welcome.checkForUpdates.label.currentlyChecking=Checking for Updates... @@ -26,7 +29,6 @@ initialize.label.password=Password initialize.label.retypePassword=Retype Password initialize.button.ok=Create Vault initialize.messageLabel.alreadyInitialized=Vault already initialized -initialize.messageLabel.notEmpty=Vault not empty initialize.messageLabel.initializationFailed=Could not initialize vault. See log file for details. initialize.messageLabel.passwordStrength.0=Very weak initialize.messageLabel.passwordStrength.1=Weak