From 28bb2ff9b1c1c16d171e6da60ac1ecc2e6649524 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 24 Mar 2023 17:22:05 +0100 Subject: [PATCH] add stub for vault conversion (hub to local) --- .../org/cryptomator/ui/common/FxmlFile.java | 1 + .../convertvault/ConvertVaultComponent.java | 41 ++++++++ .../ui/convertvault/ConvertVaultModule.java | 93 +++++++++++++++++++ .../ui/convertvault/ConvertVaultScoped.java | 13 +++ .../ui/convertvault/ConvertVaultWindow.java | 14 +++ .../HubToLocalStartController.java | 41 ++++++++ .../ui/vaultoptions/HubOptionsController.java | 9 +- .../ui/vaultoptions/VaultOptionsModule.java | 3 +- .../fxml/convertvault_hubtolocal_start.fxml | 32 +++++++ .../resources/fxml/vault_options_hub.fxml | 8 +- 10 files changed, 251 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/cryptomator/ui/convertvault/ConvertVaultComponent.java create mode 100644 src/main/java/org/cryptomator/ui/convertvault/ConvertVaultModule.java create mode 100644 src/main/java/org/cryptomator/ui/convertvault/ConvertVaultScoped.java create mode 100644 src/main/java/org/cryptomator/ui/convertvault/ConvertVaultWindow.java create mode 100644 src/main/java/org/cryptomator/ui/convertvault/HubToLocalStartController.java create mode 100644 src/main/resources/fxml/convertvault_hubtolocal_start.fxml diff --git a/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/src/main/java/org/cryptomator/ui/common/FxmlFile.java index c5b66498a..a1c41b3a1 100644 --- a/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -9,6 +9,7 @@ public enum FxmlFile { ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), // ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), // CHANGEPASSWORD("/fxml/changepassword.fxml"), // + CONVERTVAULT_HUBTOLOCAL("/fxml/convertvault_hubtolocal_start.fxml"), // ERROR("/fxml/error.fxml"), // FORGET_PASSWORD("/fxml/forget_password.fxml"), // HEALTH_START("/fxml/health_start.fxml"), // diff --git a/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultComponent.java b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultComponent.java new file mode 100644 index 000000000..384bdeb5f --- /dev/null +++ b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultComponent.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2017 Skymatic UG (haftungsbeschränkt). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the accompanying LICENSE file. + *******************************************************************************/ +package org.cryptomator.ui.convertvault; + +import dagger.BindsInstance; +import dagger.Lazy; +import dagger.Subcomponent; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; + +import javax.inject.Named; +import javafx.scene.Scene; +import javafx.stage.Stage; + +@ConvertVaultScoped +@Subcomponent(modules = {ConvertVaultModule.class}) +public interface ConvertVaultComponent { + + @ConvertVaultWindow + Stage window(); + + @FxmlScene(FxmlFile.CONVERTVAULT_HUBTOLOCAL) + Lazy hubToLocalScene(); + + default void showHubToLocalWindow() { + Stage stage = window(); + stage.setScene(hubToLocalScene().get()); + stage.sizeToScene(); + stage.show(); + } + + @Subcomponent.Factory + interface Factory { + + ConvertVaultComponent create(@BindsInstance @ConvertVaultWindow Vault vault, @BindsInstance @Named("convertVaultOwner") Stage owner); + } +} \ No newline at end of file diff --git a/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultModule.java b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultModule.java new file mode 100644 index 000000000..6c0978630 --- /dev/null +++ b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultModule.java @@ -0,0 +1,93 @@ +package org.cryptomator.ui.convertvault; + +import dagger.Binds; +import dagger.Module; +import dagger.Provides; +import dagger.multibindings.IntoMap; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.cryptofs.VaultConfig; +import org.cryptomator.ui.common.DefaultSceneFactory; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.common.FxControllerKey; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlLoaderFactory; +import org.cryptomator.ui.common.FxmlScene; +import org.cryptomator.ui.common.StageFactory; +import org.cryptomator.ui.quit.QuitController; +import org.cryptomator.ui.quit.QuitForcedController; +import org.cryptomator.ui.recoverykey.RecoveryKeyFactory; +import org.cryptomator.ui.recoverykey.RecoveryKeyValidateController; + +import javax.inject.Named; +import javax.inject.Provider; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; +import javafx.scene.Scene; +import javafx.stage.Modality; +import javafx.stage.Stage; +import java.io.IOException; +import java.util.Map; +import java.util.ResourceBundle; + +@Module +abstract class ConvertVaultModule { + + //TODO: if this fails, we cannot display an error + @Provides + @ConvertVaultWindow + @ConvertVaultScoped + static VaultConfig.UnverifiedVaultConfig vaultConfig(@ConvertVaultWindow Vault vault) { + try { + return vault.getVaultConfigCache().get(); + } catch (IOException e) { + return null; + } + } + + @Provides + @ConvertVaultWindow + @ConvertVaultScoped + static StringProperty provideRecoveryKeyProperty() { + return new SimpleStringProperty(); + } + + @Provides + @ConvertVaultWindow + @ConvertVaultScoped + static FxmlLoaderFactory provideFxmlLoaderFactory(Map, Provider> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) { + return new FxmlLoaderFactory(factories, sceneFactory, resourceBundle); + } + + @Provides + @ConvertVaultWindow + @ConvertVaultScoped + static Stage provideStage(StageFactory factory, @Named("convertVaultOwner") Stage owner, ResourceBundle resourceBundle) { + Stage stage = factory.create(); + stage.setResizable(false); + stage.initModality(Modality.WINDOW_MODAL); + stage.initOwner(owner); + return stage; + } + + @Provides + @FxmlScene(FxmlFile.CONVERTVAULT_HUBTOLOCAL) + @ConvertVaultScoped + static Scene provideHubToLocalScene(@ConvertVaultWindow FxmlLoaderFactory fxmlLoaders) { + return fxmlLoaders.createScene(FxmlFile.CONVERTVAULT_HUBTOLOCAL); + } + + // ------------------ + + @Binds + @IntoMap + @FxControllerKey(HubToLocalStartController.class) + abstract FxController bindHubToLocalStartController(HubToLocalStartController controller); + + @Provides + @IntoMap + @FxControllerKey(RecoveryKeyValidateController.class) + static FxController bindRecoveryKeyValidateController(@ConvertVaultWindow Vault vault, @ConvertVaultWindow VaultConfig.UnverifiedVaultConfig vaultConfig, @ConvertVaultWindow StringProperty recoveryKey, RecoveryKeyFactory recoveryKeyFactory) { + return new RecoveryKeyValidateController(vault, vaultConfig, recoveryKey, recoveryKeyFactory); + } + +} diff --git a/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultScoped.java b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultScoped.java new file mode 100644 index 000000000..45ff780ae --- /dev/null +++ b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultScoped.java @@ -0,0 +1,13 @@ +package org.cryptomator.ui.convertvault; + +import javax.inject.Scope; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Scope +@Documented +@Retention(RetentionPolicy.RUNTIME) +@interface ConvertVaultScoped { + +} diff --git a/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultWindow.java b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultWindow.java new file mode 100644 index 000000000..4ea9dc935 --- /dev/null +++ b/src/main/java/org/cryptomator/ui/convertvault/ConvertVaultWindow.java @@ -0,0 +1,14 @@ +package org.cryptomator.ui.convertvault; + +import javax.inject.Qualifier; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Qualifier +@Documented +@Retention(RUNTIME) +@interface ConvertVaultWindow { + +} diff --git a/src/main/java/org/cryptomator/ui/convertvault/HubToLocalStartController.java b/src/main/java/org/cryptomator/ui/convertvault/HubToLocalStartController.java new file mode 100644 index 000000000..00e3b21cf --- /dev/null +++ b/src/main/java/org/cryptomator/ui/convertvault/HubToLocalStartController.java @@ -0,0 +1,41 @@ +package org.cryptomator.ui.convertvault; + +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.recoverykey.RecoveryKeyValidateController; + +import javax.inject.Inject; +import javafx.fxml.FXML; +import javafx.stage.Stage; + +public class HubToLocalStartController implements FxController { + + private final Stage window; + + @FXML + RecoveryKeyValidateController recoveryKeyValidateController; + + @Inject + public HubToLocalStartController(@ConvertVaultWindow Stage window) { + this.window = window; + } + + @FXML + public void initialize() { + } + + @FXML + public void close() { + window.close(); + } + + @FXML + public void convert() { + //window.setScene(resetPasswordScene.get()); + } + + /* Getter/Setter */ + + public RecoveryKeyValidateController getValidateController() { + return recoveryKeyValidateController; + } +} diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/HubOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/HubOptionsController.java index 04863bfb5..3ae45d972 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/HubOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/HubOptionsController.java @@ -2,6 +2,7 @@ package org.cryptomator.ui.vaultoptions; import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.convertvault.ConvertVaultComponent; import javax.inject.Inject; import javafx.stage.Stage; @@ -10,11 +11,17 @@ public class HubOptionsController implements FxController { private final Vault vault; private final Stage window; + private final ConvertVaultComponent.Factory convertVaultFactory; @Inject - public HubOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window) { + public HubOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window, ConvertVaultComponent.Factory convertVaultFactory) { this.vault = vault; this.window = window; + this.convertVaultFactory = convertVaultFactory; + } + + public void startConversion() { + convertVaultFactory.create(vault,window).showHubToLocalWindow(); } } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java index 3888963b2..59dd5ae77 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsModule.java @@ -13,6 +13,7 @@ import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlLoaderFactory; import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.common.StageFactory; +import org.cryptomator.ui.convertvault.ConvertVaultComponent; import org.cryptomator.ui.forgetpassword.ForgetPasswordComponent; import org.cryptomator.ui.fxapp.PrimaryStage; import org.cryptomator.ui.recoverykey.RecoveryKeyComponent; @@ -26,7 +27,7 @@ import javafx.stage.Stage; import java.util.Map; import java.util.ResourceBundle; -@Module(subcomponents = {ChangePasswordComponent.class, RecoveryKeyComponent.class, ForgetPasswordComponent.class}) +@Module(subcomponents = {ChangePasswordComponent.class, RecoveryKeyComponent.class, ForgetPasswordComponent.class, ConvertVaultComponent.class}) abstract class VaultOptionsModule { @Provides diff --git a/src/main/resources/fxml/convertvault_hubtolocal_start.fxml b/src/main/resources/fxml/convertvault_hubtolocal_start.fxml new file mode 100644 index 000000000..7255dd7b5 --- /dev/null +++ b/src/main/resources/fxml/convertvault_hubtolocal_start.fxml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + +