From db96074119a035e2cf50936ed73f59ea46feb806 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 12 Feb 2025 11:11:12 +0100 Subject: [PATCH] replace AppEvent by UpdateEvent and emit it on available update --- src/main/java/org/cryptomator/notify/AppEvent.java | 3 --- src/main/java/org/cryptomator/notify/Event.java | 2 +- src/main/java/org/cryptomator/notify/UpdateEvent.java | 3 +++ .../java/org/cryptomator/ui/fxapp/UpdateChecker.java | 11 ++++++++++- 4 files changed, 14 insertions(+), 5 deletions(-) delete mode 100644 src/main/java/org/cryptomator/notify/AppEvent.java create mode 100644 src/main/java/org/cryptomator/notify/UpdateEvent.java diff --git a/src/main/java/org/cryptomator/notify/AppEvent.java b/src/main/java/org/cryptomator/notify/AppEvent.java deleted file mode 100644 index afeb829e4..000000000 --- a/src/main/java/org/cryptomator/notify/AppEvent.java +++ /dev/null @@ -1,3 +0,0 @@ -package org.cryptomator.notify; - -public record AppEvent() implements Event {} diff --git a/src/main/java/org/cryptomator/notify/Event.java b/src/main/java/org/cryptomator/notify/Event.java index a2dda9559..488b28bec 100644 --- a/src/main/java/org/cryptomator/notify/Event.java +++ b/src/main/java/org/cryptomator/notify/Event.java @@ -1,5 +1,5 @@ package org.cryptomator.notify; -public sealed interface Event permits AppEvent, VaultEvent { +public sealed interface Event permits UpdateEvent, VaultEvent { } diff --git a/src/main/java/org/cryptomator/notify/UpdateEvent.java b/src/main/java/org/cryptomator/notify/UpdateEvent.java new file mode 100644 index 000000000..0a3328fd0 --- /dev/null +++ b/src/main/java/org/cryptomator/notify/UpdateEvent.java @@ -0,0 +1,3 @@ +package org.cryptomator.notify; + +public record UpdateEvent(String newVersion) implements Event {} diff --git a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java index b857adcae..b66edbc85 100644 --- a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java +++ b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java @@ -3,6 +3,8 @@ package org.cryptomator.ui.fxapp; import org.cryptomator.common.Environment; import org.cryptomator.common.SemVerComparator; import org.cryptomator.common.settings.Settings; +import org.cryptomator.notify.Event; +import org.cryptomator.notify.UpdateEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,6 +16,7 @@ import javafx.beans.property.ReadOnlyStringProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; +import javafx.collections.ObservableList; import javafx.concurrent.ScheduledService; import javafx.concurrent.Worker; import javafx.concurrent.WorkerStateEvent; @@ -33,6 +36,7 @@ public class UpdateChecker { private final ScheduledService updateCheckerService; private final ObjectProperty state = new SimpleObjectProperty<>(UpdateCheckState.NOT_CHECKED); private final ObjectProperty lastSuccessfulUpdateCheck; + private final ObservableList eventQueue; private final Comparator versionComparator = new SemVerComparator(); private final BooleanBinding updateAvailable; private final BooleanBinding checkFailed; @@ -40,11 +44,13 @@ public class UpdateChecker { @Inject UpdateChecker(Settings settings, // Environment env, // - ScheduledService updateCheckerService) { + ScheduledService updateCheckerService, // + ObservableList eventQueue) { this.env = env; this.settings = settings; this.updateCheckerService = updateCheckerService; this.lastSuccessfulUpdateCheck = settings.lastSuccessfulUpdateCheck; + this.eventQueue = eventQueue; this.updateAvailable = Bindings.createBooleanBinding(this::isUpdateAvailable, latestVersion); this.checkFailed = Bindings.equal(UpdateCheckState.CHECK_FAILED, state); } @@ -80,6 +86,9 @@ public class UpdateChecker { lastSuccessfulUpdateCheck.set(Instant.now()); latestVersion.set(latestVersionString); state.set(UpdateCheckState.CHECK_SUCCESSFUL); + if( updateAvailable.get()) { + eventQueue.addLast(new UpdateEvent(latestVersionString)); + } } private void checkFailed(WorkerStateEvent event) {