Browse Source

complete workflow

Armin Schrenk 2 years ago
parent
commit
6c11cc8f1d

+ 1 - 0
src/main/java/org/cryptomator/ui/common/FxmlFile.java

@@ -11,6 +11,7 @@ public enum FxmlFile {
 	CHANGEPASSWORD("/fxml/changepassword.fxml"), //
 	CONVERTVAULT_HUBTOLOCAL_START("/fxml/convertvault_hubtolocal_start.fxml"), //
 	CONVERTVAULT_HUBTOLOCAL_CONVERT("/fxml/convertvault_hubtolocal_convert.fxml"), //
+	CONVERTVAULT_HUBTOLOCAL_SUCCESS("/fxml/convertvault_hubtolocal_success.fxml"), //
 	ERROR("/fxml/error.fxml"), //
 	FORGET_PASSWORD("/fxml/forget_password.fxml"), //
 	HEALTH_START("/fxml/health_start.fxml"), //

+ 12 - 0
src/main/java/org/cryptomator/ui/convertvault/ConvertVaultModule.java

@@ -83,6 +83,13 @@ abstract class ConvertVaultModule {
 		return fxmlLoaders.createScene(FxmlFile.CONVERTVAULT_HUBTOLOCAL_CONVERT);
 	}
 
+	@Provides
+	@FxmlScene(FxmlFile.CONVERTVAULT_HUBTOLOCAL_SUCCESS)
+	@ConvertVaultScoped
+	static Scene provideHubToLocalSuccessScene(@ConvertVaultWindow FxmlLoaderFactory fxmlLoaders) {
+		return fxmlLoaders.createScene(FxmlFile.CONVERTVAULT_HUBTOLOCAL_SUCCESS);
+	}
+
 	// ------------------
 
 	@Binds
@@ -95,6 +102,11 @@ abstract class ConvertVaultModule {
 	@FxControllerKey(HubToLocalConvertController.class)
 	abstract FxController bindHubToLocalConvertController(HubToLocalConvertController controller);
 
+	@Binds
+	@IntoMap
+	@FxControllerKey(HubToLocalSuccessController.class)
+	abstract FxController bindHubToLocalSuccessController(HubToLocalSuccessController controller);
+
 
 	@Provides
 	@IntoMap

+ 12 - 4
src/main/java/org/cryptomator/ui/convertvault/HubToLocalConvertController.java

@@ -1,17 +1,20 @@
 package org.cryptomator.ui.convertvault;
 
 import com.google.common.base.Preconditions;
+import dagger.Lazy;
 import org.cryptomator.common.Passphrase;
 import org.cryptomator.common.vaults.Vault;
 import org.cryptomator.cryptofs.CryptoFileSystemProperties;
 import org.cryptomator.cryptofs.CryptoFileSystemProvider;
 import org.cryptomator.cryptofs.common.BackupHelper;
-import org.cryptomator.cryptolib.api.CryptoException;
 import org.cryptomator.cryptolib.api.MasterkeyLoader;
 import org.cryptomator.cryptolib.api.MasterkeyLoadingFailedException;
 import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
 import org.cryptomator.ui.changepassword.NewPasswordController;
 import org.cryptomator.ui.common.FxController;
+import org.cryptomator.ui.common.FxmlFile;
+import org.cryptomator.ui.common.FxmlScene;
+import org.cryptomator.ui.fxapp.FxApplicationWindows;
 import org.cryptomator.ui.recoverykey.RecoveryKeyFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,9 +25,9 @@ import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.SimpleBooleanProperty;
 import javafx.beans.property.StringProperty;
 import javafx.fxml.FXML;
+import javafx.scene.Scene;
 import javafx.stage.Stage;
 import java.io.IOException;
-import java.io.UncheckedIOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
@@ -42,6 +45,8 @@ public class HubToLocalConvertController implements FxController {
 	private static final Logger LOG = LoggerFactory.getLogger(HubToLocalConvertController.class);
 
 	private final Stage window;
+	private final Lazy<Scene> successScene;
+	private final FxApplicationWindows applicationWindows;
 	private final Vault vault;
 	private final StringProperty recoveryKey;
 	private final RecoveryKeyFactory recoveryKeyFactory;
@@ -53,8 +58,10 @@ public class HubToLocalConvertController implements FxController {
 	NewPasswordController newPasswordController;
 
 	@Inject
-	public HubToLocalConvertController(@ConvertVaultWindow Stage window, @ConvertVaultWindow Vault vault, @ConvertVaultWindow StringProperty recoveryKey, RecoveryKeyFactory recoveryKeyFactory, MasterkeyFileAccess masterkeyFileAccess, ExecutorService backgroundExecutorService) {
+	public HubToLocalConvertController(@ConvertVaultWindow Stage window, @FxmlScene(FxmlFile.CONVERTVAULT_HUBTOLOCAL_SUCCESS) Lazy<Scene> successScene, FxApplicationWindows applicationWindows, @ConvertVaultWindow Vault vault, @ConvertVaultWindow StringProperty recoveryKey, RecoveryKeyFactory recoveryKeyFactory, MasterkeyFileAccess masterkeyFileAccess, ExecutorService backgroundExecutorService) {
 		this.window = window;
+		this.successScene = successScene;
+		this.applicationWindows = applicationWindows;
 		this.vault = vault;
 		this.recoveryKey = recoveryKey;
 		this.recoveryKeyFactory = recoveryKeyFactory;
@@ -82,11 +89,12 @@ public class HubToLocalConvertController implements FxController {
 					isConverting.setValue(false);
 					if (exception == null) { //TODO: check, how the exceptions are wrapped
 						LOG.info("Conversion of vault {} succeeded.", vault.getPath());
+						window.setScene(successScene.get());
 					} else {
 						LOG.error("Conversion of vault {} failed.", vault.getPath(), exception);
+						applicationWindows.showErrorWindow(exception, window, null);
 					}
 				}, Platform::runLater); //
-		//window.setScene(resetPasswordScene.get());
 	}
 
 	//visible for testing

+ 41 - 0
src/main/java/org/cryptomator/ui/convertvault/HubToLocalSuccessController.java

@@ -0,0 +1,41 @@
+package org.cryptomator.ui.convertvault;
+
+import org.cryptomator.common.vaults.Vault;
+import org.cryptomator.ui.common.FxController;
+import org.cryptomator.ui.fxapp.FxApplicationWindows;
+
+import javax.inject.Inject;
+import javafx.fxml.FXML;
+import javafx.stage.Stage;
+
+public class HubToLocalSuccessController implements FxController {
+
+	private final FxApplicationWindows appWindows;
+	private final Stage window;
+	private final Vault vault;
+
+	@Inject
+	HubToLocalSuccessController(FxApplicationWindows appWindows, @ConvertVaultWindow Stage window, @ConvertVaultWindow Vault vault) {
+		this.appWindows = appWindows;
+		this.window = window;
+		this.vault = vault;
+	}
+
+	@FXML
+	public void unlockAndClose() {
+		close();
+		vault.getVaultConfigCache();
+		appWindows.startUnlockWorkflow(vault, window);
+	}
+
+	@FXML
+	public void close() {
+		window.close();
+	}
+
+	/* Observables */
+
+	public Vault getVault() {
+		return vault;
+	}
+}

+ 57 - 0
src/main/resources/fxml/convertvault_hubtolocal_success.fxml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
+<?import org.cryptomator.ui.controls.FormattedLabel?>
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.ButtonBar?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.Region?>
+<?import javafx.scene.layout.StackPane?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.shape.Circle?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.Group?>
+<HBox xmlns:fx="http://javafx.com/fxml"
+	  xmlns="http://javafx.com/javafx"
+	  fx:controller="org.cryptomator.ui.convertvault.HubToLocalSuccessController"
+	  minWidth="400"
+	  maxWidth="400"
+	  minHeight="145"
+	  spacing="12"
+	  alignment="TOP_LEFT">
+	<padding>
+		<Insets topRightBottomLeft="24"/>
+	</padding>
+	<children>
+		<Region VBox.vgrow="ALWAYS"/>
+		<Group>
+			<StackPane>
+				<padding>
+					<Insets topRightBottomLeft="6"/>
+				</padding>
+				<Circle styleClass="glyph-icon-primary" radius="24"/>
+				<FontAwesome5IconView styleClass="glyph-icon-white" glyph="CHECK" glyphSize="24"/>
+			</StackPane>
+		</Group>
+
+		<VBox HBox.hgrow="ALWAYS">
+			<Label styleClass="label-large" text="TODO Conversion success" wrapText="true" textAlignment="LEFT">
+				<padding>
+					<Insets bottom="6" top="6"/>
+				</padding>
+			</Label>
+
+			<Label text="TODO unlock with password now. Pleas keep in mind..." wrapText="true" textAlignment="LEFT"/>
+
+			<Region VBox.vgrow="ALWAYS" minHeight="18"/>
+			<ButtonBar buttonMinWidth="120" buttonOrder="+IU">
+				<buttons>
+					<Button text="%generic.button.done" ButtonBar.buttonData="FINISH" onAction="#close" defaultButton="${!controller.vault.locked}"/>
+					<Button text="TODO unlockNow" ButtonBar.buttonData="OTHER" onAction="#unlockAndClose" defaultButton="${controller.vault.locked}" visible="${controller.vault.locked}" managed="${controller.vault.locked}"/>
+				</buttons>
+			</ButtonBar>
+		</VBox>
+
+	</children>
+</HBox>

+ 9 - 1
src/test/java/org/cryptomator/ui/convertvault/HubToLocalConvertControllerTest.java

@@ -1,11 +1,13 @@
 package org.cryptomator.ui.convertvault;
 
+import dagger.Lazy;
 import org.cryptomator.common.Constants;
 import org.cryptomator.common.Passphrase;
 import org.cryptomator.common.vaults.Vault;
 import org.cryptomator.cryptolib.api.MasterkeyLoadingFailedException;
 import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
 import org.cryptomator.ui.changepassword.NewPasswordController;
+import org.cryptomator.ui.fxapp.FxApplicationWindows;
 import org.cryptomator.ui.recoverykey.RecoveryKeyFactory;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -16,6 +18,7 @@ import org.mockito.Mockito;
 
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.StringProperty;
+import javafx.scene.Scene;
 import javafx.stage.Stage;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
@@ -39,6 +42,9 @@ public class HubToLocalConvertControllerTest {
 	MasterkeyFileAccess masterkeyFileAccess;
 	ExecutorService backgroundExecutorService;
 	BooleanProperty isConverting;
+	FxApplicationWindows appWindows;
+	Lazy<Scene> successScene;
+
 	NewPasswordController newPasswordController;
 
 	HubToLocalConvertController inTest;
@@ -52,8 +58,10 @@ public class HubToLocalConvertControllerTest {
 		masterkeyFileAccess = Mockito.mock(MasterkeyFileAccess.class);
 		backgroundExecutorService = Mockito.mock(ExecutorService.class);
 		isConverting = Mockito.mock(BooleanProperty.class);
+		appWindows = Mockito.mock(FxApplicationWindows.class);
+		successScene = Mockito.mock(Lazy.class);
 		newPasswordController = Mockito.mock(NewPasswordController.class);
-		inTest = new HubToLocalConvertController(window, vault, recoveryKey, recoveryKeyFactory, masterkeyFileAccess, backgroundExecutorService);
+		inTest = new HubToLocalConvertController(window, successScene, appWindows, vault, recoveryKey, recoveryKeyFactory, masterkeyFileAccess, backgroundExecutorService);
 		inTest.newPasswordController = newPasswordController;
 	}