From 62b434f54994698b8b43b203159a09fa03ca5ed7 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sat, 12 Jul 2025 18:30:30 +0200 Subject: [PATCH] Invent UpdatesModule --- .../org/cryptomator/common/CommonsModule.java | 3 ++- .../common/updates/AppUpdateChecker.java | 22 ++++++++++------ .../common/updates/UpdatesModule.java | 25 +++++++++++++++++++ .../launcher/CryptomatorComponent.java | 3 --- .../launcher/CryptomatorModule.java | 6 ----- .../cryptomator/ui/fxapp/UpdateChecker.java | 11 ++++++-- 6 files changed, 50 insertions(+), 20 deletions(-) create mode 100644 src/main/java/org/cryptomator/common/updates/UpdatesModule.java diff --git a/src/main/java/org/cryptomator/common/CommonsModule.java b/src/main/java/org/cryptomator/common/CommonsModule.java index a1e3c0950..f510d1828 100644 --- a/src/main/java/org/cryptomator/common/CommonsModule.java +++ b/src/main/java/org/cryptomator/common/CommonsModule.java @@ -11,6 +11,7 @@ import org.cryptomator.common.keychain.KeychainModule; import org.cryptomator.common.mount.MountModule; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.SettingsProvider; +import org.cryptomator.common.updates.UpdatesModule; import org.cryptomator.common.vaults.VaultComponent; import org.cryptomator.common.vaults.VaultListModule; import org.cryptomator.cryptolib.common.MasterkeyFileAccess; @@ -30,7 +31,7 @@ import java.util.concurrent.SynchronousQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -@Module(subcomponents = {VaultComponent.class}, includes = {VaultListModule.class, KeychainModule.class, MountModule.class}) +@Module(subcomponents = {VaultComponent.class}, includes = {VaultListModule.class, KeychainModule.class, MountModule.class, UpdatesModule.class}) public abstract class CommonsModule { private static final Logger LOG = LoggerFactory.getLogger(CommonsModule.class); diff --git a/src/main/java/org/cryptomator/common/updates/AppUpdateChecker.java b/src/main/java/org/cryptomator/common/updates/AppUpdateChecker.java index f6a8224b1..707e07615 100644 --- a/src/main/java/org/cryptomator/common/updates/AppUpdateChecker.java +++ b/src/main/java/org/cryptomator/common/updates/AppUpdateChecker.java @@ -1,6 +1,5 @@ package org.cryptomator.common.updates; -import org.cryptomator.integrations.update.UpdateFailedException; import org.cryptomator.integrations.update.UpdateService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,13 +17,20 @@ public class AppUpdateChecker { this.updateService = updateService; } - public void checkForUpdates() { - updateService.ifPresent(service -> { - try { - service.triggerUpdate(); - } catch (UpdateFailedException e) { - LOG.error(e.toString(), e.getCause()); + public boolean isUpdateServiceAvailable() { + return updateService.isPresent(); + } + + public String checkForUpdates(UpdateService.DistributionChannel channel) { + if (!updateService.isPresent()) { + LOG.error("No UpdateService found"); + return null; + } + switch (channel) { + case LINUX_FLATPAK -> { + return updateService.map(service -> service.isUpdateAvailable(UpdateService.DistributionChannel.LINUX_FLATPAK)).orElse(null); } - }); + default -> throw new IllegalStateException("Unexpected value: " + channel); + } } } diff --git a/src/main/java/org/cryptomator/common/updates/UpdatesModule.java b/src/main/java/org/cryptomator/common/updates/UpdatesModule.java new file mode 100644 index 000000000..986e90f59 --- /dev/null +++ b/src/main/java/org/cryptomator/common/updates/UpdatesModule.java @@ -0,0 +1,25 @@ +package org.cryptomator.common.updates; + +import dagger.Module; +import dagger.Provides; +import org.cryptomator.integrations.update.UpdateService; + +import javax.inject.Singleton; +import java.util.List; +import java.util.Optional; + +@Module +public class UpdatesModule { + + @Provides + @Singleton + static List provideSupportedUpdateServices() { + return UpdateService.get().toList(); + } + + @Provides + @Singleton + static Optional provideUpdateService(List updateServices) { + return updateServices.stream().findFirst(); + } +} diff --git a/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java b/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java index cf8a9493e..72b8af80c 100644 --- a/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java +++ b/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java @@ -4,7 +4,6 @@ import dagger.BindsInstance; import dagger.Component; import org.cryptomator.common.CommonsModule; import org.cryptomator.ui.fxapp.FxApplicationComponent; -import org.cryptomator.common.updates.AppUpdateChecker; import javax.inject.Named; import javax.inject.Singleton; @@ -15,8 +14,6 @@ public interface CryptomatorComponent { Cryptomator application(); - AppUpdateChecker appUpdateChecker(); - FxApplicationComponent.Builder fxAppComponentBuilder(); @Component.Factory diff --git a/src/main/java/org/cryptomator/launcher/CryptomatorModule.java b/src/main/java/org/cryptomator/launcher/CryptomatorModule.java index 14481d5b4..42e908df2 100644 --- a/src/main/java/org/cryptomator/launcher/CryptomatorModule.java +++ b/src/main/java/org/cryptomator/launcher/CryptomatorModule.java @@ -5,7 +5,6 @@ import dagger.Provides; import org.cryptomator.integrations.autostart.AutoStartProvider; import org.cryptomator.integrations.tray.TrayIntegrationProvider; import org.cryptomator.integrations.uiappearance.UiAppearanceProvider; -import org.cryptomator.integrations.update.UpdateService; import org.cryptomator.ui.fxapp.FxApplicationComponent; import javax.inject.Named; @@ -49,9 +48,4 @@ class CryptomatorModule { return TrayIntegrationProvider.get(); } - @Provides - @Singleton - static Optional provideUpdateService() { - return UpdateService.get(); - } } diff --git a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java index ada0431cf..0854d9d90 100644 --- a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java +++ b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java @@ -4,6 +4,7 @@ import org.cryptomator.common.Environment; import org.cryptomator.common.SemVerComparator; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.updates.AppUpdateChecker; +import org.cryptomator.integrations.update.UpdateService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,12 +56,18 @@ public class UpdateChecker { public void automaticallyCheckForUpdatesIfEnabled() { if (!env.disableUpdateCheck() && settings.checkForUpdates.get()) { - startCheckingForUpdates(AUTO_CHECK_DELAY); + if (updateChecker.isUpdateServiceAvailable()) { // prefer AppUpdateChecker + var x = updateChecker.checkForUpdates(UpdateService.DistributionChannel.LINUX_FLATPAK); + LOG.info("Retrieved version from Update Service {}", x); + } else { // fallback is the "redirect user to website" approach + LOG.info("Common \"redirect user to website\" approach"); + startCheckingForUpdates(AUTO_CHECK_DELAY); + } } } public void checkForUpdatesNow() { - updateChecker.checkForUpdates(); + startCheckingForUpdates(Duration.ZERO); } private void startCheckingForUpdates(Duration initialDelay) {