浏览代码

#929, implemented functionality to add existing vault

Armin Schrenk 6 年之前
父节点
当前提交
1a5853766a

+ 8 - 0
main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java

@@ -6,6 +6,7 @@ import dagger.Provides;
 import dagger.multibindings.IntoMap;
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.SimpleObjectProperty;
+import javafx.collections.ObservableList;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
 import javafx.stage.StageStyle;
@@ -13,6 +14,7 @@ import org.cryptomator.ui.common.FXMLLoaderFactory;
 import org.cryptomator.ui.common.FxController;
 import org.cryptomator.ui.common.FxControllerKey;
 import org.cryptomator.ui.mainwindow.MainWindow;
+import org.cryptomator.ui.model.Vault;
 
 import javax.inject.Provider;
 import java.nio.file.Path;
@@ -47,6 +49,12 @@ public abstract class AddVaultModule {
 		return new SimpleObjectProperty<>();
 	}
 
+	@Provides
+	@AddVaultWizardScoped
+	static ObservableList<Vault> provideVaults(@AddVaultWizard ObservableList<Vault> vaults) {
+		return vaults;
+	}
+
 	// ------------------
 
 	@Binds

+ 6 - 0
main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardComponent.java

@@ -5,9 +5,12 @@
  *******************************************************************************/
 package org.cryptomator.ui.addvaultwizard;
 
+import dagger.BindsInstance;
 import dagger.Subcomponent;
+import javafx.collections.ObservableList;
 import javafx.stage.Stage;
 import org.cryptomator.ui.common.FXMLLoaderFactory;
+import org.cryptomator.ui.model.Vault;
 
 @AddVaultWizardScoped
 @Subcomponent(modules = {AddVaultModule.class})
@@ -29,6 +32,9 @@ public interface AddVaultWizardComponent {
 	@Subcomponent.Builder
 	interface Builder {
 
+		@BindsInstance
+		Builder vaults(@AddVaultWizard ObservableList<Vault> vaults);
+
 		AddVaultWizardComponent build();
 	}
 

+ 15 - 4
main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java

@@ -1,11 +1,15 @@
 package org.cryptomator.ui.addvaultwizard;
 
 import javafx.beans.property.ObjectProperty;
+import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
 import javafx.stage.FileChooser;
 import javafx.stage.Stage;
+import org.cryptomator.common.settings.VaultSettings;
 import org.cryptomator.ui.common.FXMLLoaderFactory;
 import org.cryptomator.ui.common.FxController;
+import org.cryptomator.ui.model.Vault;
+import org.cryptomator.ui.model.VaultFactory;
 
 import javax.inject.Inject;
 import java.io.File;
@@ -17,23 +21,27 @@ public class ChooseExistingVaultController implements FxController {
 	private final Stage window;
 	private final FXMLLoaderFactory fxmlLoaders;
 	private final ObjectProperty<Path> vaultPath;
+	private final ObservableList<Vault> vaults;
+	private final VaultFactory vaultFactory;
 
 	@Inject
-	ChooseExistingVaultController(@AddVaultWizard Stage window, @AddVaultWizard FXMLLoaderFactory fxmlLoaders, ObjectProperty<Path> vaultPath) {
+	ChooseExistingVaultController(@AddVaultWizard Stage window, @AddVaultWizard FXMLLoaderFactory fxmlLoaders, ObjectProperty<Path> vaultPath, @AddVaultWizard ObservableList<Vault> vaults, VaultFactory vaultFactory) {
 		this.window = window;
 		this.fxmlLoaders = fxmlLoaders;
 		this.vaultPath = vaultPath;
+		this.vaults = vaults;
+		this.vaultFactory = vaultFactory;
 	}
 
 	@FXML
 	public void chooseFile() {
 		FileChooser fileChooser = new FileChooser();
 		//TODO: Title is part of the localization. => inject resource bundle and get correct title
-		fileChooser.setTitle("Open Masterkey File");
+		fileChooser.setTitle("TODO Open Masterkey File");
 		fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Cryptomator Masterkey", "*.cryptomator"));
 		final File file = fileChooser.showOpenDialog(window);
 		if (file != null) {
-			vaultPath.setValue(file.toPath().toAbsolutePath());
+			vaultPath.setValue(file.toPath().toAbsolutePath().getParent());
 		}
 	}
 
@@ -44,7 +52,10 @@ public class ChooseExistingVaultController implements FxController {
 
 	@FXML
 	public void confirm() {
-		//TODO
+		//TODO: error handling & cannot unlock added vault
+		VaultSettings vaultSettings = VaultSettings.withRandomId();
+		vaultSettings.path().setValue(vaultPath.get());
+		vaults.add(vaultFactory.get(vaultSettings));
 		window.close();
 	}
 

+ 1 - 1
main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java

@@ -41,7 +41,7 @@ public class VaultListController implements FxController {
 	}
 
 	public void didClickAddVault() {
-		addVaultWizard.build().showAddVaultWizard();
+		addVaultWizard.vaults(vaults).build().showAddVaultWizard();
 	}
 
 	public void didClickRemoveVault() {