replace AppEvent by UpdateEvent and emit it on available update

This commit is contained in:
Armin Schrenk
2025-02-12 11:11:12 +01:00
parent 44fe4a6f8a
commit db96074119
4 changed files with 14 additions and 5 deletions

View File

@@ -1,3 +0,0 @@
package org.cryptomator.notify;
public record AppEvent() implements Event {}

View File

@@ -1,5 +1,5 @@
package org.cryptomator.notify;
public sealed interface Event permits AppEvent, VaultEvent {
public sealed interface Event permits UpdateEvent, VaultEvent {
}

View File

@@ -0,0 +1,3 @@
package org.cryptomator.notify;
public record UpdateEvent(String newVersion) implements Event {}

View File

@@ -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<String> updateCheckerService;
private final ObjectProperty<UpdateCheckState> state = new SimpleObjectProperty<>(UpdateCheckState.NOT_CHECKED);
private final ObjectProperty<Instant> lastSuccessfulUpdateCheck;
private final ObservableList<Event> eventQueue;
private final Comparator<String> 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<String> updateCheckerService) {
ScheduledService<String> updateCheckerService, //
ObservableList<Event> 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) {