diff --git a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java index 545a45c04..6f63db888 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java @@ -6,6 +6,7 @@ import dagger.Provides; import dagger.multibindings.IntoMap; import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent; +import org.cryptomator.ui.common.ErrorComponent; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxControllerKey; import org.cryptomator.ui.common.FxmlFile; @@ -19,16 +20,18 @@ import org.cryptomator.ui.stats.VaultStatisticsComponent; import org.cryptomator.ui.vaultoptions.VaultOptionsComponent; import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent; +import javax.inject.Named; import javax.inject.Provider; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.Scene; +import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.StageStyle; import java.util.Map; import java.util.ResourceBundle; -@Module(subcomponents = {AddVaultWizardComponent.class, HealthCheckComponent.class, MigrationComponent.class, RemoveVaultComponent.class, VaultOptionsComponent.class, VaultStatisticsComponent.class, WrongFileAlertComponent.class}) +@Module(subcomponents = {AddVaultWizardComponent.class, HealthCheckComponent.class, MigrationComponent.class, RemoveVaultComponent.class, VaultOptionsComponent.class, VaultStatisticsComponent.class, WrongFileAlertComponent.class, ErrorComponent.class}) abstract class MainWindowModule { @Provides @@ -55,6 +58,17 @@ abstract class MainWindowModule { return stage; } + @Provides + @MainWindowScoped + @Named("errorWindow") + static Stage provideErrorStage(@MainWindow Stage window, StageFactory factory, ResourceBundle resourceBundle) { + Stage stage = factory.create(StageStyle.DECORATED); + stage.setTitle(resourceBundle.getString("main.vaultDetail.error.windowTitle")); + stage.initModality(Modality.APPLICATION_MODAL); + stage.initOwner(window); + return stage; + } + @Provides @FxmlScene(FxmlFile.MAIN_WINDOW) @MainWindowScoped diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java index 13d1bf5c9..22365da7c 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnknownErrorController.java @@ -2,45 +2,46 @@ package org.cryptomator.ui.mainwindow; import com.tobiasdiez.easybind.EasyBind; import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultListManager; +import org.cryptomator.ui.common.ErrorComponent; import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.removevault.RemoveVaultComponent; import javax.inject.Inject; +import javax.inject.Named; import javafx.beans.binding.Binding; import javafx.beans.property.ObjectProperty; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.nio.charset.StandardCharsets; +import javafx.fxml.FXML; +import javafx.stage.Stage; @MainWindowScoped public class VaultDetailUnknownErrorController implements FxController { - private final Binding stackTrace; + private final ObjectProperty vault; + private final ErrorComponent.Builder errorComponentBuilder; + private final Stage errorWindow; + private final RemoveVaultComponent.Builder removeVault; @Inject - public VaultDetailUnknownErrorController(ObjectProperty vault) { - this.stackTrace = EasyBind.select(vault) // - .selectObject(Vault::lastKnownExceptionProperty) // - .map(this::provideStackTrace); + public VaultDetailUnknownErrorController(ObjectProperty vault, ErrorComponent.Builder errorComponentBuilder, @Named("errorWindow") Stage errorWindow, RemoveVaultComponent.Builder removeVault) { + this.vault = vault; + this.errorComponentBuilder = errorComponentBuilder; + this.errorWindow = errorWindow; + this.removeVault = removeVault; } - private String provideStackTrace(Throwable cause) { - // TODO deduplicate ErrorModule.java - if (cause != null) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - cause.printStackTrace(new PrintStream(baos)); - return baos.toString(StandardCharsets.UTF_8); - } else { - return ""; - } + @FXML + public void showError() { + errorComponentBuilder.window(errorWindow).cause(vault.get().getLastKnownException()).build().showErrorScene(); } - /* Getter/Setter */ - - public Binding stackTraceProperty() { - return stackTrace; + @FXML + public void reload() { + VaultListManager.redetermineVaultState(vault.get()); } - public String getStackTrace() { - return stackTrace.getValue(); + @FXML + void didClickRemoveVault() { + removeVault.vault(vault.get()).build().showRemoveVault(); } } diff --git a/src/main/resources/fxml/vault_detail_unknownerror.fxml b/src/main/resources/fxml/vault_detail_unknownerror.fxml index 5fc60f27b..89109fcc5 100644 --- a/src/main/resources/fxml/vault_detail_unknownerror.fxml +++ b/src/main/resources/fxml/vault_detail_unknownerror.fxml @@ -1,15 +1,42 @@ + + + - + + + alignment="BASELINE_CENTER" + spacing="9"> -