replace AppEvent by UpdateEvent and emit it on available update

This commit is contained in:
Armin Schrenk
2025-02-12 11:12:40 +01:00
parent 44fe4a6f8a
commit db96074119
4 changed files with 14 additions and 5 deletions
@@ -1,3 +0,0 @@
package org.cryptomator.notify;
public record AppEvent() implements Event {}
@@ -1,5 +1,5 @@
package org.cryptomator.notify; package org.cryptomator.notify;
public sealed interface Event permits AppEvent, VaultEvent { public sealed interface Event permits UpdateEvent, VaultEvent {
} }
@@ -0,0 +1,3 @@
package org.cryptomator.notify;
public record UpdateEvent(String newVersion) implements Event {}
@@ -3,6 +3,8 @@ package org.cryptomator.ui.fxapp;
import org.cryptomator.common.Environment; import org.cryptomator.common.Environment;
import org.cryptomator.common.SemVerComparator; import org.cryptomator.common.SemVerComparator;
import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.Settings;
import org.cryptomator.notify.Event;
import org.cryptomator.notify.UpdateEvent;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -14,6 +16,7 @@ import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.collections.ObservableList;
import javafx.concurrent.ScheduledService; import javafx.concurrent.ScheduledService;
import javafx.concurrent.Worker; import javafx.concurrent.Worker;
import javafx.concurrent.WorkerStateEvent; import javafx.concurrent.WorkerStateEvent;
@@ -33,6 +36,7 @@ public class UpdateChecker {
private final ScheduledService<String> updateCheckerService; private final ScheduledService<String> updateCheckerService;
private final ObjectProperty<UpdateCheckState> state = new SimpleObjectProperty<>(UpdateCheckState.NOT_CHECKED); private final ObjectProperty<UpdateCheckState> state = new SimpleObjectProperty<>(UpdateCheckState.NOT_CHECKED);
private final ObjectProperty<Instant> lastSuccessfulUpdateCheck; private final ObjectProperty<Instant> lastSuccessfulUpdateCheck;
private final ObservableList<Event> eventQueue;
private final Comparator<String> versionComparator = new SemVerComparator(); private final Comparator<String> versionComparator = new SemVerComparator();
private final BooleanBinding updateAvailable; private final BooleanBinding updateAvailable;
private final BooleanBinding checkFailed; private final BooleanBinding checkFailed;
@@ -40,11 +44,13 @@ public class UpdateChecker {
@Inject @Inject
UpdateChecker(Settings settings, // UpdateChecker(Settings settings, //
Environment env, // Environment env, //
ScheduledService<String> updateCheckerService) { ScheduledService<String> updateCheckerService, //
ObservableList<Event> eventQueue) {
this.env = env; this.env = env;
this.settings = settings; this.settings = settings;
this.updateCheckerService = updateCheckerService; this.updateCheckerService = updateCheckerService;
this.lastSuccessfulUpdateCheck = settings.lastSuccessfulUpdateCheck; this.lastSuccessfulUpdateCheck = settings.lastSuccessfulUpdateCheck;
this.eventQueue = eventQueue;
this.updateAvailable = Bindings.createBooleanBinding(this::isUpdateAvailable, latestVersion); this.updateAvailable = Bindings.createBooleanBinding(this::isUpdateAvailable, latestVersion);
this.checkFailed = Bindings.equal(UpdateCheckState.CHECK_FAILED, state); this.checkFailed = Bindings.equal(UpdateCheckState.CHECK_FAILED, state);
} }
@@ -80,6 +86,9 @@ public class UpdateChecker {
lastSuccessfulUpdateCheck.set(Instant.now()); lastSuccessfulUpdateCheck.set(Instant.now());
latestVersion.set(latestVersionString); latestVersion.set(latestVersionString);
state.set(UpdateCheckState.CHECK_SUCCESSFUL); state.set(UpdateCheckState.CHECK_SUCCESSFUL);
if( updateAvailable.get()) {
eventQueue.addLast(new UpdateEvent(latestVersionString));
}
} }
private void checkFailed(WorkerStateEvent event) { private void checkFailed(WorkerStateEvent event) {