implemented a new indicator within preferences_updates fxml to display the up-to-date software status

This commit is contained in:
Jan-Peter Klein 2024-01-31 11:34:05 +01:00
parent 93184abd3c
commit 3fc8541f9c
No known key found for this signature in database
GPG Key ID: 90EDA3A7C822FD0E
5 changed files with 34 additions and 3 deletions

View File

@ -8,6 +8,8 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import javafx.beans.binding.BooleanBinding; import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.beans.property.ReadOnlyStringProperty; import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.concurrent.ScheduledService; import javafx.concurrent.ScheduledService;
@ -25,14 +27,20 @@ public class UpdateChecker {
private final Environment env; private final Environment env;
private final Settings settings; private final Settings settings;
private final StringProperty latestVersionProperty; private final StringProperty latestVersionProperty;
private final BooleanProperty upToDate;
private final Comparator<String> semVerComparator; private final Comparator<String> semVerComparator;
private final ScheduledService<String> updateCheckerService; private final ScheduledService<String> updateCheckerService;
@Inject @Inject
UpdateChecker(Settings settings, Environment env, @Named("latestVersion") StringProperty latestVersionProperty, @Named("SemVer") Comparator<String> semVerComparator, ScheduledService<String> updateCheckerService) { UpdateChecker(Settings settings, Environment env, //
@Named("latestVersion") StringProperty latestVersionProperty, //
@Named("upToDate") BooleanProperty upToDate, //
@Named("SemVer") Comparator<String> semVerComparator, //
ScheduledService<String> updateCheckerService) {
this.env = env; this.env = env;
this.settings = settings; this.settings = settings;
this.latestVersionProperty = latestVersionProperty; this.latestVersionProperty = latestVersionProperty;
this.upToDate = upToDate;
this.semVerComparator = semVerComparator; this.semVerComparator = semVerComparator;
this.updateCheckerService = updateCheckerService; this.updateCheckerService = updateCheckerService;
} }
@ -68,8 +76,10 @@ public class UpdateChecker {
if (semVerComparator.compare(getCurrentVersion(), latestVersion) < 0) { if (semVerComparator.compare(getCurrentVersion(), latestVersion) < 0) {
// update is available // update is available
latestVersionProperty.set(latestVersion); latestVersionProperty.set(latestVersion);
upToDate.set(false);
} else { } else {
latestVersionProperty.set(null); latestVersionProperty.set(null);
upToDate.set(true);
} }
} }
@ -91,4 +101,7 @@ public class UpdateChecker {
return env.getAppVersion(); return env.getAppVersion();
} }
public ReadOnlyBooleanProperty upToDateProperty() {
return upToDate;
}
} }

View File

@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory;
import javax.inject.Named; import javax.inject.Named;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
import javafx.beans.binding.ObjectBinding; import javafx.beans.binding.ObjectBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.concurrent.ScheduledService; import javafx.concurrent.ScheduledService;
@ -39,6 +41,13 @@ public abstract class UpdateCheckerModule {
return new SimpleStringProperty(); return new SimpleStringProperty();
} }
@Provides
@Named("upToDate")
@FxApplicationScoped
static BooleanProperty provideUpToDate() {
return new SimpleBooleanProperty();
}
@Provides @Provides
@FxApplicationScoped @FxApplicationScoped
static Optional<HttpClient> provideHttpClient() { static Optional<HttpClient> provideHttpClient() {

View File

@ -9,6 +9,7 @@ import javafx.application.Application;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding; import javafx.beans.binding.BooleanBinding;
import javafx.beans.binding.ObjectBinding; import javafx.beans.binding.ObjectBinding;
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.beans.property.ReadOnlyStringProperty; import javafx.beans.property.ReadOnlyStringProperty;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
@ -26,7 +27,8 @@ public class UpdatesPreferencesController implements FxController {
private final ReadOnlyStringProperty latestVersion; private final ReadOnlyStringProperty latestVersion;
private final String currentVersion; private final String currentVersion;
private final BooleanBinding updateAvailable; private final BooleanBinding updateAvailable;
private final ReadOnlyBooleanProperty upToDate;
/* FXML */ /* FXML */
public CheckBox checkForUpdatesCheckbox; public CheckBox checkForUpdatesCheckbox;
@ -39,6 +41,7 @@ public class UpdatesPreferencesController implements FxController {
this.latestVersion = updateChecker.latestVersionProperty(); this.latestVersion = updateChecker.latestVersionProperty();
this.updateAvailable = latestVersion.isNotNull(); this.updateAvailable = latestVersion.isNotNull();
this.currentVersion = updateChecker.getCurrentVersion(); this.currentVersion = updateChecker.getCurrentVersion();
this.upToDate = updateChecker.upToDateProperty();
} }
public void initialize() { public void initialize() {
@ -84,4 +87,8 @@ public class UpdatesPreferencesController implements FxController {
public boolean isUpdateAvailable() { public boolean isUpdateAvailable() {
return updateAvailable.get(); return updateAvailable.get();
} }
public ReadOnlyBooleanProperty upToDateProperty(){ return upToDate;}
public Boolean getUpToDate(){ return upToDate.get();}
} }

View File

@ -6,6 +6,7 @@
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?> <?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Hyperlink?> <?import javafx.scene.control.Hyperlink?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?> <?import javafx.scene.layout.VBox?>
<?import org.cryptomator.ui.controls.FontAwesome5Spinner?> <?import org.cryptomator.ui.controls.FontAwesome5Spinner?>
<VBox xmlns:fx="http://javafx.com/fxml" <VBox xmlns:fx="http://javafx.com/fxml"
@ -29,7 +30,7 @@
<FontAwesome5Spinner fx:id="spinner" glyphSize="12"/> <FontAwesome5Spinner fx:id="spinner" glyphSize="12"/>
</graphic> </graphic>
</Button> </Button>
<Label text="%preferences.updates.upToDate" managed="${controller.upToDate}" visible="${controller.upToDate}"/>
<Hyperlink text="${linkLabel.value}" onAction="#visitDownloadsPage" textAlignment="CENTER" wrapText="true" styleClass="hyperlink-underline" visible="${controller.updateAvailable}"/> <Hyperlink text="${linkLabel.value}" onAction="#visitDownloadsPage" textAlignment="CENTER" wrapText="true" styleClass="hyperlink-underline" visible="${controller.updateAvailable}"/>
</VBox> </VBox>
</children> </children>

View File

@ -321,6 +321,7 @@ preferences.updates.currentVersion=Current Version: %s
preferences.updates.autoUpdateCheck=Check for updates automatically preferences.updates.autoUpdateCheck=Check for updates automatically
preferences.updates.checkNowBtn=Check Now preferences.updates.checkNowBtn=Check Now
preferences.updates.updateAvailable=Update to version %s available. preferences.updates.updateAvailable=Update to version %s available.
preferences.updates.upToDate=Cryptomator is up-to-date.
## Contribution ## Contribution
preferences.contribute=Support Us preferences.contribute=Support Us
preferences.contribute.registeredFor=Supporter certificate registered for %s preferences.contribute.registeredFor=Supporter certificate registered for %s