diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java index 8c65b84e3..91486be5a 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java @@ -6,6 +6,8 @@ import dagger.Provides; import dagger.multibindings.IntoMap; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; import javafx.scene.Scene; import javafx.stage.Modality; import javafx.stage.Stage; @@ -51,6 +53,12 @@ public abstract class AddVaultModule { return new SimpleObjectProperty<>(); } + @Provides + @AddVaultWizardScoped + static StringProperty provideVaultName() { + return new SimpleStringProperty(""); + } + @Provides @FxmlScene(FxmlFile.ADDVAULT_WELCOME) @AddVaultWizardScoped @@ -65,6 +73,13 @@ public abstract class AddVaultModule { return fxmlLoaders.createScene("/fxml/addvault_existing.fxml"); } + @Provides + @FxmlScene(FxmlFile.ADDVAULT_NEW) + @AddVaultWizardScoped + static Scene provideCreateNewVaultScene(@AddVaultWizard FXMLLoaderFactory fxmlLoaders) { + return fxmlLoaders.createScene("/fxml/addvault_new.fxml"); + + } // ------------------ @Binds @@ -77,5 +92,10 @@ public abstract class AddVaultModule { @FxControllerKey(ChooseExistingVaultController.class) abstract FxController bindChooseExistingVaultController(ChooseExistingVaultController controller); + @Binds + @IntoMap + @FxControllerKey(CreateNewVaultController.class) + abstract FxController bindCreateNewVaultController(CreateNewVaultController controller); + } diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWelcomeController.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWelcomeController.java index 341727886..e3159236c 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWelcomeController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWelcomeController.java @@ -10,7 +10,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; -import javax.inject.Named; @AddVaultWizardScoped public class AddVaultWelcomeController implements FxController { @@ -18,16 +17,18 @@ public class AddVaultWelcomeController implements FxController { private static final Logger LOG = LoggerFactory.getLogger(AddVaultWelcomeController.class); private final Stage window; private final Lazy chooseExistingVaultScene; + private final Lazy createNewVaultScene; @Inject - AddVaultWelcomeController(@AddVaultWizard Stage window, @FxmlScene(FxmlFile.ADDVAULT_EXISTING) Lazy chooseExistingVaultScene) { + AddVaultWelcomeController(@AddVaultWizard Stage window, @FxmlScene(FxmlFile.ADDVAULT_EXISTING) Lazy chooseExistingVaultScene, @FxmlScene(FxmlFile.ADDVAULT_NEW) Lazy createNewVaultScene) { this.window = window; this.chooseExistingVaultScene = chooseExistingVaultScene; + this.createNewVaultScene = createNewVaultScene; } public void createNewVault() { LOG.debug("AddVaultWelcomeController.createNewVault()"); - // fxmlLoaders.setScene("/fxml/addvault_new.fxml", window); + window.setScene(createNewVaultScene.get()); } public void chooseExistingVault() { diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultController.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultController.java new file mode 100644 index 000000000..72a684fe0 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultController.java @@ -0,0 +1,89 @@ +package org.cryptomator.ui.addvaultwizard; + +import dagger.Lazy; +import javafx.beans.property.StringProperty; +import javafx.fxml.FXML; +import javafx.scene.Scene; +import javafx.scene.control.TextField; +import javafx.stage.Stage; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.FileAlreadyExistsException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ResourceBundle; + +/** + * TODO: Add trim() filter to vaultName + */ +@AddVaultWizardScoped +public class CreateNewVaultController implements FxController { + + public TextField textField; + private final Stage window; + private final Lazy welcomeScene; + private final StringProperty vaultName; + private final ResourceBundle resourceBundle; + + @Inject + CreateNewVaultController(@AddVaultWizard Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy welcomeScene, StringProperty vaultName, ResourceBundle resourceBundle) { + this.window = window; + this.welcomeScene = welcomeScene; + this.vaultName = vaultName; + this.resourceBundle = resourceBundle; + } + + @FXML + public void initialize() { + vaultName.bind(textField.textProperty()); + } + + @FXML + public void back() { + window.setScene(welcomeScene.get()); + } + + @FXML + public void next() { + if (nameIsValid()) { + window.close(); + } else { + //TODO + } + } + + /** + * Checks if {@link CreateNewVaultController#vaultName}is a valid directory name in the OS by creating and deleting a directory with the giving name in the temporary section of the OS + * TODO: Logging + * + * @return true, if a directory with the name already exists or can be created + */ + private boolean nameIsValid() { + try { + Path tmp = Files.createTempDirectory(vaultName.get()); + Files.deleteIfExists(tmp.toAbsolutePath()); + return true; + } catch (FileAlreadyExistsException e) { + return true; + } catch (IOException e) { + return false; + } catch (IllegalArgumentException e) { + return false; + } + } + + /* Getter/Setter */ + + public String getVaultName() { + return vaultName.get(); + } + + public StringProperty vaultNameProperty() { + return vaultName; + } + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java index d7c52ee3b..1c0385ff1 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -4,6 +4,7 @@ public enum FxmlFile { MAIN_WINDOW("/fxml/main_window.fxml"), // ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), // ADDVAULT_EXISTING("/fxml/addvault_existing.fxml"), // + ADDVAULT_NEW("/fxml/addvault_new.fxml"), // PREFERENCES("/fxml/preferences.fxml"), // UNLOCK("/fxml/unlock2.fxml"), // TODO rename UNLOCK_SUCCESS("/fxml/unlock_success.fxml"), diff --git a/main/ui/src/main/resources/fxml/addvault_new.fxml b/main/ui/src/main/resources/fxml/addvault_new.fxml new file mode 100644 index 000000000..31c2335f3 --- /dev/null +++ b/main/ui/src/main/resources/fxml/addvault_new.fxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + +