From dda2afda920a3be72161fe0cc64a2dfbd32d81af Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Fri, 10 May 2024 15:45:17 +0200 Subject: [PATCH] refactored ObservableValues to BooleanBindings and code cleanup --- .../cryptomator/ui/fxapp/UpdateChecker.java | 22 ++++++++----- .../UpdatesPreferencesController.java | 33 ++++++++----------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java index 19f5a07c2..b857adcae 100644 --- a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java +++ b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java @@ -1,7 +1,6 @@ package org.cryptomator.ui.fxapp; import org.cryptomator.common.Environment; -import org.cryptomator.common.ObservableUtil; import org.cryptomator.common.SemVerComparator; import org.cryptomator.common.settings.Settings; import org.slf4j.Logger; @@ -15,7 +14,6 @@ import javafx.beans.property.ReadOnlyStringProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -import javafx.beans.value.ObservableValue; import javafx.concurrent.ScheduledService; import javafx.concurrent.Worker; import javafx.concurrent.WorkerStateEvent; @@ -36,8 +34,8 @@ public class UpdateChecker { private final ObjectProperty state = new SimpleObjectProperty<>(UpdateCheckState.NOT_CHECKED); private final ObjectProperty lastSuccessfulUpdateCheck; private final Comparator versionComparator = new SemVerComparator(); - private final ObservableValue updateAvailable; - private final ObservableValue checkFailed; + private final BooleanBinding updateAvailable; + private final BooleanBinding checkFailed; @Inject UpdateChecker(Settings settings, // @@ -47,7 +45,7 @@ public class UpdateChecker { this.settings = settings; this.updateCheckerService = updateCheckerService; this.lastSuccessfulUpdateCheck = settings.lastSuccessfulUpdateCheck; - this.updateAvailable = ObservableUtil.mapWithDefault(latestVersion, latest -> versionComparator.compare(getCurrentVersion(), latest) < 0, false); + this.updateAvailable = Bindings.createBooleanBinding(this::isUpdateAvailable, latestVersion); this.checkFailed = Bindings.equal(UpdateCheckState.CHECK_FAILED, state); } @@ -104,15 +102,23 @@ public class UpdateChecker { return latestVersion; } - public ObservableValue updateAvailableProperty() { + public BooleanBinding updateAvailableProperty() { return updateAvailable; } - public ObservableValue checkFailedProperty() { + + public BooleanBinding checkFailedProperty() { return checkFailed; } public boolean isUpdateAvailable() { - return updateAvailable.getValue(); + String currentVersion = getCurrentVersion(); + String latestVersionString = latestVersion.get(); + + if (currentVersion == null || latestVersionString == null) { + return false; + } else { + return versionComparator.compare(currentVersion, latestVersionString) < 0; + } } public ObjectProperty lastSuccessfulUpdateCheckProperty() { diff --git a/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java index ce76251d2..11445ee55 100644 --- a/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java @@ -45,8 +45,8 @@ public class UpdatesPreferencesController implements FxController { private final StringBinding lastUpdateCheckMessage; private final ObservableValue timeDifferenceMessage; private final String currentVersion; - private final ObservableValue updateAvailable; - private final ObservableValue checkFailed; + private final BooleanBinding updateAvailable; + private final BooleanBinding checkFailed; private final BooleanProperty upToDateLabelVisible = new SimpleBooleanProperty(false); private final DateTimeFormatter formatter; private final BooleanBinding upToDate; @@ -64,7 +64,7 @@ public class UpdatesPreferencesController implements FxController { this.checkForUpdatesButtonState = Bindings.when(updateChecker.checkingForUpdatesProperty()).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY); this.latestVersion = updateChecker.latestVersionProperty(); this.lastSuccessfulUpdateCheck = updateChecker.lastSuccessfulUpdateCheckProperty(); - this.timeDifferenceMessage = lastSuccessfulUpdateCheck.map(this::updateTimeDifferenceMessage); + this.timeDifferenceMessage = Bindings.createStringBinding(this::getTimeDifferenceMessage, lastSuccessfulUpdateCheck); this.currentVersion = updateChecker.getCurrentVersion(); this.updateAvailable = updateChecker.updateAvailableProperty(); this.formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.getDefault()); @@ -126,6 +126,7 @@ public class UpdatesPreferencesController implements FxController { public StringBinding lastUpdateCheckMessageProperty() { return lastUpdateCheckMessage; } + public String getLastUpdateCheckMessage() { Instant lastCheck = lastSuccessfulUpdateCheck.getValue(); if (lastCheck != null && !lastCheck.equals(Settings.DEFAULT_TIMESTAMP)) { @@ -135,14 +136,17 @@ public class UpdatesPreferencesController implements FxController { } } - private String updateTimeDifferenceMessage(Instant lastSuccessCheck) { - if (lastSuccessCheck.equals(Settings.DEFAULT_TIMESTAMP)) { - return resourceBundle.getString("preferences.updates.lastUpdateCheck.never"); - } + public ObservableValue timeDifferenceMessageProperty() { + return timeDifferenceMessage; + } + public String getTimeDifferenceMessage() { + var lastSuccessCheck = lastSuccessfulUpdateCheck.getValue(); var duration = Duration.between(lastSuccessCheck, Instant.now()); var hours = duration.toHours(); - if (hours < 1) { + if (lastSuccessCheck.equals(Settings.DEFAULT_TIMESTAMP)) { + return resourceBundle.getString("preferences.updates.lastUpdateCheck.never"); + } else if (hours < 1) { return resourceBundle.getString("preferences.updates.lastUpdateCheck.recently"); } else if (hours < 24) { return String.format(resourceBundle.getString("preferences.updates.lastUpdateCheck.hoursAgo"), hours); @@ -151,15 +155,6 @@ public class UpdatesPreferencesController implements FxController { } } - - public ObservableValue timeDifferenceMessageProperty() { - return timeDifferenceMessage; - } - - public String getTimeDifferenceMessage() { - return timeDifferenceMessage.getValue(); - } - public BooleanProperty upToDateLabelVisibleProperty() { return upToDateLabelVisible; } @@ -168,7 +163,7 @@ public class UpdatesPreferencesController implements FxController { return upToDateLabelVisible.get(); } - public ObservableValue updateAvailableProperty() { + public BooleanBinding updateAvailableProperty() { return updateAvailable; } @@ -176,7 +171,7 @@ public class UpdatesPreferencesController implements FxController { return updateAvailable.getValue(); } - public ObservableValue checkFailedProperty() { + public BooleanBinding checkFailedProperty() { return checkFailed; }