From 0da0a1f386042a1b97857b322f3c348598e1caa5 Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 4 Mar 2024 16:19:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E4=B8=8D=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E9=99=8D=E7=BA=A7=E6=9B=B4=E6=96=B0=20(#2862)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 默认不进行降级更新 * update --- .../org/jackhuang/hmcl/upgrade/RemoteVersion.java | 13 ++++++++++--- .../org/jackhuang/hmcl/upgrade/UpdateChecker.java | 10 +++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java index c3ac2caaf..81947320e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/RemoteVersion.java @@ -38,10 +38,11 @@ public class RemoteVersion { String jarHash = Optional.ofNullable(response.get("jarsha1")).map(JsonElement::getAsString).orElse(null); String packXZUrl = Optional.ofNullable(response.get("packxz")).map(JsonElement::getAsString).orElse(null); String packXZHash = Optional.ofNullable(response.get("packxzsha1")).map(JsonElement::getAsString).orElse(null); + boolean force = Optional.ofNullable(response.get("force")).map(JsonElement::getAsBoolean).orElse(false); if (Pack200Utils.isSupported() && packXZUrl != null && packXZHash != null) { - return new RemoteVersion(channel, version, packXZUrl, Type.PACK_XZ, new IntegrityCheck("SHA-1", packXZHash)); + return new RemoteVersion(channel, version, packXZUrl, Type.PACK_XZ, new IntegrityCheck("SHA-1", packXZHash), force); } else if (jarUrl != null && jarHash != null) { - return new RemoteVersion(channel, version, jarUrl, Type.JAR, new IntegrityCheck("SHA-1", jarHash)); + return new RemoteVersion(channel, version, jarUrl, Type.JAR, new IntegrityCheck("SHA-1", jarHash), force); } else { throw new IOException("No download url is available"); } @@ -55,13 +56,15 @@ public class RemoteVersion { private final String url; private final Type type; private final IntegrityCheck integrityCheck; + private final boolean force; - public RemoteVersion(UpdateChannel channel, String version, String url, Type type, IntegrityCheck integrityCheck) { + public RemoteVersion(UpdateChannel channel, String version, String url, Type type, IntegrityCheck integrityCheck, boolean force) { this.channel = channel; this.version = version; this.url = url; this.type = type; this.integrityCheck = integrityCheck; + this.force = force; } public UpdateChannel getChannel() { @@ -84,6 +87,10 @@ public class RemoteVersion { return integrityCheck; } + public boolean isForce() { + return force; + } + @Override public String toString() { return "[" + version + " from " + url + "]"; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java index 10569497b..eb9f896cb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateChecker.java @@ -24,6 +24,7 @@ import javafx.beans.property.*; import javafx.beans.value.ObservableBooleanValue; import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.util.io.NetworkUtils; +import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.io.IOException; import java.util.logging.Level; @@ -42,10 +43,13 @@ public final class UpdateChecker { RemoteVersion latest = latestVersion.get(); if (latest == null || isDevelopmentVersion(Metadata.VERSION)) { return false; - } else { - // We can update from development version to stable version, - // which can be downgrading. + } else if (latest.isForce() + || Metadata.isNightly() + || latest.getChannel() == UpdateChannel.NIGHTLY + || latest.getChannel() != UpdateChannel.getChannel()) { return !latest.getVersion().equals(Metadata.VERSION); + } else { + return VersionNumber.compare(Metadata.VERSION, latest.getVersion()) < 0; } }, latestVersion);