|
@@ -1,10 +1,8 @@
|
|
|
package org.cryptomator.ui.preferences;
|
|
|
|
|
|
import org.cryptomator.common.Environment;
|
|
|
-import org.cryptomator.common.SemVerComparator;
|
|
|
import org.cryptomator.common.settings.Settings;
|
|
|
import org.cryptomator.ui.common.FxController;
|
|
|
-import org.cryptomator.ui.controls.FormattedLabel;
|
|
|
import org.cryptomator.ui.fxapp.UpdateChecker;
|
|
|
|
|
|
import javax.inject.Inject;
|
|
@@ -13,8 +11,10 @@ import javafx.application.Application;
|
|
|
import javafx.beans.binding.Bindings;
|
|
|
import javafx.beans.binding.BooleanBinding;
|
|
|
import javafx.beans.binding.ObjectBinding;
|
|
|
+import javafx.beans.property.BooleanProperty;
|
|
|
import javafx.beans.property.ObjectProperty;
|
|
|
import javafx.beans.property.ReadOnlyStringProperty;
|
|
|
+import javafx.beans.property.SimpleBooleanProperty;
|
|
|
import javafx.fxml.FXML;
|
|
|
import javafx.scene.control.CheckBox;
|
|
|
import javafx.scene.control.ContentDisplay;
|
|
@@ -24,7 +24,6 @@ import javafx.util.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.format.FormatStyle;
|
|
|
-import java.util.Comparator;
|
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
@@ -39,17 +38,15 @@ public class UpdatesPreferencesController implements FxController {
|
|
|
private final UpdateChecker updateChecker;
|
|
|
private final ObjectBinding<ContentDisplay> checkForUpdatesButtonState;
|
|
|
private final ReadOnlyStringProperty latestVersion;
|
|
|
+ private final ObjectProperty<LocalDateTime> updateCheckDate;
|
|
|
private final String currentVersion;
|
|
|
private final BooleanBinding updateAvailable;
|
|
|
- private final ObjectProperty<LocalDateTime> updateCheckDateProperty;
|
|
|
- private final Comparator<String> versionComparator = new SemVerComparator();
|
|
|
+ private final BooleanProperty upToDateLabelVisible = new SimpleBooleanProperty(false);
|
|
|
private final ObjectProperty<UpdateChecker.UpdateCheckState> updateCheckStateProperty;
|
|
|
|
|
|
/* FXML */
|
|
|
public CheckBox checkForUpdatesCheckbox;
|
|
|
- public FormattedLabel updateCheckDateFormattedLabel;
|
|
|
public HBox checkFailedHBox;
|
|
|
- public FormattedLabel latestVersionFormattedLabel;
|
|
|
public Label upToDateLabel;
|
|
|
|
|
|
@Inject
|
|
@@ -60,42 +57,23 @@ public class UpdatesPreferencesController implements FxController {
|
|
|
this.updateChecker = updateChecker;
|
|
|
this.checkForUpdatesButtonState = Bindings.when(updateChecker.checkingForUpdatesProperty()).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY);
|
|
|
this.latestVersion = updateChecker.latestVersionProperty();
|
|
|
+ this.updateCheckDate = updateChecker.updateCheckTimeProperty();
|
|
|
this.currentVersion = updateChecker.getCurrentVersion();
|
|
|
- this.updateAvailable = Bindings.createBooleanBinding(() -> {
|
|
|
- if (latestVersion.get() != null) {
|
|
|
- return versionComparator.compare(currentVersion, latestVersion.get()) < 0;
|
|
|
- } else {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }, latestVersion);
|
|
|
- this.updateCheckDateProperty = updateChecker.updateCheckTimeProperty();
|
|
|
+ this.updateAvailable = updateChecker.updateAvailableProperty();
|
|
|
this.updateCheckStateProperty = updateChecker.updateCheckStateProperty();
|
|
|
}
|
|
|
|
|
|
public void initialize() {
|
|
|
checkForUpdatesCheckbox.selectedProperty().bindBidirectional(settings.checkForUpdates);
|
|
|
|
|
|
- DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.getDefault());
|
|
|
- updateCheckDateFormattedLabel.arg1Property().bind(Bindings.createStringBinding(() -> (!updateCheckDateProperty.get().equals(LocalDateTime.parse(Settings.DEFAULT_LAST_UPDATE_CHECK)) && latestVersionProperty().isNotNull().get()) ? updateCheckDateProperty.get().format(formatter) : "-", updateCheckDateProperty, latestVersionProperty()));
|
|
|
-
|
|
|
- BooleanBinding isUpdateCheckFailed = updateCheckStateProperty.isEqualTo(UpdateChecker.UpdateCheckState.CHECK_FAILED);
|
|
|
- checkFailedHBox.managedProperty().bind(isUpdateCheckFailed);
|
|
|
- checkFailedHBox.visibleProperty().bind(isUpdateCheckFailed);
|
|
|
-
|
|
|
- latestVersionFormattedLabel.arg1Property().bind(Bindings.createStringBinding(() -> (latestVersion.get() != null) ? latestVersion.get() : "-", latestVersion));
|
|
|
-
|
|
|
BooleanBinding isUpdateSuccessfulAndCurrent = updateCheckStateProperty.isEqualTo(UpdateChecker.UpdateCheckState.CHECK_SUCCESSFUL).and(latestVersion.isEqualTo(currentVersion));
|
|
|
|
|
|
+
|
|
|
updateCheckStateProperty.addListener((_, _, _) -> {
|
|
|
if (isUpdateSuccessfulAndCurrent.get()) {
|
|
|
- upToDateLabel.setVisible(true);
|
|
|
- upToDateLabel.setManaged(true);
|
|
|
-
|
|
|
+ upToDateLabelVisibleProperty().set(true);
|
|
|
PauseTransition delay = new PauseTransition(Duration.seconds(5));
|
|
|
- delay.setOnFinished(_ -> {
|
|
|
- upToDateLabel.setVisible(false);
|
|
|
- upToDateLabel.setManaged(false);
|
|
|
- });
|
|
|
+ delay.setOnFinished(_ -> upToDateLabelVisibleProperty().set(false));
|
|
|
delay.play();
|
|
|
}
|
|
|
});
|
|
@@ -131,13 +109,30 @@ public class UpdatesPreferencesController implements FxController {
|
|
|
}
|
|
|
|
|
|
public String getLatestVersion() {
|
|
|
- return latestVersion.get();
|
|
|
+ return latestVersion.isNotNull().get() ? latestVersion.get() : "-";
|
|
|
}
|
|
|
|
|
|
public String getCurrentVersion() {
|
|
|
return currentVersion;
|
|
|
}
|
|
|
|
|
|
+ public ObjectProperty<LocalDateTime> updateCheckDateProperty() {
|
|
|
+ return updateCheckDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getUpdateCheckDate() {
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.getDefault());
|
|
|
+ return !updateCheckDate.get().equals(LocalDateTime.parse(Settings.DEFAULT_LAST_UPDATE_CHECK)) ? updateCheckDate.get().format(formatter) : "-";
|
|
|
+ }
|
|
|
+
|
|
|
+ public BooleanProperty upToDateLabelVisibleProperty() {
|
|
|
+ return upToDateLabelVisible;
|
|
|
+ }
|
|
|
+
|
|
|
+ public final boolean isUpToDateLabelVisible() {
|
|
|
+ return upToDateLabelVisibleProperty().get();
|
|
|
+ }
|
|
|
+
|
|
|
public BooleanBinding updateAvailableProperty() {
|
|
|
return updateAvailable;
|
|
|
}
|
|
@@ -145,4 +140,13 @@ public class UpdatesPreferencesController implements FxController {
|
|
|
public boolean isUpdateAvailable() {
|
|
|
return updateAvailable.get();
|
|
|
}
|
|
|
+
|
|
|
+ public BooleanBinding checkFailedProperty() {
|
|
|
+ return updateCheckStateProperty.isEqualTo(UpdateChecker.UpdateCheckState.CHECK_FAILED);
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isCheckFailed() {
|
|
|
+ return checkFailedProperty().get();
|
|
|
+ }
|
|
|
+
|
|
|
}
|