diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0e1f598be..2ffc3070e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,11 @@ name: Build on: push: + pull_request_target: + types: [labeled] env: - JAVA_VERSION: 16 + JAVA_VERSION: 17 defaults: run: @@ -17,19 +19,16 @@ jobs: if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')" steps: - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: actions/setup-java@v2 with: + distribution: 'temurin' java-version: ${{ env.JAVA_VERSION }} - - uses: actions/cache@v2 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven- + cache: 'maven' - name: Build and Test run: mvn -B clean install jacoco:report -Pcoverage,dependency-check - name: Upload code coverage report id: codacyCoverageReporter + if: "github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'pr:safe')" run: bash <(curl -Ls https://coverage.codacy.com/get.sh) env: CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }} diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml new file mode 100644 index 000000000..c529ca09b --- /dev/null +++ b/.github/workflows/pullrequest.yml @@ -0,0 +1,26 @@ +name: Pull Request + +on: + pull_request: + +env: + JAVA_VERSION: 17 + +defaults: + run: + shell: bash + +jobs: + test: + name: Compile and Test + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')" + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: ${{ env.JAVA_VERSION }} + cache: 'maven' + - name: Build and Test + run: mvn -B clean install jacoco:report -Pcoverage,dependency-check \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6be8c4cba..32e10bdec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ on: - '[0-9]+.[0-9]+.[0-9]+-*' env: - JAVA_VERSION: 16 + JAVA_VERSION: 17 defaults: run: diff --git a/.idea/misc.xml b/.idea/misc.xml index 68ef79a67..4731638fd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/README.md b/README.md index cfccf87c1..4e29763ba 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ For more information on the security details visit [cryptomator.org](https://doc ### Dependencies -* JDK 16 (e.g. adoptopenjdk) +* JDK 17 (e.g. temurin) * Maven 3 * Optional: OS-dependent build tools for native packaging (see [Windows](https://github.com/cryptomator/cryptomator-win), [OS X](https://github.com/cryptomator/cryptomator-osx), [Linux](https://github.com/cryptomator/builder-containers)) diff --git a/dist/linux/debian/control b/dist/linux/debian/control index 2f9e94ac1..ef06120b3 100644 --- a/dist/linux/debian/control +++ b/dist/linux/debian/control @@ -2,7 +2,7 @@ Source: cryptomator Maintainer: Cryptobot Section: utils Priority: optional -Build-Depends: debhelper (>=10), openjdk-16-jdk +Build-Depends: debhelper (>=10), openjdk-17-jdk Standards-Version: 4.5.0 Homepage: https://cryptomator.org Vcs-Git: https://github.com/cryptomator/cryptomator.git diff --git a/pom.xml b/pom.xml index ce8a4b4d8..1fdd85d9b 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ UTF-8 - 16 + 17 com.github.serceman,com.github.jnr,org.ow2.asm,net.java.dev.jna,org.apache.jackrabbit,org.apache.httpcomponents,de.swiesend,org.purejava,com.github.hypfvieh 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..8595d2fe1 100644 --- a/src/main/resources/fxml/vault_detail_unknownerror.fxml +++ b/src/main/resources/fxml/vault_detail_unknownerror.fxml @@ -1,15 +1,42 @@ + + + - + + + alignment="TOP_CENTER" + spacing="9"> -