diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java index 8be37b528..778d2b4ed 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java @@ -20,6 +20,7 @@ import java.util.Optional; public class UpdateChecker { private static final Logger LOG = LoggerFactory.getLogger(UpdateChecker.class); + private static final Duration AUTOCHECK_DELAY = Duration.seconds(5); private final Settings settings; private final Optional applicationVersion; @@ -36,7 +37,17 @@ public class UpdateChecker { this.updateCheckerService = updateCheckerService; } - public void startCheckingForUpdates(Duration initialDelay) { + public void automaticallyCheckForUpdatesIfEnabled() { + if (settings.checkForUpdates().get()) { + startCheckingForUpdates(AUTOCHECK_DELAY); + } + } + + public void checkForUpdatesNow() { + startCheckingForUpdates(Duration.ZERO); + } + + private void startCheckingForUpdates(Duration initialDelay) { updateCheckerService.setDelay(initialDelay); updateCheckerService.setOnRunning(this::checkStarted); updateCheckerService.setOnSucceeded(this::checkSucceeded); diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateCheckerModule.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateCheckerModule.java index 8b99dacd1..73c479579 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateCheckerModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/UpdateCheckerModule.java @@ -2,17 +2,15 @@ package org.cryptomator.ui.fxapp; import dagger.Module; import dagger.Provides; -import javafx.beans.binding.BooleanBinding; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.ReadOnlyBooleanProperty; -import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.binding.Bindings; +import javafx.beans.binding.ObjectBinding; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.concurrent.ScheduledService; import javafx.concurrent.Task; -import javafx.concurrent.Worker; import javafx.util.Duration; import org.apache.commons.lang3.SystemUtils; +import org.cryptomator.common.settings.Settings; import javax.inject.Named; import java.net.URI; @@ -36,22 +34,34 @@ public abstract class UpdateCheckerModule { @Provides @FxApplicationScoped - static HttpClient providesHttpClient() { + static HttpClient provideHttpClient() { return HttpClient.newHttpClient(); } @Provides @FxApplicationScoped - static HttpRequest providesCheckForUpdatesRequest(@Named("applicationVersion") Optional applicationVersion) { - String userAgent = String.format("Cryptomator VersionChecker/%s %s %s (%s)", applicationVersion.orElse("SNAPSHOT"), SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH); + static HttpRequest provideCheckForUpdatesRequest(@Named("applicationVersion") Optional applicationVersion) { + String userAgent = String.format("Cryptomator VersionChecker/%s %s %s (%s)", // + applicationVersion.orElse("SNAPSHOT"), // + SystemUtils.OS_NAME, // + SystemUtils.OS_VERSION, // + SystemUtils.OS_ARCH); // return HttpRequest.newBuilder() // .uri(LATEST_VERSION_URI) // - .header("User-Agent", userAgent).build(); + .header("User-Agent", userAgent) // + .build(); + } + + @Provides + @Named("checkForUpdatesInterval") + @FxApplicationScoped + static ObjectBinding provideCheckForUpdateInterval(Settings settings) { + return Bindings.when(settings.checkForUpdates()).then(UPDATE_CHECK_INTERVAL).otherwise(Duration.INDEFINITE); } @Provides @FxApplicationScoped - static ScheduledService provideCheckForUpdatesService(ExecutorService executor, HttpClient httpClient, HttpRequest checkForUpdatesRequest) { + static ScheduledService provideCheckForUpdatesService(ExecutorService executor, HttpClient httpClient, HttpRequest checkForUpdatesRequest, @Named("checkForUpdatesInterval") ObjectBinding period) { ScheduledService service = new ScheduledService<>() { @Override protected Task createTask() { @@ -59,7 +69,7 @@ public abstract class UpdateCheckerModule { } }; service.setExecutor(executor); - service.setPeriod(UPDATE_CHECK_INTERVAL); + service.periodProperty().bind(period); return service; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java index 50839a110..3cbcfff32 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java @@ -20,7 +20,6 @@ import java.util.concurrent.CountDownLatch; public class MainWindowController implements FxController { private static final Logger LOG = LoggerFactory.getLogger(MainWindowController.class); - private static final Duration CHECK_FOR_UPDATES_DELAY = Duration.seconds(5); private final Stage window; private final FxApplication application; @@ -57,7 +56,7 @@ public class MainWindowController implements FxController { window.setWidth(event.getSceneX()); window.setHeight(event.getSceneY()); }); - updateChecker.startCheckingForUpdates(CHECK_FOR_UPDATES_DELAY); + updateChecker.automaticallyCheckForUpdatesIfEnabled(); } @FXML diff --git a/main/ui/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java b/main/ui/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java index 8c1b2601d..aa21eebf3 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java @@ -39,7 +39,7 @@ public class UpdatesPreferencesController implements FxController { @FXML public void checkNow() { - updateChecker.startCheckingForUpdates(Duration.ZERO); + updateChecker.checkForUpdatesNow(); } /* Observable Properties */