From 6d77e0cff48e544e28db5502ad91886a62312849 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sun, 27 Oct 2024 23:49:14 +0800 Subject: [PATCH] check snapshot update by timestamp --- .../src/main/java/forge/util/BuildInfo.java | 28 +++++++++++++++++++ .../src/main/java/forge/control/FControl.java | 11 ++++++-- .../main/java/forge/view/FTitleBarBase.java | 1 + .../main/java/forge/download/AutoUpdater.java | 12 ++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/forge-core/src/main/java/forge/util/BuildInfo.java b/forge-core/src/main/java/forge/util/BuildInfo.java index 5393a62cdd9..c3195392ad2 100644 --- a/forge-core/src/main/java/forge/util/BuildInfo.java +++ b/forge-core/src/main/java/forge/util/BuildInfo.java @@ -20,10 +20,17 @@ package forge.util; import org.apache.commons.lang3.StringUtils; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Date; + /** * Provides access to information about the current version and build ID. */ public class BuildInfo { + private static Date timestamp = null; // disable instantiation private BuildInfo() { } @@ -46,6 +53,27 @@ public class BuildInfo { StringUtils.containsIgnoreCase(forgeVersion, "snapshot"); } + public static Date getTimestamp() { + if (timestamp != null) + return timestamp; + try { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String b = Files.readString( + Paths.get(BuildInfo.class.getClassLoader().getResource("build.txt").toURI()), + Charset.defaultCharset()); + timestamp = simpleDateFormat.parse(b); + } catch (Exception ignored) {} + return timestamp; + } + + public static boolean verifyTimestamp(Date updateTimestamp) { + if (updateTimestamp == null) + return false; + if (getTimestamp() == null) + return false; + System.err.println("Update Timestamp: " + updateTimestamp + "\nBuild Timestamp: " + getTimestamp()); + return updateTimestamp.after(getTimestamp()); + } public static String getUserAgent() { return "Forge/" + getVersionString(); } diff --git a/forge-gui-desktop/src/main/java/forge/control/FControl.java b/forge-gui-desktop/src/main/java/forge/control/FControl.java index fbd7d496816..09d10d0fafe 100644 --- a/forge-gui-desktop/src/main/java/forge/control/FControl.java +++ b/forge-gui-desktop/src/main/java/forge/control/FControl.java @@ -27,7 +27,9 @@ import java.awt.event.WindowEvent; import java.io.File; import java.io.IOException; import java.net.URL; +import java.text.SimpleDateFormat; import java.util.Collections; +import java.util.Date; import java.util.List; import javax.swing.ImageIcon; @@ -88,7 +90,8 @@ public enum FControl implements KeyEventDispatcher { private CloseAction closeAction; private final List currentMatches = Lists.newArrayList(); private String snapsVersion = "", currentVersion = ""; - private boolean isSnapshot; + private Date snapsTimestamp = null; + private boolean isSnapshot, hasSnapsUpdate; private Localizer localizer; public enum CloseAction { @@ -229,6 +232,10 @@ public enum FControl implements KeyEventDispatcher { if (isSnapshot && prefs.getPrefBoolean(FPref.CHECK_SNAPSHOT_AT_STARTUP)) { URL url = new URL("https://downloads.cardforge.org/dailysnapshots/version.txt"); snapsVersion = FileUtil.readFileToString(url); + url = new URL("https://downloads.cardforge.org/dailysnapshots/build.txt"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + snapsTimestamp = simpleDateFormat.parse(FileUtil.readFileToString(url)); + hasSnapsUpdate = BuildInfo.verifyTimestamp(snapsTimestamp); } } catch (Exception ignored) {} @@ -288,7 +295,7 @@ public enum FControl implements KeyEventDispatcher { return isSnapshot; } public String getSnapshotNotification() { - if (!isSnapshot || snapsVersion.isEmpty() || currentVersion.equalsIgnoreCase(snapsVersion)) + if (!isSnapshot || !hasSnapsUpdate || snapsVersion.isEmpty() || currentVersion.equalsIgnoreCase(snapsVersion)) return ""; return getLocalizer().getMessage("lblNewSnapshotVersion", snapsVersion); } diff --git a/forge-gui-desktop/src/main/java/forge/view/FTitleBarBase.java b/forge-gui-desktop/src/main/java/forge/view/FTitleBarBase.java index efae38f2f95..6208b78b830 100644 --- a/forge-gui-desktop/src/main/java/forge/view/FTitleBarBase.java +++ b/forge-gui-desktop/src/main/java/forge/view/FTitleBarBase.java @@ -455,6 +455,7 @@ public abstract class FTitleBarBase extends SkinnedMenuBar { } private void updateVisibility() { setVisible(!isVisible()); + setEnabled(isVisible()); } } } diff --git a/forge-gui/src/main/java/forge/download/AutoUpdater.java b/forge-gui/src/main/java/forge/download/AutoUpdater.java index 008e8563166..ad09343f5bd 100644 --- a/forge-gui/src/main/java/forge/download/AutoUpdater.java +++ b/forge-gui/src/main/java/forge/download/AutoUpdater.java @@ -9,6 +9,8 @@ import java.net.Socket; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -147,6 +149,16 @@ public class AutoUpdater { return false; } // If version doesn't match, it's assummably newer. + if (buildVersion.contains("SNAPSHOT")) { + try { + URL url = new URL("https://downloads.cardforge.org/dailysnapshots/build.txt"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date snapsTimestamp = simpleDateFormat.parse(FileUtil.readFileToString(url)); + return snapsTimestamp.after(BuildInfo.getTimestamp()); + } catch (Exception ignored) { + return false; + } + } return true; }